当越来越多多商业应用采用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角色权限
截图如下
最新评论