VBS脚本获取最新数据备份及重名数据文件

我们前面提到了,近期公司一直对OA系统上线忙前忙后,所以对于运维的我来说需要借助一些脚本工具替我分担解忧,现在遇到的问题是,我们需要将从真实环境上定时备份的SQL数据库数据拷贝到测试环境中,然后还原数据库,由于还原数据库我们使用SQL自带的脚本程序就可以完成,但是在完成的过程中,我们需要对还原的数据库名称做统一,因为我们都知道数据库通过计划任务备份后都是以日期命名的,所以我们在用脚本自动还原的时候不太方便,毕竟不怎么人性化,所以我们就想到的是,将最新备份的SQL数据文件通过VBS脚本拷贝到本地后,然后重名,这样就可以使用SQL自带的脚本程序来指定还原数据库了,当然有一个最重要的话题就是,因为SQL自动备份是以日期命名的,我们需要对最新的备份数据进行判断,所以需要在脚本中通过判断最后一次修改日期和当前日期比较,将最新的数据拷贝及重命名,废话不多说了,具体见下:

我们首先声明一下:在脚本的开始,我们定义了一个变量rname,目标是为了更好的使用,rname值就等于最终需要重名的名称;

我们首先是先确认目标目录数据

VBS脚本获取最新数据备份及重名数据文件_第1张图片

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

然后保存脚本后,我们开始执行脚本,执行后我们查看执行结果;

VBS脚本获取最新数据备份及重名数据文件_第2张图片

需要注意的话,如果需要将数据远程拷贝的话,我们只需要将两个目录添加为共享,然后添加每个计算机对应的目录权限即可。

然后我们使用windows自带的计划任务进行定时运行脚本即可

VBS脚本获取最新数据备份及重名数据文件_第3张图片

最后我们顺便说说SQL数据库还原如果遇到提示数据库正在使用的我们可以在master数据库上执行以下语句

ALTER DATABASE [DBName]

SET OFFLINE WITH ROLLBACK IMMEDIATE

执行后,如果还原出现以下问题;

VBS脚本获取最新数据备份及重名数据文件_第4张图片

我们就在还原选项下勾选覆盖现有数据库

VBS脚本获取最新数据备份及重名数据文件_第5张图片