zoukankan      html  css  js  c++  java
  • 重置分发服务器代理对于一致性错误处理的选项

    以下脚本可以根据replication的publication_name,订阅端服务器,发布端表名称,订阅端表名称来对分发代理对数据一致性错误处理选项进行设置(默认处理方式,跳过数据一致性处理)。

    -- ===========================================================
    -- script for :
    -- rest distribution agent profile
    -- ===========================================================
    IF OBJECT_ID(N'msdb.dbo.MSagent_profiles') IS NULL
        RETURN;
    
    DECLARE
        @sql nvarchar(max),
        @flag_default bit
        ,@publication_name sysname
        ,@pub_database_name sysname
        ,@sub_database_name sysname
        ,@sub_server_name sysname
    ;
    
    SELECT
        @flag_default = 1        --1:default        0:Continue on data consistency errors
        ,@publication_name=NULL                      --null:all  
        ,@pub_database_name=NULL               --null:all  
        ,@sub_database_name=NULL      --null:all 
        ,@sub_server_name=NULL   --null:all
    
    ;
    
    WITH
    DB AS(
        SELECT
            *
        FROM sys.databases WITH(NOLOCK)
        WHERE is_distributor = 1
    ),
    SQL AS(
        SELECT
            sql = N'
    USE ' + QUOTENAME(name) + N';
    WITH
    PF AS(
        SELECT
            profile_id_continue = MAX(
                    CASE
                        WHEN profile_name IN(
                                N''Continue on data consistency errors.'',
                                N''遇到数据一致性错误时继续。'')
                            THEN profile_id
                    END),
            profile_id_default = MAX(
                    CASE
                        WHEN profile_name IN(
                                N''Default agent profile'',
                                N''默认代理配置文件'')
                            THEN profile_id
                    END)
        FROM msdb.dbo.MSagent_profiles WITH(NOLOCK)
        WHERE agent_type = 3
            AND profile_name IN(
                    N''Continue on data consistency errors.'',
                    N''遇到数据一致性错误时继续。'',
                    N''Default agent profile'',
                    N''默认代理配置文件'')
    ),
    JOB AS(
        SELECT S.name SubServerName, 
            A.*
        FROM dbo.MSdistribution_agents AS A WITH(NOLOCK)
        INNER JOIN SYS.SERVERS  AS S WITH(NOLOCK)
        on S.server_id=A.subscriber_id
        where   A.publication=isnull(@publication_name,A.publication)   and A.publisher_db = isnull( @pub_database_name , publisher_db) 
        and A.subscriber_db=isnull(@sub_database_name,subscriber_db) and S.name= isnull(@sub_server_name,S.name) 
    )
    SELECT
        JOB.publication,
        JOB.SubServerName,
        JOB.publisher_db, JOB.subscriber_db,
        agent_id = JOB.id,
        job_name = JOB.name,
        PF.profile_id_continue,
        PF.profile_id_default,
        sql_job_stop = N''EXEC msdb.dbo.sp_stop_job @job_name = N'' + QUOTENAME(JOB.name, N''''''''),
        sql_job_profile = N''EXEC '' + QUOTENAME(DB_NAME()) + N''.dbo.sp_update_agent_profile @agent_type = 3, @agent_id = ''
                + RTRIM(JOB.id) + N'', @profile_id = ''
                '
                + CASE
                        WHEN @flag_default = 1 THEN N'+ RTRIM(PF.profile_id_default),'
                        ELSE N'+ RTRIM(PF.profile_id_continue),'
                    END
                + N'
        sql_job_start = N''EXEC msdb.dbo.sp_start_job @job_name = N'' + QUOTENAME(JOB.name, N'''''''') 
    FROM JOB, PF
    '
                + CASE
                        WHEN @flag_default = 1 THEN N'WHERE JOB.profile_id <> PF.profile_id_default'
                        ELSE N'WHERE JOB.profile_id = PF.profile_id_default'
                    END
                + N'
    ;
    '
        FROM DB
    )
    SELECT
        @sql = sql
    FROM SQL;
    PRINT(@sql);
    EXEC sys.sp_executesql @sql
                            ,N'@pub_database_name sysname,@sub_database_name sysname,@sub_server_name sysname,@publication_name sysname'
                            ,@pub_database_name = @pub_database_name
                            ,@sub_database_name=@sub_database_name
                            ,@sub_server_name=@sub_server_name
                            ,@publication_name=@publication_name;
    View Code
  • 相关阅读:
    [daily][dpdk] 内核模块(网卡驱动)无法卸载
    [development][tcp/ip][ids] 一个简单有参考价值的库 libnids
    [development][http][libhtp] suricata的http库--libhtp
    [skill][http] http管道化连接
    [skill][telnet] 用telnet获取一个网页
    [daily][grub2] grub2修改内核选项
    [knowledge] big data things
    [knowledge][dpdk] open data plane
    [daily] docker
    [knowledge] 停止等待协议
  • 原文地址:https://www.cnblogs.com/shihuai355/p/3964121.html
Copyright © 2011-2022 走看看