T-SQL检查停止的复制作业代理,并启动

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

注:该脚本需要跑在分发服务器下的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
 
 
 
 
 本文转自CareySon博客园博客,原文链接:http://www.cnblogs.com/CareySon/p/4580883.html,如需转载请自行联系原作者


相关文章
|
存储 SQL 程序员
【Sql Server】存储过程通过作业定时执行按天统计记录
通过前两篇文章的学习,我们已经对创建表、存储过程、作业等功能点有所了解 本次将结合前面所学习的知识点,创建统计表以及结合作业定时按天以及实时统计域名各个长度的记录值
300 0
【Sql Server】存储过程通过作业定时执行按天统计记录
|
2月前
|
SQL 消息中间件 Kafka
Flink报错问题之SQL作业中调用UDTF报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
2月前
|
SQL 消息中间件 资源调度
Flink报错问题之flink 1.11 sql作业提交JM报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
8月前
|
SQL Java 数据库连接
2021-08-05mapper代理,几种pojo输入输出,pojo扩展通过扩展继承,映射主键普通属性映射,动态SQL,逆向工程
2021-08-05mapper代理,几种pojo输入输出,pojo扩展通过扩展继承,映射主键普通属性映射,动态SQL,逆向工程
45 0
|
4月前
|
存储 SQL 数据库
数据库第十二次作业 存储过程(PL/SQL语句集)的应用
数据库第十二次作业 存储过程(PL/SQL语句集)的应用
31 0
|
5月前
|
SQL 关系型数据库 MySQL
My SQL下载安装配置检查
My SQL下载安装配置检查
43 0
|
11月前
|
SQL 编解码 运维
一款SQL自动检查神器,到底有多厉害!
Yearning MYSQL 是一个SQL语句审核平台。提供查询审计,SQL审核等多种功能,支持Mysql,可以在一定程度上解决运维与开发之间的那一环,功能丰富,代码开源,安装部署容易!
|
12月前
|
SQL 编解码 运维
发现一款 SQL 自动检查神器,再也不用担心 SQL 出错了!(2)
发现一款 SQL 自动检查神器,再也不用担心 SQL 出错了!
发现一款 SQL 自动检查神器,再也不用担心 SQL 出错了!(2)
|
12月前
|
SQL 运维 关系型数据库
发现一款 SQL 自动检查神器,再也不用担心 SQL 出错了!(1)
发现一款 SQL 自动检查神器,再也不用担心 SQL 出错了!
发现一款 SQL 自动检查神器,再也不用担心 SQL 出错了!(1)
|
SQL 存储 数据可视化
【Sql Server】存储过程通过定时执行添加记录作业
通过上篇了解了什么是存储过程,创建存储过程的方法,以及调用存储过程的方法 本次将通过数据库中的作业功能,进行定时执行存储过程,这样就可以完成我们刚开始假设的场景
446 0