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,如需转载请自行联系原作者


相关文章
|
7月前
|
SQL 运维 关系型数据库
一款 SQL 自动检查神器,再也不用担心 SQL 出错了,自动补全、回滚等功能大全
一款 SQL 自动检查神器,再也不用担心 SQL 出错了,自动补全、回滚等功能大全
129 0
|
存储 SQL 程序员
【Sql Server】存储过程通过作业定时执行按天统计记录
通过前两篇文章的学习,我们已经对创建表、存储过程、作业等功能点有所了解 本次将结合前面所学习的知识点,创建统计表以及结合作业定时按天以及实时统计域名各个长度的记录值
401 0
【Sql Server】存储过程通过作业定时执行按天统计记录
|
7月前
|
SQL API 流计算
实时计算 Flink版产品使用合集之在Mac M1下的Docker环境中开启SQL Server代理的操作步骤是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
256 1
|
3月前
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
84 2
|
4月前
|
SQL 缓存 关系型数据库
[mysql]状态检查常用SQL
[mysql]状态检查常用SQL
188 0
|
6月前
|
SQL 存储 运维
Flink⼤状态作业调优实践指南:Flink SQL 作业篇
本文整理自俞航翔、陈婧敏、黄鹏程老师所撰写的大状态作业调优实践指南。由于内容丰富,本文中篇内容分享 Flink SQL 作业大状态导致反压的调优原理与方法。
69768 7
Flink⼤状态作业调优实践指南:Flink SQL 作业篇
|
5月前
|
SQL 索引 关系型数据库
MySQL设计规约问题之为什么推荐使用EXPLAIN来检查SQL查询
MySQL设计规约问题之为什么推荐使用EXPLAIN来检查SQL查询
|
7月前
|
SQL Windows
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
安装SQL Server 2005时出现对性能监视器计数器注册表值执行系统配置检查失败的解决办法...
52 4
|
6月前
|
SQL 关系型数据库 数据库
sql检查数据库
在SQL中,要检查数据库的存在、状态或相关信息,你通常需要使用特定于数据库管理系统的系统视图或命令。不同的数据库管理系统(如MySQL、SQL Server、PostgreSQL等)有不同的方法来执行
|
7月前
|
SQL 消息中间件 资源调度
Flink报错问题之flink 1.11 sql作业提交JM报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。