用SSMS生成数据库作业的创建脚本的时候,有一步是sp_add_jobserver操作:

EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'

  之前没注意过这个细节。昨天看到网上有人提问,为什么前面已经调用存储过程sp_add_job创建作业了,后面还多此一举添加到服务器呢。我自己试了一下,把这块总结下。

 一、作业目标为本地服务器

  如果只调用sp_add_job创建作业,这时候作业能在SSMS对象资源管理器中的作业列表中显示,但无法执行,执行的时候会报如下错误:

无法启动作业 "XXX" (ID XXXX-XXXX-XXXX-XXXX-XXXXXXX),因为该作业未定义作业服务器。请通过调用 sp_add_jobserver 将该作业与作业服务器关联起来。

  查看作业属性页的“目标”选项卡,发现没有选中服务器。这也是sp_add_jobserver存储过程干的事。

  

  一般的作业,都选中了“目标为本地服务器”。如果想指定多台服务器,可以通过下面操作实现。

 二、作业目标为多台服务器

  首先指定一台服务器为主服务器,然后向这台服务器添加目标服务器,这样,目标服务器就会出现在上图中的列表框中,并可以被选中。当一个作业指定了目标服务器后,作业在主服务器上执行的时候,会向目标服务器发送指令,目标服务器下载作业,然后执行,最后将执行结果告诉主服务器。

  在设置数据库之前,需要修改主服务器的注册表中的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\SQLServerAgent下的AllowDownloadedJobsToMatchProxyName值,默认值是0,改成1,允许从主服务器下载作业。并修改目标服务器上HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\SQLServerAgent下的MsxEncryptChannelOptions值。这个值的意思在MSDN中有解释:Set Encryption Options on Target Servers。默认值是2,加密且需要证书,0是禁用加密。上述路径根据数据库版本和实例不同会不一样。

  现有两台服务器22.11.95.165和22.11.95.164,选择165作为主服务器,在“SQL Server代理”上右键-多服务器管理-将其设置为主服务器

  

  弹出主服务器向导,跳过前面的页,进入“目标服务器”设置页面,点击“添加链接”,连接164服务器,如下所示:

  

  然后下一步直到完成。如果出现错误“目标服务器无法与主服务xxxx建立加密连接。请确保目标服务器上的MsxEncryptChannelOptions注册表子项设置正确无误”,则检查上述注册表项修改是否正确,如果还有问题,就把两台服务器的MsxEncryptChannelOptions和AllowDownloadedJobsToMatchProxyName都修改掉。注册表值不正确,还会影响后续拆离操作。

  

  执行成功后,刷新SSMS中的"SQL Server Agent",会发现主服务器后面多了(MSX),“作业”分支下面多了“本地作业”和“多服务器作业”两个目录。目标服务器后面多了(TSX:22.11.95.165)

  

  这时,再选中主服务器上的一个作业,查看属性-目标选项卡,就可以看到可以选择22.11.95.164作为目标服务器了

  

  查看作业列表,刚才选择的作业进入到了“多服务器作业”目录。  

  然后查看目标服务器状态

  

  

  显示INSERT操作已经被目标服务器下载下来了。这时查看目标服务器,这个作业已经存在了。

  

  如果要删除这种多服务器方式,只要在刚才目标服务器的管理界面上,点击“发布指令”,指令类型选择“脱离”就可以了。

  

  稍等一会儿,服务器就脱离成功。两台服务器都回到了添加之前的样子。还要记得将刚才的作业修改成目标是本地服务器,否则无法执行。

SqlServer作业指定目标服务器的更多相关文章

  1. SQLServer作业调用链接服务器失败解决办法

    新建一个SQL作业,语句手动执行OK,但是作业计划执行总是报错. 消息已以用户 NT SERVICE\SQLSERVERAGENT 的身份执行. 链接服务器 "172.16.10.23&qu ...

  2. c#获得目标服务器中所有数据库名、表名、列名的实现代码

    /// <summary> /// 获得目标服务器所有数据库名 /// </summary> /// <param name="serverName" ...

  3. 7、provider: SQL 网络接口, error: 26 - 定位指定的服务器/实例时出错

    在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败.(provider: SQL 网络接口, error ...

  4. sqlbulkcopy 使用DataTable作为数据源的数据类型问题--来自数据源的String类型的给定值不能转换为指定目标列的类型 uniqueidentifier

    今天做批量插入的时候,SQLSERVER总是报错,错误提示“来自数据源的String类型的给定值不能转换为指定目标列的类型 uniqueidentifier”. 首先核对了一下定义的dataTable ...

  5. sqlserver如何创建链接服务器

    遇到下列问题: 线上服务器A,中转服务器B,本地服务器C 数据在A上面,想在B上面操作类似 select * from [A].[database].table这样的SQL,不用去链接服务器,直接把处 ...

  6. sql作业启停服务器

    IF EXISTS(SELECT * FROM msdb.dbo.sysjobs WHERE name='启用pubs数据库') EXEC msdb.dbo.sp_delete_job @job_na ...

  7. 在有跳板机的情况下,SecureCRT自动连接到目标服务器

    为了服务器的安全,运维人员经常会要求我们先登录到跳板机,然后再SSH连接到目标服务器.但是这样是很繁琐的,每次在SecureCRT创建一个连接,都需要输入SSH命令,然后输入密码. 下面的方法可以实现 ...

  8. 将本地文件上传到指定的服务器(HttpWebRequest方法)

    将本地文件上传到指定的服务器(HttpWebRequest方法),通过文件流,带文件名,同文件一同上传的表单文本域及值. ///<summary> /// 将本地文件上传到指定的服务器(H ...

  9. 解决本地SqlServer无法连接远程服务器数据库,错误10060

    本地SqlServer 连不上服务器的数据库环境,错误信息如下图,折腾来折腾去,最终还是解决了 第一步 查看服务器本地端口是否已经打开,查看方法:首先向C:\Windows\System32文件夹添加 ...

随机推荐

  1. git branch简单使用

    1,branch的建立及使用git clone user@192.168.0.136:/media/projiect/omap4/nexttab/kernel kernel/android3.0/  ...

  2. <base target="_self"/>标签的用法

    语法 <base target="value"> 属性值 值 描述 _blank 在新窗口中打开被链接文档. _self 默认.在相同的框架中打开被链接文档. _par ...

  3. SQL Server修改主、外键和约束

    0.创建表 create table Users ( Id int, Name ), Phone ), Email ), Role_Id uniqueidentifier ) go create ta ...

  4. javascript不用正则验证输入的字符串是否为空(包含空格)

    在项目中需要验证输入的字符串是否为空,包括空格,不太喜欢使用正则,所以就想到了js的indexOf函数,indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,如果要检索的字符串值没 ...

  5. 远程桌面连接KVM虚拟机

    问题描述 有些时候,由于网络存在问题,虚拟机无法获取到IP地址,无法使用spice或vnc来连接虚拟机,但是又需要连到虚拟机来排查故障 解决办法 编辑虚拟机配置 设置xml命名空间 <domai ...

  6. OpenStack基础知识-virtualenv工具详解

    1.virtualenv介绍 virtualenv通过创建一个单独的虚拟化python运行环境,将我们所需的依赖安装进去,不同项目之间相互不干扰,从而解决不同的项目之间依赖不同,造成的冲突问题 2.安 ...

  7. 【Python之os模块】使用

    目录 1. os.path 2. os.work   主要介绍在平时遇到的os模块的使用方法: 1. os.path 1.1 os.path.sep # 系统路径分隔符 # ============= ...

  8. 互不侵犯king (状压dp)

    互不侵犯king (状压dp) 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子.\(1\le n\ ...

  9. Linux 调优方案, 修改最大连接数(ulimit命令)

    https://blog.csdn.net/isoleo/article/details/51732687 https://www.cnblogs.com/zengkefu/p/5649407.htm ...

  10. redis安全配置

    禁用或者重命名危险命令 FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPO ...