Replication的犄角旮旯(九)-- sp_setsubscriptionxactseqno,赋予订阅活力的工具《Replication的犄角旮旯》系列导读
Replication的犄角旮旯(一)--变更订阅端表名的应用场景
Replication的犄角旮旯(二)--寻找订阅端丢失的记录
Replication的犄角旮旯(三)--聊聊@bitmap
Replication的犄角旮旯(四)--关于事务复制的监控
Replication的犄角旮旯(五)--关于复制identity列
Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)
Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)
Replication的犄角旮旯(八)-- 订阅与发布异构的问题
Replication的犄角旮旯(九)-- sp_setsubscriptionxactseqno,赋予订阅活力的工具
---------------------------------------华丽丽的分割线--------------------------------------------
前言:有人总是拿MySQL的Master\Slave和SQL Server的replication比较,说Mysql的复制有多么强大、多么灵活。作为SQLServer的死忠,也曾被replication各种 的黑盒搞得体无完肤。不过还好,我们还是能从MS流露出来的各种存储过程中,发现蛛丝马迹,结合我们的头脑风暴,来一场真真正正的革命……
sp_setsubscriptionxactseqno,第一次了解是在拜读前任DBR的blog《在SQLServer2005/2008事务复制中如何跳过一个事务》时,而近期在处理一个复制异常事件时,忽然灵光闪现,既然可以向后跳过某些事务,是否可以前滚到之前的某个时间点再继续复制呢?本文将通过实际测试,继续玩复制
闲话少叙,书归正传……
关于跳过某些复制事务,在此不再赘述,详见《在SQLServer2005/2008事务复制中如何跳过一个事务》;这里只说如何追溯到之前某个时间点;
关于sp_setsubscriptionxactseqno这个存储过程,详见MSDN:https://msdn.microsoft.com/zh-cn/library/ms188764.aspx
具体用法如下:
sp_setsubscriptionxactseqno [ @publisher= ] 'publisher' , [ @publisher_db= ] 'publisher_db' , [ @publication= ] 'publication' , [ @xact_seqno= ] xact_seqno
其中@xact_seqno这个参数,如果指定当前事务(起始点)之后的某个事务(截止点),就可以跳过两个时间点之间的事务;但如果需要跳到当前事务之前的某个事务时,除了sp_setsubscriptionxactseqno这个存储过程外,还需要一个系统表来配合才能实现——MSsubscriptions,位于分发库(默认为distribution)中;
MSsubscriptions记录了每个订阅与发布项目的关系,详见MSDN:https://msdn.microsoft.com/zh-cn/library/ms188368.aspx
其中publisher_seqno表示该订阅创建时在发布服务器上的事务序列号,subscription_seqno为快照事务序列号(非初始化订阅则与publisher_seqno一致);
在事务复制中,订阅端应用事务时,需要检测当前事务是否小于这两个参数,如果当前事务号小于上述两个列的值,则逻辑上判为不成立(当前执行的事务早于创建订阅时的事务,理论上不成立)。
因此,要想回跳到之前某个时间点的事务,需要手动更新相应的记录,至少保证publisher_seqno和subscription_seqno与你要回跳的那个事务号一致;
至此,我们目的达成,但这又有什么意义呢?当前时间点下的数据为什么要回跳到之前的某个事务呢?这就要说到前几天我们处理的一个案例;
先说一下我们的复制环境,以下图为例:
根节点为写库,承载主写业务,为避免单点故障,增加一灾备节点进行保护;
转发节点作为根节点的订阅以及末端节点的发布,只进行复制命令的转发工作,双转发进行冗余,避免单链路故障影响末端订阅;
末端订阅承载各类读业务,双链路各取部分节点做负载均衡;
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