事务复制中的snapshot
事务复制中的snapshot Snapshotagent 读取 article 的信息,将 article 的内容和脚本放置到snapshot文件夹中; 接下来 distributionagent 会读取这些快照文件,传输到订阅,完成初始化操作。期间 distributionagent 需要处理很多事情,例如判断快照是否可用
事务复制中的snapshot
Snapshotagent读取article的信息,免备案空间,将article的内容和脚本放置到snapshot文件夹中; 接下来distributionagent会读取这些快照文件,传输到订阅,完成初始化操作。期间distributionagent需要处理很多事情,例如判断快照是否可用,需要应用那些快照文件,传输过程中发生中断怎么办 等等。这些都需要distributionagent来协调。读完本文之后您会对这些处理方式有所了解,也会帮助您更好地判断当前事务复制的状态以及进行错误排查。
在此之前,我要先简单地介绍一下distributionagent的工作方式:
Distributionagent包含两个进程,香港服务器,reader和writer。 Reader负责从distribution 数据库中读取数据,Writer负责将reader读取的数据写入到订阅数据库.
reader是通过sp_MSget_repl_commands来读取distribution数据库中(读取Msrepl_transactions表和Msrepl_Commands表)的数据
下面是sp_MSget_repl_commands的参数定义
CREATE PROCEDURE sys.sp_MSget_repl_commands
(
@agent_id int,
@last_xact_seqno varbinary(16),
@get_count tinyint = 0, -- 0 = no count, 1 = cmd and tran (legacy), 2 = cmd only
@compatibility_level int = 7000000,
@subdb_version int = 0,
@read_query_size int = -1
)
这个存储过程有6个参数,在Transactionalreplication 中,只会使用前4个(并且第三个参数和第四个参数的值是固定不变的.分别为0和10000000)。下面是一个例子: