SQL Server 2005 Express自动备份及删除旧备份文件



  当越来越多多商业应用采用SQl Server 2005 Express 版本作为后台数据库时候我们必须确保能顺利备份系统以及运行在例子上用户数据库不幸SQl Server 2005 Express 版本没有SQL代理也就不能使用SQL代理来创建可以备份所有数据库数据库维护计划那么对于SQl Server 2005 Express 版本我们如何像其它版本样来备份系统和数据呢?

  专家解答

  我们可以通过Windows中任务管理结合VBSript和TSQL来达到在SQl Server 2005 Express 版本中自动备份系统和数据

  注意:所有文件都必须保存在如下文件夹:E:\SQL_Backup\scripts这个目录可以改变但在该例中设定是这个目录如果将文件保存到其它目录必须相应更新脚本中目录设置

  第步-创建TSQL脚本

  以下TSQL脚本将生成个数据库备份文件同时考虑到生成日期和时间其格式类似于数据库维护计划生成备份文件我们将的保存为后缀名.sql文件:E:\SQL_Backup\scripts\backupDB.sql该文件将在批处理命令文件中使用sqlcmd

DECLARE@dateStringCHAR(12),@dayStrCHAR(2),@monthStrCHAR(2),@hourStrCHAR(2),@minStrCHAR(2)
  --monthvariable
  IF(SELECTLEN(CAST(MONTH(GETDATE)ASCHAR(2))))=2
  SET@monthSTR=CAST(MONTH(GETDATE)ASCHAR(2))
  ELSE
  SET@monthSTR='0'+CAST(MONTH(GETDATE)ASCHAR(2))
  --dayvariable
  IF(SELECTLEN(CAST(DAY(GETDATE)ASCHAR(2))))=2
  SET@daySTR=CAST(DAY(GETDATE)ASCHAR(2))
  ELSE
  SET@daySTR='0'+CAST(DAY(GETDATE)ASCHAR(2))
  --hourvariable
  IF(SELECTLEN(DATEPART(hh,GETDATE)))=2
  SET@hourStr=CAST(DATEPART(hh,GETDATE)ASCHAR(2))
  ELSE
  SET@hourStr='0'+CAST(DATEPART(hh,GETDATE)ASCHAR(2))
  --minutevariable
  IF(SELECTLEN(DATEPART(mi,GETDATE)))=2
  SET@minStr=CAST(DATEPART(mi,GETDATE)ASCHAR(2))
  ELSE
  SET@minStr='0'+CAST(DATEPART(mi,GETDATE)ASCHAR(2))
  --namevariablebasedontimestamp
  SET@dateString=CAST(YEAR(GETDATE)ASCHAR(4))+@monthStr+@dayStr+@hourStr+@minStr
  --=
  DECLARE@IDENTINT,@sqlVARCHAR(1000),@DBNAMEVARCHAR(200)
  SELECT@IDENT=MIN(database_id)FROMSYS.DATABASESWHERE[database_id]>0ANDNAMENOTIN('TEMPDB')
  WHILE@IDENTISNOTNULL
  BEGIN
  SELECT@DBNAME=NAMEFROMSYS.DATABASESWHEREdatabase_id=@IDENT
  /*Changedisklocationhereasrequired*/
  SELECT@SQL='BACKUPDATABASE'+@DBNAME+'TODISK=''E:\SQL_Backup\'+@DBNAME+'_db_'+@dateString+'.BAK''WITHINIT'
  EXEC(@SQL)
  SELECT@IDENT=MIN(database_id)FROMSYS.DATABASESWHERE[database_id]>0ANDdatabase_id>@IDENTANDNAMENOTIN('TEMPDB')
  END






  第 2步-创建VBSript文件

  接下来我们需要创建个VBSript文件它将负责清理旧数据库备份文件该脚本同时也将生成日志文件记录数据库备份文件变化

  1. 你需要创建个名为E:\SQL_Backup\scripts\LOG.txt空文件来保存删除文件日志

  2. 将以下脚本保存为E:\SQL_Backup\scripts\deleteBAK.vbs 

OnErrorResumeNext
  Dimfso,folder,files,sFolder,sFolderTarget
  Setfso=CreateObject("Scripting.FileObject")
  'locationofthedatabasebackupfiles
  sFolder="E:\SQL_Backup\"
  Setfolder=fso.GetFolder(sFolder)
  Setfiles=folder.Files
  'usedforwritingtotextfile-generatereportondatabasebackupsdeleted
  ConstForAppending=8
  'youneedtocreateafoldernamed“scripts”foreaseoffilemanagement&
  'afileinsideitnamed“LOG.txt”fordeleteactivitylogging
  SetobjFile=fso.OpenTextFile(sFolder&"\scripts\LOG.txt",ForAppending)
  objFile.Write""&VBCRLF&VBCRLF
  objFile.Write"DATABASEBACKUPFILEREPORT"&VBCRLF
  objFile.Write"DATE:"&FormatDateTime(Now,1)&""&VBCRLF
  objFile.Write"TIME:"&FormatDateTime(Now,3)&""&VBCRLF&VBCRLF
  objFile.Write""&VBCRLF
  'iteratethrueachofthefileshedatabasebackupfolder
  ForEachitemFilesInfiles
  'retrievecompletepathoffilefortheDeleteFilemethodandtoextract
  'fileextensionusingtheGetExtensionNamemethod
  a=sFolder&itemFiles.Name
  'retrievefileextension
  b=fso.GetExtensionName(a)
  'checkthefileextensionisBAK
  IfuCase(b)="BAK"Then
  'checkthedatabasebackupsareolderthan3days
  IfDateDf("d",itemFiles.DateCreated,Now)>=3Then
  'DeleteanyoldBACKUPfilestocleanupfolder
  fso.DeleteFilea
  objFile.WriteLine"BACKUPFILEDELETED:"&a
  EndIf
  EndIf
  Next
  objFile.WriteLine""&VBCRLF&VBCRLF
  objFile.Close
  SetobjFile=Nothing
  Setfso=Nothing
  Setfolder=Nothing
  Setfiles=Nothing



  第 3步-创建TSQL脚本和VBSript批处理命令文件

  我们需要创建个批处理命令文件用来TSQL脚本和VBSript脚本批处理命令文件内容是对sqlcmd.exe简单、以及使用wscript.exe或者简单VBSript文件将以下内容保存为E:\SQL_Backup\scripts\databaseBackup.cmd这就是我们需要批处理命令

REMRunTSQLScripttobackupdatabases
  sqlcmd-S-E-i"E:\SQL_Backup\scripts\backupDB.sql"
  REMRundatabasebackupcleanupscript
  E:\SQL_Backup\scripts\deleteBAK.vbs



  第 4步-在Windows任务计划中创建任务

  在windows任务计划中创建个日常任务用的来的前创建批处理命令任务计划位置如下:开始菜单 -> 所有 -> 附件 -> 系统工具 ->任务计划

  我们运行TSQL脚本时开启了windows认证因此需要使用具备数据库db_backupoperator权限用户

  启动任务计划

  点击添加任务计划

  浏览目录“E:\SQL_Backup\scripts”选择databaseBackup.cmd

  选择频率标签并设定运行备份时间

Lastly,enteraWindowsaccountthathasatleastdb_backupoperatorroleprivilegesforallofthedatabases



  最后输入个windows账号该帐号对所有数据库至少要具备db_backupoperator角色权限




  截图如下

 

SQL Server 2005

  

SQL Server 2005

  

SQL Server 2005

  

SQL Server 2005

Tags: 

延伸阅读

最新评论

发表评论