Iai*_*der 3 windows-server-2008 robocopy sql-server
在我的 SQL Server 实例上,我使用 SQL 代理分两步运行每日备份作业。
步骤之一使用 Robocopy 将本地备份文件移动到网络存储。
移动文件的命令如下所示:
robocopy M:\backups \\NAS\backups$\Database /MOV /MIR /XJ /NP /COPY:DT
Run Code Online (Sandbox Code Playgroud)
作业步骤历史记录中的命令输出如下所示:
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Fri Jul 20 00:55:42 2012
Source : M:\backups\
Dest : \\NAS\backups$\Database
Files : *.*
Options : *.* /S /E /COPY:DT /MOV /PURGE /MIR /NP /XJ /R:1000000 /W:30
------------------------------------------------------------------------------
3 M:\backups\
*EXTRA File 15.5 m GeoDisplay_Full_2012-07-19-000004.bak
*EXTRA File 41.3 m GeoDisplay2_Full_2012-07-19-000004.bak
*EXTRA File 264.1 g Webstore_Full_2012-07-19-000004.bak
New File 15.5 m GeoDisplay_Full_2012-07-20-000002.bak
New File 41.4 m GeoStore_Full_2012-07-20-000002.bak
New File 302.1 g Webstore_Full_2012-07-20-000002.bak
2012/07/20 04:34:50 ERROR 32 (0x00000020) Deleting Source File M:\backups\Webstore_Full_2012-07-20-000002.bak The process cannot access the file because it is being used by another process.
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 1 0 1 0 0 0
Files : 3 3 0 0 0 3
Bytes : 302.187 g 302.187 g 0 0 0 264.181 g
Times : 3:38:57 3:38:45 0:00:00 0:00:11
Speed : 24720063 Bytes/sec.
Speed : 1414.493 MegaBytes/min.
Ended : Fri Jul 20 04:34:50 2012.
Process exit code 3.
Run Code Online (Sandbox Code Playgroud)
文本输出清楚地显示ERROR 32。Robocopy 未能兑现/MOV切换(在复制后从源中删除),因为当 robocopy 尝试删除一个文件时,另一个进程拥有该文件的句柄。
Robocopy 返回退出代码 3(将新文件复制到目标并从目标删除额外文件)。这是正确但不完整的,因为无法从错误代码中判断任何操作失败。
在确定命令外壳操作是否成功时,SQL 代理仅考虑返回代码,而不考虑命令输出。我可以修改 Robocopy 命令以将输出保存到磁盘,并在额外的作业步骤中解析输出,但这需要额外的编程并且会向备份作业添加另一个依赖项。
有没有办法在不搜索 Robocopy 的文本输出字符串的情况下检测这种故障ERROR 32?
无论是 RoboCopy 还是其他一些方法,我更喜欢记录所有输出,然后对日志进行后处理。我个人更喜欢 Perl 来完成这项任务,但使用任何你喜欢的东西。我也喜欢让测试检查脚本通过电子邮件将结果发送给我,显示它是成功还是在失败的情况下显示日志中的相关行。
在我看来,任何不包括报告结果的备份操作都是等待发生的灾难,因为您不可能对未经检查的操作充满信心。人类在检查日志方面做得非常糟糕,所以要付出额外的努力来编写脚本。没有它,您几乎可以保证某些关键操作有一天会失败,而您对此一无所知,可能冒的风险远不止数据。
| 归档时间: |
|
| 查看次数: |
6120 次 |
| 最近记录: |