AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 409644
Accepted
Iain Samuel McLean Elder
Iain Samuel McLean Elder
Asked: 2012-07-21 06:32:06 +0800 CST2012-07-21 06:32:06 +0800 CST 2012-07-21 06:32:06 +0800 CST

如何检测 robocopy 无法从源中删除?

  • 772

在我的 SQL Server 实例上,我使用 SQL Agent 分两步运行每日备份作业。

其中一个步骤使用 Robocopy 将本地备份文件移动到网络存储。

移动文件的命令如下所示:

robocopy M:\backups \\NAS\backups$\Database /MOV /MIR /XJ /NP /COPY:DT

作业步骤历史记录中命令的输出如下所示:

-------------------------------------------------------------------------------     
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.

文本输出清楚地显示ERROR 32。Robocopy 无法执行此/MOV切换(复制后从源中删除),因为当 robocopy 尝试删除一个文件时,另一个进程拥有该文件的句柄。

Robocopy 返回退出代码 3(新文件复制到目标,额外文件从目标删除)。这是正确但不完整的,因为无法从错误代码中判断任何操作失败。

在确定命令 shell 操作是否成功时,SQL 代理仅考虑返回代码,而不考虑命令输出。我可以修改 Robocopy 命令以将输出保存到磁盘,并在额外的作业步骤中解析输出,但这需要额外的编程并且会向备份作业添加另一个依赖项。

有没有办法在不搜索 Robocopy 的文本输出字符串的情况下检测这种故障ERROR 32?

windows-server-2008
  • 2 2 个回答
  • 6469 Views

2 个回答

  • Voted
  1. Best Answer
    John Gardeniers
    2012-07-23T05:14:42+08:002012-07-23T05:14:42+08:00

    无论是 RoboCopy 还是其他一些方法,我更喜欢记录所有输出,然后对日志进行后处理。我个人更喜欢 Perl 来完成这项任务,但可以使用任何您喜欢的语言。我也喜欢让测试检查脚本通过电子邮件将结果发送给我,显示它是否成功,或者在失败的情况下显示日志中的相关行。

    在我看来,任何不包括报告结果的备份操作都是等待发生的灾难,仅仅是因为您不可能对未经检查的操作有信心。人类在检查日志方面做得非常糟糕,所以要付出额外的努力来编写脚本。没有它,您几乎可以保证某天某些关键操作会失败,而您对此一无所知,所冒的风险可能远不止数据。

    • 5
  2. Greg Askew
    2012-07-23T06:13:23+08:002012-07-23T06:13:23+08:00

    退出代码描述“新文件复制到目标和额外文件从目标删除”在技术上不准确。你不应该只依赖描述。

    退出代码 0x3 是位标志。友好消息应解释如下:

    “成功复制了多个文件之一”

    加

    “检测到额外的文件或目录。 检查日志文件以获取更多信息。”

    Code    Meaning
    0   No errors occurred and no files were copied.
    1   One of more files were copied successfully.
    2   Extra files or directories were detected.  Examine the log file for more information.
    4   Mismatched files or directories were detected.  Examine the log file for more information.
    8   Some files or directories could not be copied and the retry limit was exceeded.
    16  Robocopy did not copy any files.  Check the command line parameters and verify that Robocopy has enough rights to write to the destination folder.
    

    Robocopy 退出代码
    https://blogs.technet.com/b/deploymentguys/archive/2008/06/16/robocopy-exit-codes.aspx

    结果是约翰是正确的。如果您想进行可靠的备份操作,就没有办法绕过检查日志。此外,您可能希望有一个脚本在 Robocopy 操作之后运行,该脚本删除悬空文件的句柄,然后删除这些文件。

    • 4

相关问题

  • 文件复制到分支机构

  • 对于 ASP.Net 应用程序,Windows 64 位相对于 32 位的主要优势是什么?

  • Windows Server 2008 Hyper-V 虚拟化服务器的最佳 RAID 配置?

  • 远程连接 sql server 不工作,但如果防火墙禁用它呢?

  • 无法从 SQL Server 2008 备份数据库

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve