我正在运行 SQL Server 2008,并希望设置一个代理作业来备份所有数据库。运行 SQL Server 的计算机是 Windows 域的一部分。备份文件的目的地在另一台机器上,它不在域中,所以我需要不同的凭据来访问它。
我创建了一个新的域帐户 (SqlBackup),将其添加为新的 SQL 帐户(授予它“备份数据库”)并使用它来运行代理作业。我以该用户身份在本地登录,以将目标网络共享映射到驱动器(为其提供必要的凭据)。
我用来备份所有数据库的脚本只调用“备份数据库”(在所有数据库的游标循环中)并将备份文件写入映射驱动器。问题是:当 SQL 代理以 SqlBackup 用户运行作业时,驱动器未映射。
我错过了什么?
如果您的作业正在执行命令行命令,请将其放入
.bat
要执行的文件中。然后,在
.bat
文件中,在执行实际工作的命令之前,使用net use
命令 (NET USE drive: share_name /USER:domain/user_id password
) 从 SQL 作业中映射驱动器。您可以提供所需的任何用户 ID 和密码。请记住在退出 bat 文件 ( ) 之前取消映射驱动器,NET USE drive: /delete
否则下次运行时它将生成一个错误级别,SQL 会将其解释为问题。当您从作业步骤执行.bat
文件时,“调用”.bat
文件 (CALL MY_BAT.BAT
) 或 SQL 可以在该步骤完成之前跳转到下一步.bat
。IIRC,驱动器映射仅适用于交互式登录 - 我相信您的备份作为服务运行。SQL 备份任务是否允许您使用 UNC 路径而不是映射驱动器来为目标驱动器添加凭据?
服务不能使用映射驱动器,据我所知,没有办法使用 UNC 路径传递凭据。如果无法将非域服务器添加到域中,我唯一的建议是将对该共享的写入权限授予“所有人”。
另一种方法可能是将备份转储到其本地服务器驱动器,然后在非域服务器上创建“收集器”批处理作业以将备份文件拉到其最终目的地。