• transactional replication 的immediate_sync属性


    在默认情况下,immediate_sync是关闭的,这个属性可以在创建publication时指定,也可以在创建完毕后修改。 如果immediate_sync为true, snapshot 文件和replicated transaction将一直保留到data retention.然后才会被删除。这会导致distribution 数据库增长,复制性能下降。 所以推荐设置为false. 需要注意的时,如果一个数据库有多个publication,只要其中有一个publication的immediate_sync为true,将会导致这个数据库的所有publication的replicated transaction的保留期都延长至data retention.

    您可以在distribution database里执行下面的语句进行检查:

    select p.publication,p.publisher_db,ser.name as publisherServer from MSpublications p inner join sys.servers ser on p.publisher_id =ser.server_id where immediate_sync=1 and publication_type =0

    语句会列出immediate_sync为true的publication以及数据库和服务器信息。下面是一个执行结果的截图。

    之后您需要去发布数据库执行下面的语句将immediate_sync禁止

    exec sp_changepublication @publication = 'publicationName' ,@property = 'allow_anonymous' , @value = false

    exec sp_changepublication @publication = 'publicationName' , @property = 'immediate_sync' , @value = false

    有时候一些元数据信息无法被正确修改,导致即使immediate_sync为false, replicated transaction 仍然会被保留下来。 所以需要在distribution database中进行额外的检查:

    select *From MSdistribution_agents where subscriber_id<0

    如果这个查询仍然返回结果,则说明metadata有问题了。需要手工进行删除(请在Microsoft support service的指导下执行下面的语句)

    select * into MSdistribution_agents_bak From MSdistribution_agents where subscriber_id<0

    select * into MSdistribution_history_bak From MSdistribution_history where agent_id in

    (

    select id From MSdistribution_agents where subscriber_id<0

    )

    delete From MSdistribution_history where agent_id in

    (

    select id From MSdistribution_agents where subscriber_id<0

    )

    delete From MSdistribution_agents where subscriber_id<0

  • 相关阅读:
    Linux中的阻塞机制
    Shellz中awk的简单用法
    实际项目开发过程中常用C语言函数的9大用法
    堆栈溢出一般是什么原因?
    哈夫曼算法原理
    7款易上手C语言编程软件推荐
    嵌入式系统分类介绍
    什么是字符串数组
    C语言中数组定义方式
    第三章课后习题P56解析
  • 原文地址:https://www.cnblogs.com/stswordman/p/3267688.html
Copyright © 2020-2023  润新知