合併複製

生活百科 2023-01-17 13:59生活百科www.aizhengw.cn

合併複製

合併複製通常也是从发布资料库对象和数据的报錶快照开始。并用触发器跟蹤在发布伺服器和订阅伺服器中所做的后续数据更改和架构修改。订阅伺服器与发布伺服器在连线到网路时进行同步,并交换自上次同步以来发布伺服器和订阅伺服器间发生变化的所有行。

基本介绍

  • 中文名合併複製
  • 开始发布资料库对象和数据的报錶快照
  • 开始代码sp_replicationdboption
  • 定义複製的一种

定义

複製的一种,允许站点对已複製数据进行匿名更改,并在晚些时候合併更改和根据需要解决冲突。

适用情况

多个订阅伺服器可能会在不间更新同一数据,并将这些更改传播到发布伺服器和其他订阅伺服器。
订阅伺服器需要接收数据,脱机更改数据,并在以后与发布伺服器和其他订阅伺服器同步更改。
每个订阅伺服器都需要不同的数据分区。
可能会发生冲突。如果发生冲突,则需要具备检测和解决冲突的功能。
应用程式需要最终的数据更改结果,而不是访问中间数据状态。例如,如果在订阅伺服器与发布伺服器进行同步之前,订阅伺服器中的行更改了五次,则该行在发布伺服器中仅更改一次,并更改为第五个值以反映最终数据更改。

工作原理

合併複製允许不同站点自主工作,然后在以后将更新合併成一个统一的结果。由于更新是在多个伺服器中进行,,同一数据可能由发布伺服器和多个订阅伺服器进行了更新。于是,合併更新时就可能出现冲突。合併複製提供有数种处理冲突的方法

执行步骤

合併複製的执行需要快照代理和合併代理。其主要步骤是
(1) 与快照複製、事务複製中快照代理的作用一样,合併複製的快照代理在开始複製之前也要完成二项任务;创建快照档案(同步集合)将存储在分发者的複製目录下;在出版资料库记录同步作业。合併代理将初始快照档案分发给订购者,从而完成订购初始化(出版资料库与订购资料库同步)。
(2) 当在某一节点(订购者)对出版物中表的某一行进行修改时,触发器会触发,并将该行的生成列generation column 设定为零。当合併代理执行时,它把所有生成列为零的合成一组或多组,凡是新的生成列值比原来的大,则用新值替换旧值。
(3) 在进行同步处理时,合併代理把所有生成列值为零的列(被修改的列)複製到所有其它订购者。
(4) 在目标资料库,从节点送来的数据与已存在数据进行合併,合併代理来进行冲突检测,如果未发生冲突则接收複製数据;如果发生冲突,合併代理根据预设或所设定的冲突解决规则来解决冲突。

发布与订阅

合併複製必须先初始化发布伺服器和订阅伺服器,然后才能在它们之间传递数据。 本主题提供有关初始化期间所进行的操作的信息。

初始化发布

下表列出了发布的初始化操作的详细信息,在您执行列出的每个存储过程时,或在完成新建发布嚮导后,都会发生这些初始化操作。 在为发布运行快照代理后,会发生进一步的初始化。
sp_replicationdboption
将发布资料库标记为要进行複製。 除非删除複製,否则不能删除该资料库。
将系统表添加到发布资料库中(除非该资料库中已存在合併发布)。 有关係统表的完整列表,请参阅本主题中的“在发布资料库和订阅资料库中创建的系统表”部分。
sp_addmergepublication
将发布项添加到系统表中。
sp_addpublication_snapshot
将快照代理作业添加到 SQL Server 代理系统中。 作业名称的格式为 <发布伺服器>-<发布资料库>-<发布>-<整数>
sp_addmergearticle
将複製的每个对象标记为要进行複製。 除非从所有发布中删除对象的相应项目,否则不能删除对象。
将代表每个项目的条目添加到系统表中。
发布资料库的其余初始化操作在为发布运行快照代理时执行(以后运行快照代理时,不会重新初始化发布资料库)。 如果使用新建发布嚮导,默认情况下会在完成嚮导后创建初始快照。 如果使用存储过程,则必须运行代理作业或直接运行代理。 有关运行代理的详细信息,请参阅如何启动和停止複製代理 (SQL Server Management Studio)和複製代理执行档概念。
为发布运行快照代理
在每个已发布的表中添加一个名为 rowguid的列,除非表中已有一个数据类型为 uniqueidentifier 并具有 ROWGUIDCOL 属性集的列(这种情况下将使用此列)。 rowguid列用于唯一标识每个已发布表中的每一行。 如果从发布中删除表,将删除 rowguid列;如果将现有列用于跟蹤,则不删除该列。
在发布资料库中为每个已发布的表创建下列对象(所有对象都在 dbo架构中创建)
将插入、更新和删除触发器添加到已发布的表中,以跟蹤更改。 触发器的命名格式为 MSmerge_ins_<GUID>MSmerge_upd_<GUID>MSmerge_del_<GUID>。 GUID 值从系统表 sysmergearticles中项目的项派生而来。
创建存储过程以处理已发布表的插入、更新和删除操作,并执行与複製相关的其他一些操作。
创建视图以管理插入、更新、删除和筛选操作。
创建冲突表以存储冲突信息。 冲突表与已发布表的架构相匹配 为每个已发布的表编写脚本,然后用脚本在发布资料库中创建冲突表。 冲突表的命名格式为 dbo.MSmerge_conflict_<发布>_<项目>
每次运行快照代理时,都会为发布资料库中的每个项目创建下列类型的档案(带有相应的档案扩展名)
架构 (.sch)
约束和索引 (.dri)
触发器 (.trg)
系统表数据 (.sys)
冲突表 (.cft)
数据 (.bcp) -- 不会为使用参数化筛选器的发布创建。
如果发布不使用任何参数化筛选器,快照会将已发布表的数据包含在一组 .bcp 档案中。 如果发布使用参数化筛选器(对于合併发布通常如此),初始快照将不包含任何数据。 将使用订阅伺服器分区的快照提供数据,这将在“初始化订阅”部分进行讨论。

初始化订阅

每个订阅都在订阅的合併代理运行并将初始快照複製到订阅资料库时进行初始化。 除了已複製对象的架构和数据之外,快照还包含发布资料库中存在的系统表、视图、触发器和存储过程(还会将一个或两个额外的系统表複製到订阅资料库中)。 有关係统表的完整列表,请参阅本主题中的“在发布资料库和订阅资料库中创建的系统表”部分。 如果重新初始化订阅,将覆盖所有已複製对象和複製系统对象。
如果发布资料库中的任何表都未使用参数化筛选器,则向每个订阅伺服器上複製相同的发布快照。 如果使用了一个或多个参数化筛选器,则每个订阅的初始化方式将由下列逻辑决定
如果在命令行中为合併代理提供了快照位置
则从此位置套用快照。
否则,如果快照是预生成的
则从发布资料库中的 MSmerge_dynamic_snapshots检索快照的位置,并从该位置套用快照。
否则,如果发布允许订阅伺服器初始化快照
如果已经为具有同一分区的其他订阅伺服器生成了快照,则将该快照套用于订阅伺服器。
否则,将生成快照并将其套用于订阅伺服器。
否则,将对发布中的表使用 SELECT 语句初始化订阅伺服器。 此方法要比使用订阅伺服器分区的快照慢得多。
如果快照传输在任一点中断,它将自动恢复并且不再重新传送已经全部传输的任何档案。 对于每个发布项目,快照代理的传递单位是bcp 档案,已部分传递的档案必须全部重新传递。 不过,恢复快照可以大幅度减少传输的数据量,即便在连线不可靠的情况下也可以确保及时进行快照传递。 有关创建快照的详细信息,请参阅带有参数化筛选器的合併发布的快照。

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有