首页 / 数据库 / SQLServer / SQL server Express自动化备份及删除备份文件
SQL server Express自动化备份及删除备份文件2014-08-08需求分析:因为公司遵从正版软件的许可,本着节约成本的优良传统,故没有使用什么盗版软件,用的是微软的SQL Server 2005 Express。因为对数据十分的重视,故需要每天对数据库进行备份,而又要删除两个星期之前的备份数据,经查阅资料,得出如下一套方案,还望各路大侠指点一二:现在的环境是一台安装SQL Server 2005 Express和Microsoft SQLServer 2005 Management Studio Express 图形化管理工具的服务器。现在在C盘下创建如下两个文件夹:C:Script和C:DB_Backup,Script下用于存放脚本文件,而DB_Backup下用于存放备份数据。1、C:Script文件夹下有下面三个文件:Schedule.cmd,DeleteDB.vbs 和BackupDB.sql2、BackupDB.sql 有如下内容:DECLARE @dateString CHAR(12), @dayStr CHAR(2), @monthStr CHAR(2), @hourStr CHAR(2), @minStr CHAR(2)--定义月变量IF (SELECT LEN(CAST(MONTH(GETDATE()) AS CHAR(2))))=2 SET @monthSTR=CAST(MONTH(GETDATE()) AS CHAR(2))ELSE SET @monthSTR= "0" + CAST(MONTH(GETDATE()) AS CHAR(2))--定义天变量IF (SELECT LEN(CAST(DAY(GETDATE()) AS CHAR(2))))=2 SET @daySTR=CAST(DAY(GETDATE()) AS CHAR(2))ELSE SET @daySTR="0" + CAST(DAY(GETDATE()) AS CHAR(2))--定义小时变量IF (SELECT LEN(DATEPART(hh, GETDATE())))=2 SET @hourStr=CAST(DATEPART(hh, GETDATE()) AS CHAR(2))ELSE SET @hourStr= "0" + CAST(DATEPART(hh, GETDATE()) AS CHAR(2))--定义分变量IF (SELECT LEN(DATEPART(mi, GETDATE())))=2 SET @minStr=CAST(DATEPART(mi, GETDATE()) AS CHAR(2))ELSE SET @minStr= "0" + CAST(DATEPART(mi, GETDATE()) AS CHAR(2))--定义基于当前时间戳变量SET @dateString=CAST(YEAR(GETDATE()) AS CHAR(4)) + @monthStr + @dayStr + @hourStr + @minStr--=================================================================DECLARE @IDENT INT, @sql VARCHAR(1000), @DBNAME VARCHAR(200)SELECT @IDENT=MIN(database_id) FROM SYS.DATABASES WHERE [database_id] > 0 AND NAME = "master"BEGIN SELECT @DBNAME = NAME FROM SYS.DATABASES WHERE database_id = @IDENT SELECT @SQL = "BACKUP DATABASE "+@DBNAME+" TO DISK = ""D:SQLTEST"+@DBNAME+"_db_" + @dateString +".BAK"" WITH INIT" EXEC (@SQL) SELECT @IDENT=MIN(database_id) FROM SYS.DATABASES WHERE [database_id] > 0 AND database_id>@IDENT AND NAME NOT IN ("TEMPDB")END3、DeleteDB.vbs下有如下内容:On Error Resume Next Dim fso, folder, files, sFolder, sFolderTarget Set fso = CreateObject("Scripting.FileSystemObject") "保存数据库备份文件路径sFolder = "D:SQLTEST"Set folder = fso.GetFolder(sFolder) Set files = folder.Files "用于写入文本文件,并生成删除数据库备份报告Const ForAppending = 8"在scripts下创建一个空txt文件:Log.txtSet objFile = fso.OpenTextFile(sFolder & "Log.txt", ForAppending)objFile.Write "================================================================" &VBCRLF & VBCRLFobjFile.Write " 数据库备文件报告 " & VBCRLFobjFile.Write " 日期: " & FormatDateTime(Now(),1) & "" &VBCRLFobjFile.Write " 时间: " & FormatDateTime(Now(),3) & "" &VBCRLF & VBCRLFobjFile.Write "================================================================" &VBCRLF"枚举备份文件目录文件For Each itemFiles In files "获取要删除文件的文件名 a=sFolder & itemFiles.Name "获取文件扩展名 b = fso.GetExtensionName(a) "检查扩展名是否为BAK If uCase(b)="BAK" Then "检查数据库备份是否为14天以前 If DateDiff("d",itemFiles.DateCreated,Now()) >= 14 Then "删除旧备份 fso.DeleteFile a objFile.WriteLine "备份文件已删除: " & a End If End IfNext objFile.WriteLine "================================================================" &VBCRLF & VBCRLFobjFile.CloseSet objFile = NothingSet fso = NothingSet folder = NothingSet files = Nothing4、在D:SQLTEST下创建一个文本文件:Log.txt,用于保存删除日志5、Schedule.cmd有如下内容:cd C:Program FilesMicrosoft SQL Server90ToolsBinnsqlcmd -S .SQLEXPRESS -E -i"d:SQLTESTBackupDB.sql"C:Script DeleteDB.vbs6、下面只要在计划任务里设置定时运行Schedule.cmd命令即可。参考文章:http://www.mssqltips.com/sqlservertip/1486/automate-sql-server-express-backups-and-deletion-of-older-backup-files/