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