用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. 35.windows提权总结

    本文参考自冷逸大佬的博客,源地址在这里:https://lengjibo.github.io/windows%E6%8F%90%E6%9D%83%E6%80%BB%E7%BB%93/ windows提 ...

  2. 【Strtus2】

    基于mvc设计模式的web应用框架!strtus2作为控制器来建立模型与视图数据的交互.

  3. VS2012打包部署教程

    前言 通常我们只是写一些系统,然后想要运行功能的时候就打开代码点击启动,这样只适用于开发人员或者局部开发人员这样做,软件开发的大多数意义上就是拿出开发的软件让用户放心的去点.用户无需知道代码,无需知道 ...

  4. 51nod1035(循环节)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1035 题意:中文题诶- 思路:求满足 10^k=1(mod ...

  5. uva 1615 高速公路(贪心,区间问题)

    uva 1615 高速公路(贪心,区间问题) 给定平面上n个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里得距离不超过D.(n<=1e5) 对于每个 ...

  6. [Xcode 实际操作]三、视图控制器-(7)UINavigationController自定义导航按钮

    目录:[Swift]Xcode实际操作 本文将演示设置导航按钮的样式,以及设置导航标题区域的样式. import UIKit class FirstSubViewController: UIViewC ...

  7. HDU2050 折线分割平面

    题目:acm.hdu.edu.cn/showproblem.php?pid=2050 递推: 从直线入手,第n条直线,最多和平面上的直线有n-1个交点,多出(n-1)+1个部分 序号 1 2 3 .. ...

  8. Java基础笔记(十四)——面向对象(续)【构造方法和this关键字】

    一.构造函数的规则 1.构造方法是用来在对象实例化时初始化对象的成员变量的,以完成对象的初始化工作. 2.构造方法与类名相同且没有返回值(返回值也不能为void型).如:public 构造方法名( ) ...

  9. tomcat怎么优化

    Tomcat有很多方面,我从内存.并发.缓存四个方面介绍优化方法. 一.Tomcat内存优化 Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚本 catal ...

  10. js 数组,字符串,json互相转换(在select实现多个输入的时候与后台交互常使用)

    数组转字符串 var arr = [1,2,3,4,'巴德','merge']; var str = arr.join(','); console.log(str); // 1,2,3,4,巴德,me ...