Windows SQL Server 备份无法传输至异地共享目录排查处理

📅 2026/7/6 7:09:18
Windows SQL Server 备份无法传输至异地共享目录排查处理
文中 IP 均为脱敏后的示例地址。一、示例环境项目示例信息数据库服务器 IP10.10.10.113异地备份服务器 IP10.10.20.192数据库本地备份目录F:\databasebak异地服务器本地目录F:\10.10.10.113异地共享访问路径\\10.10.20.192\f\10.10.10.113备份文件ES.EMS_backup_2026_07_05_020003.bak异地备份服务器将本地F:\共享为\\10.10.20.192\f因此异地服务器本地目录F:\10.10.10.113在数据库服务器上对应的网络访问路径为\\10.10.20.192\f\10.10.10.113其中目录名10.10.10.113对应数据库服务器的 IP。二、问题现象SQL Server 本地备份文件正常生成F:\databasebak\ES.EMS_backup_2026_07_05_020003.bak但传输脚本执行后异地备份服务器目录中没有对应文件F:\10.10.10.113在数据库服务器上手工执行复制命令copy /Y F:\databasebak\ES.EMS_backup_2026_07_05_020003.bak \\10.10.20.192\f\10.10.10.113\提示用户名或密码不正确。 已复制 0 个文件。查看返回码echo 返回码%errorlevel%结果为返回码1三、问题定位检查确认本地备份文件存在数据库服务器与异地备份服务器网络正常异地共享目录已创建其他服务器可以正常写入该共享目录当前数据库服务器手工复制时提示用户名或密码错误。最终确认当前 Windows 执行账户没有可用的异地 SMB 共享认证或原共享连接中保存的认证信息已经不可用。SMB 认证连接没有统一的固定失效时间但以下情况可能导致原连接不可用数据库服务器或异地备份服务器重启Windows 用户注销或切换异地服务器账户密码发生变化Windows 保存了旧密码网络中断导致原 SMB 会话断开计划任务更换了运行账户手工认证账户与计划任务运行账户不一致。四、处理步骤1. 查看当前共享连接在数据库服务器 CMD 中执行net use检查是否存在异地共享连接\\10.10.20.192\f2. 删除原有共享连接net use \\10.10.20.192\f /delete如果提示未找到连接可以忽略。检查 Windows 是否保存了旧凭据cmdkey /list如存在异地服务器旧凭据可删除cmdkey /delete:10.10.20.1923. 重新认证异地共享net use \\10.10.20.192\f /user:10.10.20.192\Administrator *根据提示输入异地备份服务器账户密码。密码输入时 CMD 不显示任何字符属于正常现象。认证成功后显示命令成功完成。认证到共享根目录即可不需要指定到具体子目录。4. 验证异地目录是否可以访问dir \\10.10.20.192\f\10.10.10.113能够正常列出目录内容说明共享路径和认证正常。5. 验证异地目录写权限echo test\\10.10.20.192\f\10.10.10.113\write_test.txt然后在异地备份服务器检查F:\10.10.10.113\write_test.txt测试完成后删除del \\10.10.20.192\f\10.10.10.113\write_test.txt6. 手工复制备份文件copy /Y F:\databasebak\ES.EMS_backup_2026_07_05_020003.bak \\10.10.20.192\f\10.10.10.113\对于几十 GB 的备份文件copy命令不会显示实时进度。命令窗口未返回提示符时通常表示文件仍在传输不要关闭窗口。传输完成后显示已复制 1 个文件。检查返回码echo 返回码%errorlevel%正常结果返回码07. 验证异地文件在数据库服务器执行dir \\10.10.20.192\f\10.10.10.113\ES.EMS_backup_2026_07_05_020003.bak在异地备份服务器本机执行dir F:\10.10.10.113\ES.EMS_backup_2026_07_05_020003.bak查看本地文件大小dir F:\databasebak\ES.EMS_backup_2026_07_05_020003.bak本地与异地文件字节数一致说明文件传输完整。五、传输脚本整改原脚本不能在复制命令执行后直接输出“传输成功”必须检查返回码。xcopy %source_path%\%today_file% %dest_path%\ /Y /Z if errorlevel 1 ( echo [失败] 文件传输失败返回码%errorlevel% exit /b 1 ) echo [成功] 文件传输完成。建议使用robocopy传输大文件robocopy F:\databasebak \\10.10.20.192\f\10.10.10.113 ES.EMS_backup_2026_07_05_*.bak /Z /R:3 /W:10判断返回码if errorlevel 8 ( echo [失败] Robocopy传输失败返回码%errorlevel% exit /b 2 )Robocopy返回码小于8通常不表示复制失败。传输完成后还应检查异地文件是否真实存在if not exist \\10.10.20.192\f\10.10.10.113\备份文件名.bak ( echo [失败] 异地目录未找到备份文件。 exit /b 3 )六、计划任务注意事项手工复制成功后计划任务仍可能失败因为 SMB 认证与 Windows 运行账户相关。需要确认计划任务使用固定的 Windows 账户该账户与执行net use的账户一致不使用没有共享认证的SYSTEM账户勾选“使用最高权限运行”脚本记录复制返回码传输完成后校验异地文件是否存在及大小是否一致。七、结论本次问题不是备份文件、网络或异地共享目录异常而是数据库服务器当前 Windows 执行账户缺少有效的 SMB 共享认证。重新执行net use \\10.10.20.192\f /user:10.10.20.192\Administrator *再手工执行copy /Y F:\databasebak\ES.EMS_backup_2026_07_05_020003.bak \\10.10.20.192\f\10.10.10.113\文件成功传输至异地服务器F:\10.10.10.113返回码为0问题解决。