首页 > 数据库 >SQL Server 2005部署备份任务.120308

SQL Server 2005部署备份任务.120308

时间:2025-01-21 10:11:28浏览次数:1  
标签:do %% Server catalog% 120308 SQL sqltemp rar data

环境:SQL Server 2005

任务:
1,每日凌晨1点给本地sql server做本地完整备份,且只保留7天的本地备份;
2,每日凌晨5点将本地的备份打包上传到存储服务器。

思路:
1,sql server2005不支持SQL Server2000的sqlmaint命令,所以,需要通过数据库维护计划进行备份,而不能一步成型的写bat脚本;
2,备份地址先保存到D:\dbbak\sqltemp,并给每个数据库建立子目录,凌晨1点执行;
3,写批处理,将sqltemp目录下的文件保留一个,并将这个文件rar打包放到D:\dbbak\data目录,并保存七天的备份文件,凌晨3点执行;
4,写一个wsf,将每日data目录的压缩包文件上传到存储服务器,凌晨5点执行。

操作步骤:

1,给SQL Server每日本地完整备份
1)打开management Studio-》管理-》右键 维护计划-》维护计划向导
2)按需选择自己的备份计划,本例备份完整的数据库,并存放在D:\dbbak\sqltemp,并给每个数据库建立子目录,备份文件名为bak,每日1点备份 
3) 开启sqlagent代理,测试一下,看是否正常。

2,创建脚本dbbackup.bat,实现思路3,内容如下:

@echo cd \ D: set catalog=D:\dbbak : 保留一天的备份文件 @for /f %%i in ('dir /b/ad %catalog%\sqltemp') do (@for /f "skip=1" %%f in ('dir /b/o-n %catalog%\sqltemp\%%i') do del /s/q %catalog%\sqltemp\%%i\%%f) : 压缩sqltemp子目录文件到data目录 @for /f %%i in ('dir /b/ad %catalog%\sqltemp') do (@for /f %%f in ('dir /b %catalog%\sqltemp\%%i') do (if not exist %catalog%\data\%%i mkdir %catalog%\data\%%i) & rar a -inul -m5 -r -ep1 %catalog%\data\%%i\%%f.rar %catalog%\sqltemp\%%i\%%f) : data目录(本地备份压缩文件)保留7天的备份 @for /f %%i in ('dir /b/ad %catalog%\data') do (@for /f "skip=7" %%f in ('dir /b/o-n %catalog%\data\%%i') do del /s/q %catalog%\data\%%i\%%f)

3,创建db-backup.wsf,实现思路4,内容如下:

<job> <script language="VBScript"> Function execMethod Dim WshShell, oExec WScript.echo "run method" Set WshShell = CreateObject("WScript.Shell") Set oExec = WshShell.Exec("calc") Do While oExec.Status = 0 WScript.Sleep 100 Loop WScript.Echo oExec.Status end function '文件根目录,压缩包目录,FTP命令文件,FTP目标IP function runMethod (folderspec,rarpath,ftpfile,ftpaddr) Dim sdate,datedir,dirname,xcopyDate ' get date path sdate = dateadd("d",d,date) datedir = year(sdate) & right("0" & month(sdate),2) & right("0" & day(sdate),2) xcopyDate = right("0" & month(sdate),2) & "-" & right("0" & day(sdate),2) & "-" & year(sdate) ' if hasdate="TRUE" then ' dirname = filedir & "\" & datedir ' else ' dirname = filedir ' end if Dim fso, f, f1, fc, foldname ,batfile , listname , ftplogfile Dim runstr batfile= rarpath & "runbat.bat" listname = rarpath & "log_" & datedir & ".log" ftplogfile = rarpath & "log_" & datedir & "ftp.log" Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(folderspec) Set fc = f.SubFolders Set fbat= fso.CreateTextFile(batfile, True) Set flist =fso.CreateTextFile(listname, True) Set fftp=fso.CreateTextFile(ftplogfile, True) Dim i,maxi,alli maxi=1 i=0 alli=0 For Each f1 in fc i=i+1 alli=alli+1 foldname = f1.name flist.WriteLine ( alli & ".. " & foldname & chr(13) ) 'fbat.WriteLine (" rar.exe a " & rarpath & foldname & "_" & datedir &".rar " & folderspec & "\" & foldname & chr(13) ) 'following: 修改为每天上传,并且只上传一个 fbat.WriteLine ("xcopy " & folderspec & foldname & "\*.rar /D:" & xcopyDate &" " & rarpath) 'fbat.WriteLine ("xcopy " & folderspec & foldname & "\*.rar" &" " & rarpath) fbat.WriteLine ("echo " & alli & "------------------- " & foldname & ">>" & ftplogfile & chr(13)) if i=maxi then fbat.WriteLine (" ftp -s:" & ftpfile & " " & ftpaddr & ">>" & ftplogfile & chr(13) ) fbat.WriteLine (" del *.rar" & chr(13) ) i=0 end if Next flist.WriteLine ("total: " & alli & chr(13) ) if i>0 then fbat.WriteLine (" ftp -s:" & ftpfile & " " & ftpaddr & chr(13) ) fbat.WriteLine (" del *.rar" & chr(13)) end if set fso=nothing set f1=nothing set f=nothing set fc=nothing set fbat=nothing set flist=nothing set fftp = nothing Dim oShell Set oShell = WScript.CreateObject ("WSCript.shell") runstr = "cmd /K cd " & rarpath runstr = runstr & " & runbat.bat " ' runstr = runstr & " & ftp -s:" & ftpfile & " " & ftpaddr ' runstr = runstr & " & del " & rarpath & & foldname & ".rar" runstr = runstr & " & exit" ' WScript.Echo runstr oShell.run runstr Set oShell = Nothing end function 'run '文件根目录,压缩包目录,FTP命令文件,FTP目标IP call runMethod ("D:\dbbak\data\","C:\job\dbback_up\db_backup\","c:\job\dbback_up\ftp.conf","11.11.13.14") </script> </job>  

ftp.conf内容:

username password cd db59237 bin prompt hash mput *.rar bye

另记得建一个db_backup子目录,用于存放日志。

4,创建计划任务,每日凌晨3点执行dbbackup.bat,每日凌晨5点执行db-backup.wsf  
  对于sql2000的备份,可以不依赖sql agent,只是创建一个维护计划,并直接在批处理文件中通过sqlmaint方式调用即可。

sql2000 dbbackup.bat内容:

@echo cd \ D: set catalog=D:\sqlbak **if not exist %catalog%\sqltemp mkdir %catalog%\sqltemp** **"C:\Program Files\Microsoft SQL Server\MSSQL\Binn\sqlmaint.exe" -PlanName data -BkUpDB %catalog%\sqltemp -BkUpMedia DISK -CrBkSubDir** rd /s/q %catalog%\sqltemp\msdb @for /f %%i in ('dir /b/ad %catalog%\sqltemp') do (@for /f "skip=1" %%f in ('dir /b/o-n %catalog%\sqltemp\%%i') do del /s/q %catalog%\sqltemp\%%i\%%f) @for /f %%i in ('dir /b/ad %catalog%\sqltemp') do (@for /f %%f in ('dir /b %catalog%\sqltemp\%%i') do (if not exist %catalog%\data\%%i mkdir %catalog%\data\%%i) & rar a -inul -m5 -r -ep1 %catalog%\data\%%i\%%f.rar %catalog%\sqltemp\%%i\%%f) @for /f %%i in ('dir /b/ad %catalog%\data') do (@for /f "skip=7" %%f in ('dir /b/o-n %catalog%\data\%%i') do del /s/q %catalog%\data\%%i\%%f)  

标签:do,%%,Server,catalog%,120308,SQL,sqltemp,rar,data
From: https://www.cnblogs.com/amadeuslee/p/18683042

相关文章

  • SQLServer2005恢复Master库.110509
    master库对于SQLServer来说,是很重要的系统数据库,保存着所有Sqlserver的用户信息、数据库信息等,当数据库崩溃时,master数据库的恢复成功与否起着重要的作用。这就跟Oracle的System表空间一样,非常的重要。备份数据前期准备:(1)在备用机准备好和生产机器一样的sql2005数据库环境(注意数......
  • MySQL数据库开启远程访问权限
    1、背景描述默认情况下,MySQL只允许本地登录,即只能在安装MySQL数据库所在的主机环境中访问。在实际开发和使用中,一般需要访问远程服务器的数据库,此时就需要开启服务器端MySQL的远程访问权限。2、查看MySQL的用户表如上图所示,Host列指定了允许用户登录所使用的IP,比如u......
  • PL/SQL 删除外键 ORA-02443: 无法删除约束条件-不存在的约束条件
    在PL/SQL中删除外键,无论是在【对象】窗口可视化操作删除还是用drop语句都会报错:ORA-02443:无法删除约束条件-不存在的约束条件看到有人有同样的问题。亲测之后:情况一:常规操作ALTERTABLEtable_nameDROPCONSTRAINTforeignkeyname;情况二:需要加引号(而且是双引号)ALTERTABL......
  • MySQL 中单独获取已知日期的年月日
    在MySQL中,处理日期和时间是一项常见任务。通常,我们需要从已知的日期中提取年、月、日等部分信息。MySQL提供了一些内置函数,可以方便地进行这些操作。本文将详细介绍如何在MySQL中单独获取已知日期的年、月、日部分。一、提取年份(Year)要从日期中提取年份,可以使用 YEAR() 函数......
  • mysql 获取当前时间戳13
    mysql获取当前时间戳13在MySQL中,您可以使用CURRENT_TIMESTAMP或NOW()函数来获取当前的时间戳。这将以'YYYY-MM-DDHH:MM:SS'格式返回当前的日期和时间。如果您需要的是一个UNIX时间戳(即自1970年1月1日以来的秒数),您可以使用UNIX_TIMESTAMP()函数。以下是获取当前UN......
  • sql server 获取当前时间戳
     sqlserver获取当前时间戳获取当前时间戳有以下几种方法实现:使用GETDATE()函数:  SELECTGETDATE()ASCurrentTimestamp;此方法返回当前日期和时间的完整时间戳。使用SYSDATETIME()函数:  SELECTSYSDATETIME()ASCurrentTimesta......
  • MySQL Switch Case
    MySQLSwitchCase123 在MySQL中,CASE语句用于根据条件返回值。当第一个条件满足时,它就会停止读取并返回结果。如果没有条件为真,则返回ELSE子句中的值。如果没有ELSE部分且没有条件为真,则返回NULL1。示例SELECT OrderID,Quantity,CASEWHEN Quantity>30 ......
  • 【数据库】详解MySQL数据库索引
    目录1.介绍2.索引概述2.1.优缺点3.索引结构3.1.B+Tree索引3.2.Hash索引4.索引分类5.索引语法5.1.创建索引5.2.查看索引5.3.删除索引6.SQL性能分析6.1.慢查询日志6.2.profile详情6.3.explain执行计划7.索引使用7.1索引使用原则7.1.1.最左前缀法则7.1.2.索引......
  • Mysql的学习
    Mysql建立索引优化:sql优化:为了解决下面的索引失效问题序列索引优化:解决orderby的关键在于提前在索引中就给好排序解决limit优化:利用id的子查询解决了回表查询然后提升了效能。关于count()的优化:`关于COUNT()的效率问题:COUNT()是用来统计记录数量的函数。不同写法的......
  • 2025.1.20——一、[RCTF2015]EasySQL1 二次注入|报错注入|代码审计
    题目来源:buuctf [RCTF2015]EasySQL1目录一、打开靶机,整理信息二、解题思路step1:初步思路为二次注入,在页面进行操作step2:尝试二次注入step3:已知双引号类型的字符型注入,构造payloadstep4:报错注入step5:三爆方法①extractvalue()函数方法②updatexml()函数三、小......