我们前面提到了,近期公司一直对OA系统上线忙前忙后,所以对于运维的我来说需要借助一些脚本工具替我分担解忧,现在遇到的问题是,我们需要将从真实环境上定时备份的SQL数据库数据拷贝到测试环境中,然后还原数据库,由于还原数据库我们使用SQL自带的脚本程序就可以完成,但是在完成的过程中,我们需要对还原的数据库名称做统一,因为我们都知道数据库通过计划任务备份后都是以日期命名的,所以我们在用脚本自动还原的时候不太方便,毕竟不怎么人性化,所以我们就想到的是,将最新备份的SQL数据文件通过VBS脚本拷贝到本地后,然后重名,这样就可以使用SQL自带的脚本程序来指定还原数据库了,当然有一个最重要的话题就是,因为SQL自动备份是以日期命名的,我们需要对最新的备份数据进行判断,所以需要在脚本中通过判断最后一次修改日期和当前日期比较,将最新的数据拷贝及重命名,废话不多说了,具体见下:
我们首先声明一下:在脚本的开始,我们定义了一个变量rname,目标是为了更好的使用,rname值就等于最终需要重名的名称;
我们首先是先确认目标目录数据
dim rname rname = "SQLRecoveryData" sourcefilespath="D:\EcologyDB_Backup" ‘desfilepath="\\10.12.0.51\Backup\DataBackup"&""&Year(date)&-Month(date)&-Day(date)&" "&Hour(time)&-Minute(time)&"\" desfilepath="D:\DBRcoveryDir\" Set dic=CreateObject("Scripting.Dictionary") Set fso=CreateObject("Scripting.FileSystemObject") If Not fso.FolderExists(desfilepath) Then ‘fso.CreateFolder desfilepath End If backFolderPath=GetLastModify(sourcefilespath) ‘msgbox backFolderPath fso.CopyFile backFolderPath,desfilepath&rname Function GetLastModify(folder) Set fso = createobject("scripting.FileSystemObject") Set Folder=fso.getFolder(folder) Set subFolders = Folder.Files nowdate= Now For Each subFolder In subFolders dic.Add datediff("s",subFolder.DateLastModified,nowdate),subFolder.path Next NumArray=dic.Keys bn = NumArray(0) For Each nn In NumArray If bn >= nn Then bn = nn End If Next GetLastModify = dic.Item(bn) End Function
然后保存脚本后,我们开始执行脚本,执行后我们查看执行结果;
需要注意的话,如果需要将数据远程拷贝的话,我们只需要将两个目录添加为共享,然后添加每个计算机对应的目录权限即可。
然后我们使用windows自带的计划任务进行定时运行脚本即可
最后我们顺便说说SQL数据库还原如果遇到提示数据库正在使用的我们可以在master数据库上执行以下语句
ALTER DATABASE [DBName]
SET OFFLINE WITH ROLLBACK IMMEDIATE
执行后,如果还原出现以下问题;
我们就在还原选项下勾选覆盖现有数据库
时间: 2024-10-21 18:23:06