如何通过主服务器SQL Server作业连接辅助服务器执行脚本?
解决SQL Server Agent作业跨服务器执行脚本的方案
两种可靠实现方案
方案一:使用CmdExec步骤调用sqlcmd
这是规避SQLCMD模式兼容性问题的稳定方案:
- 作业步骤类型选择:新建作业步骤时,类型选「操作系统(CmdExec)」
- 编写执行命令:
关键说明:sqlcmd -S <辅助服务器名/实例名> -U <SQL登录名> -P <登录密码> -i "D:\Scripts\辅助服务器脚本.sql" -b-b参数:脚本执行失败时返回错误码,让Agent能识别步骤失败- 脚本路径需用辅助服务器本地绝对路径,或主服务器可访问的共享路径(如
\\主服务器\共享目录\辅助脚本.sql) - 优先用SQL Server身份验证,避免Windows身份验证的跨域权限问题
方案二:使用链接服务器+EXEC AT
无需依赖外部脚本文件,直接通过T-SQL跨服务器执行:
- 在主服务器创建链接服务器:
EXEC sp_addlinkedserver @server = N'辅助服务器实例名', @srvproduct=N'SQL Server'; EXEC sp_addlinkedsrvlogin @rmtsrvname=N'辅助服务器实例名', @useself=N'False', @locallogin=NULL, @rmtuser=N'SQL登录名', @rmtpassword=N'登录密码'; - 作业步骤类型选「Transact-SQL(T-SQL)」,执行代码:
注意:链接服务器的登录账号需拥有辅助服务器上操作的足够权限EXEC (' -- 这里写入辅助服务器需执行的脚本内容 ALTER DATABASE [目标数据库] SET RECOVERY FULL; BACKUP DATABASE [目标数据库] TO DISK = ''D:\Backups\FullBackup.bak''; ') AT [辅助服务器实例名];
避坑要点
- 放弃使用
:Connect命令:它是SQLCMD专属命令,Agent的T-SQL步骤不支持;之前调用sqlcmd卡住多为权限/网络问题,检查防火墙、SQL Server远程连接设置 - 若用共享路径存脚本,需确保Agent服务账号有访问共享的权限
- 执行收缩、恢复模式切换前,需确认辅助服务器上的数据库处于可操作状态(如先退出AlwaysOn可用性组)
内容的提问来源于stack exchange,提问作者LYNITS
相关产品推荐
相关产品推荐

