用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. CRM 客户关系管理系统

    CRM(Customer Relationship Manager)客户关系管理系统 企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方 ...

  2. nginx设置成开机自动启动服务

    1.nginx的安装目录 /usr/local/nginx 启动nginx cd /usr/local/nginx/sbin./nginx 更改配置重启nginxcd /usr/local/nginx ...

  3. 2018牛客多校第九场E(动态规划,思维,取模)

    #include<bits/stdc++.h>using namespace std;const long long mod=1000000007,inv=570000004;long l ...

  4. springIOC源码解析之BeanDefinition的注册

    ApplicationContext类结构 context是一个存储上下文结构的东西,里面会引用BeanFactory  BeanFactory类结构 我们从这句代码开始分析,(本文spring采用的 ...

  5. IdentityServer4 学习笔记[1]-客户端授权

    前言 本文内容来自IdentityServer4官网,官网有详细的介绍,并且有源码Demo 官网源码例子传送门 建立授权服务端 我们暂时不配置Https,选择空模板建立项目,项目建立后, 为了查看de ...

  6. web版聊天框

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. xcode定期清理记录一下

    此文章仅适用于适用于使用Xcode的开发者. 长期不清理Xcode中的一些文件你会发现自己的mac硬盘越来越小,而且是这个其他占了绝大部分的硬盘,在网上搜索了很多办法都没找到如何清理这些其他 后来来来 ...

  8. js中函数提升及var变量提示

    其中,在javascript中,函数声明及var声明的变量会得到提升.但是函数声明会先于var声明的变量被提升.即便function写在后面. 看下面的例子: var aa = 221; functi ...

  9. POJ1016 Numbers That Count

    题目来源:http://poj.org/problem?id=1016 题目大意: 对一个非负整数定义一种运算(inventory):数这个数中各个数字出现的次数,然后按顺序记录下来.比如“55531 ...

  10. 未找到与约束 Micorosoft.CodeAnalysis.Editor.TypeScript.ToolsOptions.IUserSettingsProvider

    问题: 未找到与约束  ContractName Micorosoft.CodeAnalysis.Editor.TypeScript.ToolsOptions.IUserSettingsProvide ...