有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题。因此我写了一个脚本定期检查处于停止状态的分发代理,将其启动。

注:该脚本需要跑在分发服务器下的MSDB库中。

 

USE [msdb]

 

Create PROC [dbo].[CheckToRestartStopedAgentJob]

AS

    DECLARE @jobname VARCHAR(200)

 

    DECLARE jobname CURSOR

    FOR

        SELECT DISTINCT

                b.name AS MergeJobName

        FROM    distribution.dbo.MSdistribution_history a

                INNER JOIN distribution.dbo.MSdistribution_agents b ON a.agent_id = b.id

        WHERE   comments LIKE '传递了%'

 

    OPEN jobname

 

    FETCH NEXT  FROM jobname INTO @jobname

 

    WHILE @@FETCH_STATUS = 0

        BEGIN

 

 

 

                BEGIN

 

                    IF NOT EXISTS ( SELECT  *

                                    FROM    msdb..sysjobs

                                    WHERE   Name = @jobname )

                        BEGIN

                            PRINT 'Job does not exists'

     

                        END

                    ELSE

                        BEGIN

                            CREATE TABLE #xp_results

                                (

                                  job_id UNIQUEIDENTIFIER NOT NULL ,

                                  last_run_date INT NOT NULL ,

                                  last_run_time INT NOT NULL ,

                                  next_run_date INT NOT NULL ,

                                  next_run_time INT NOT NULL ,

                                  next_run_schedule_id INT NOT NULL ,

                                  requested_to_run INT NOT NULL , -- BOOL  

                                  request_source INT NOT NULL ,

                                  request_source_id SYSNAME

                                    COLLATE database_default

                                    NULL ,

                                  running INT NOT NULL , -- BOOL  

                                  current_step INT NOT NULL ,

                                  current_retry_attempt INT NOT NULL ,

                                  job_state INT NOT NULL

                                )  

 

                            INSERT  INTO #xp_results

                                    EXECUTE master.dbo.xp_sqlagent_enum_jobs 1,

                                        'sa'  

 

                            IF EXISTS ( SELECT  1

                                        FROM    #xp_results X

                                                INNER JOIN msdb..sysjobs J ON X.job_id = J.job_id

                                        WHERE   x.running = 1

                                                AND j.name = @jobname )

                                BEGIN

                                    PRINT 1

                                END

                            ELSE

                                BEGIN

                                    INSERT  INTO master.dbo.RestartMergeReplicationLog

                                            ( message ,

                                              errortime

                                            )

                                    VALUES  ( 'Job:' + @jobname

                                              + ' is not running,restarting......' ,

                                              GETDATE()

                                            )

                                    EXEC('EXEC dbo.sp_start_job  '''+@jobname+'''' )

                                END 

                            DROP TABLE #xp_results

                        END

   

 

 

 

 

 

         

            FETCH NEXT  FROM jobname INTO @jobname

        END

 

 

    CLOSE jobname

    DEALLOCATE jobname

 

 

 

 

 

 

T-SQL检查停止的复制作业代理,并启动的更多相关文章

  1. T-SQL检查停止的复制作业代理,并启动 (转载)

    有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题.因此我写了一个脚本定期检查处于停止状态的分发代理, ...

  2. sql server 用脚本管理作业

    转自:https://blog.csdn.net/yunye114105/article/details/6594826 摘要: 在SQL SERVER中用脚本管理作业,在绝大部分场景下,脚本都比UI ...

  3. 通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...

  4. sql server 2008数据复制

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数 ...

  5. SQL Server 2005同步复制

    原文:SQL Server 2005同步复制 以下实现复制步骤(以快照复制为例) 运行平台SQL SERVER 2005 一.准备工作: 1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密 ...

  6. SQL Server2005配置同步复制

    因为实际需要,需要对两台SQL Server服务器配置同步复制.记录一下配置过程. 配置环境 两台服务器: 发布服务器,以下简称PS. 订阅服务器,以下简称SS. 两台服务器都是Windows Ser ...

  7. SQL Server 2000事务复制问题

    2000现在用的估计不多了,把之前收集的一些复制问题整理发布出来.可能都是些很白很二的问题,但人总是由最初的无知不断成长●-● SQL Server 2000事务复制问题服务器A(发布) 服务器B(分 ...

  8. 【转】通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数 ...

  9. SQL Server跨库复制表数据错误的解决办法

    SQL Server跨库复制表数据的解决办法   跨库复制表数据,有很多种方法,最常见的是写程序来批量导入数据了,但是这种方法并不是最优方法,今天就用到了一个很犀利的方法,可以完美在 Sql Serv ...

随机推荐

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. C# 利用性能计数器监控网络状态

    本例是利用C#中的性能计数器(PerformanceCounter)监控网络的状态.并能够直观的展现出来 涉及到的知识点: PerformanceCounter,表示 Windows NT 性能计数器 ...

  3. ExtJS 4.2 组件的查找方式

    组件创建了,就有方法找到这些组件.在DOM.Jquery都有各自的方法查找元素/组件,ExtJS也有自己独特的方式查找组件.元素.本次从全局查找.容器内查找.form表单查找.通用组件等4个方面介绍组 ...

  4. Android Ormlite 学习笔记2 -- 主外键关系

    以上一篇为例子,进行主外键的查询 定义Users.java 和 Role.java Users -- Role 关系为:1对1 即父表关系 Role -- Users 关系为:1对多 即子表关系 下面 ...

  5. CentOS 7配置LNMP开发环境及配置文件管理

    安装并配置MySQL 5.6 从CentOS从7.x开始默认使用MariaDB.MariaDB完全兼容MySQL,包括API和命令行.但是很多时候我们还是会想要安装MySQL,所以不能直接通过yum命 ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-Web打印

    系列目录 前言 1.本次主要弥补工作流,用户表单数据的打印 2.使用JQprint做为web打印插件 3.兼容:FireFox,Chrome,IE. 4.没有依赖也没有配置,使用简单 代码下载:htt ...

  7. jQuery.template.js 简单使用

    之前看了一篇文章<我们为什么要尝试前后端分离>,深有同感,并有了下面的评论: 我最近也和前端同事在讨论这个问题,比如有时候前端写好页面给后端了,然后后端把这些页面拆分成很多的 views, ...

  8. 【C#附源码】数据库文档生成工具支持(Excel+Html)

    [2015] 很多时候,我们在生成数据库文档时,使用某些工具,可效果总不理想,不是内容不详细,就是表现效果一般般.很多还是word.html的.看着真是别扭.本人习惯用Excel,所以闲暇时,就简单的 ...

  9. java常用的设计模式

    设计模式:一个程序员对设计模式的理解:"不懂"为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的"复杂"恰恰就是设计模式的精髓所 ...

  10. JavaScript基础

    JavaScript基础 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处 ...