zoukankan      html  css  js  c++  java
  • 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
     
     
     
     
     
     
  • 相关阅读:
    剑指offer——最小的K个数和数组中第K大的元素
    Leetcode刷题指南链接整理
    160. Intersection of Two Linked Lists
    100. Same Tree
    92. Reverse Linked List II
    94. Binary Tree Inorder Traversal
    79. Word Search
    78,90,Subsets,46,47,Permutations,39,40 DFS 大合集
    0x16 Tire之最大的异或对
    0x16 Tire
  • 原文地址:https://www.cnblogs.com/CareySon/p/4580883.html
Copyright © 2011-2022 走看看