欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

事务复制中的snapshot

程序员文章站 2022-06-01 20:25:16
...

事务复制中的snapshot Snapshotagent 读取 article 的信息,将 article 的内容和脚本放置到snapshot文件夹中; 接下来 distributionagent 会读取这些快照文件,传输到订阅,完成初始化操作。期间 distributionagent 需要处理很多事情,例如判断快照是否可用

事务复制中的snapshot

Snapshotagent读取article的信息,免备案空间,将article的内容和脚本放置到snapshot文件夹中; 接下来distributionagent会读取这些快照文件,传输到订阅,完成初始化操作。期间distributionagent需要处理很多事情,例如判断快照是否可用,需要应用那些快照文件,传输过程中发生中断怎么办 等等。这些都需要distributionagent来协调。读完本文之后您会对这些处理方式有所了解,也会帮助您更好地判断当前事务复制的状态以及进行错误排查。

在此之前,我要先简单地介绍一下distributionagent的工作方式:

Distributionagent包含两个进程,香港服务器,readerwriterReader负责从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)。下面是一个例子: