我们前面提到了,近期公司一直对OA系统上线忙前忙后,所以对于运维的我来说需要借助一些脚本工具替我分担解忧,现在遇到的问题是,我们需要将从真实环境上定时备份的SQL数据库数据拷贝到测试环境中,然后还原数据库,由于还原数据库我们使用SQL自带的脚本程序就可以完成,但是在完成的过程中,我们需要对还原的数据库名称做统一,因为我们都知道数据库通过计划任务备份后都是以日期命名的,所以我们在用脚本自动还原的时候不太方便,毕竟不怎么人性化,所以我们就想到的是,将最新备份的SQL数据文件通过VBS脚本拷贝到本地后,然后重名,这样就可以使用SQL自带的脚本程序来指定还原数据库了,当然有一个最重要的话题就是,因为SQL自动备份是以日期命名的,我们需要对最新的备份数据进行判断,所以需要在脚本中通过判断最后一次修改日期和当前日期比较,将最新的数据拷贝及重命名,废话不多说了,具体见下:
我们首先声明一下:在脚本的开始,我们定义了一个变量rname,目标是为了更好的使用,rname值就等于最终需要重名的名称;
我们首先是先确认目标目录数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
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
执行后,如果还原出现以下问题;
我们就在还原选项下勾选覆盖现有数据库
本文转自 高文龙 51CTO博客,原文链接:http://blog.51cto.com/gaowenlong/1835799,如需转载请自行联系原作者