27. 交易式复写
交易式复写概观
交易式复写的应用
设定交易式复写系统
设定、监视与校调散发者
交易式复写校调
执行交易式复写
本章总结
第26章 介绍 Microsoft SQL Server 2000 复写,也简单的介绍了交易式复写。本章会继续介绍交易式复写,包括如何进行复写,何时利用复写,及如何设定、监控及校调交易复写系统。
交易式复写是较常用的复写方式,它可以很快的将更新资料送至订阅者端,而又不会造成发行者端太多负担。
交易式复写概观
望名生义,交易式复写用于复写交易。要进行交易式复写,一开始会将快照集套用在订阅者端,然后当发行者端有数据修改时,则会捕捉个别的交易并复写至订阅者端。所有的数据库更改,如数据库更新、插入或删除都会依此复写模式。
记录读取器代理程序 读取交易式复写的各数据库交易记录文件,在散发者端执行,并建立与发行者端之间的连结。要复写的交易从散发者端复制到散发数据库中,再由 散发代理程序 将散发数据库数据表中的交易数据移至订阅者端数据库。
每一个交易式复写的数据库都有一个属于该数据库的记录读取代理程序,这个代理程序在散发者端执行,并监控该交易库在发行者端的交易记录文件。一个数据库可能同时设定数个发行集,但一个数据库只能有一个 记录读取器代理程序 。
记录读取器代理程序 排程设定可在建立发行集时设定。此份排程可以设定为连续地发生,或是依 订阅者 排定的间隔。 记录读取器代理程序 会依以下事件顺序执行:
1. 记录读取器代理程序 读取发行集系统内的交易记录文件,建立一份清单,并记录复写数据库内 INSERT、UPDATE 及 DELETE 等陈述式或其它标示要复写的交易,如删除数据表,更改字段定义等类的交易。
2. 记录读取器代理程序 开始处理数据记录文件内的数据,并依发行集内定义的数据表发行项(article)进行水平或垂直筛选(filtering)。
3. 这些变更会以批次交易送至散发者上的散发数据库,在散发数据库中会有数个数据表来追踪复写的更改和作业。所有在发行者端的变更都要传送至订阅者端,而这些变更会存在 MSRepl_commands 数据表中,这个数据表将复写命令压缩储存。针对每一个所定义的发行项, MSRepl_commands 数据表均包含已复写命令的数据列,如插入、更新及删除。如果修改了发行者数据库中的数据表,且该数据库被包含在数个发行项中,这项修改就会在散发者端的数据库被复写。举例来说,如果三个发行项均包含A数据表,更新A数据表就会在散发者端的数据库新增三个数据列。
4. 在每一个批次成功的传送到散发者数据库以后,每一个批次中的交易都会被认可。如果认可失败,在代理程序错误记录中就会记录此错误讯息。
5. 在散发者数据库的更改被认可后,记录读取器代理程序会标示最后一次的变更,以及最新一次的复写执行,以避免重复更改的动作。
6. 当交易记录文件读取交易并被散发者数据库认可,记录读取器代理程序会在交易记录文件中标示哪些资料列已经备妥可以截断。
在发行者数据库端的每一次修改都会在散发者数据库端登记最少一次。在有些情况下,发行者数据库端的修改会在散发者数据库端登记好几次,以下为可能造成这种状况的原因:
• 当在数据表中有插入的动作时,在散发者数据库中属于发行项成员的数据表就会有插入的动作。如果数据表存在于两个不同的发行集,就会被定义为不同的发行项。在两个发行项中都会在发行者数据库中存在储存每一个在发行集数据库中的插入、更新和删除动作的数据列。
• 影响多列的更新或删除的操作,会为每一个所影响到的数据列在散发者数据库中建立数据行。执行更新或删除多列的 SQL 陈述式会使记录读取器代理程序在散发者数据库中,为每一个受影响的数据列建立个别的命令。在 SQL 陈述式中的 WHERE 子句被转换成一个可以依主索引键值指定数据库中数据列的 WHERE 子句。举例来说,一个含有 10 行数据的数据表,当执行一个可以影响所有资料行的更新命令时,会在散发者数据库中建立 10 项登记,每一项都会在 WHERE 子句中指定主索引键值。
交易式复写的应用
交易式复写可以用在当订阅者需要和发行者的数据保持同步。交易式复写可以被设定使订阅者可以在发行者更新后也立即更新订阅者端数据。即使记录读取器不断的在执行中,每次读取交易记录时也有几秒中的间隔,而不是不断的读取记录,以避免对发行者交易记录执行效率的影响。
交易式复写也可以设定使订阅者可以更新数据库。由于这个因素,交易式复写有很多应用,例如:
• 传送讯息 :交易式复写可以用在传送系统间讯息,尤其是当必须确定订阅者确实有收到讯息。一旦网络故障,数据会在网络回复后继续传送。
• 保存两系统间同步数据 :很多公司运用交易式复写传送总公司和分店之间的数据。当数据在总公司更新,在分店也会收到更新的数据。
• 分散负荷 :交易式复写可以用来分散数据库的负荷,用来回复反应时间较长及需要大量使用资源的查询,以降低主系统负荷。
设定交易式复写系统
设定交易式复写的方式和设定快照式复写很像。首先要先设定发行集,然后将发行集设定已提取或发送的方式传送至订阅者端。
________________________________________
说明
在设定任何 SQL Server 复写之前,请先设定发行和散发,详细设定请参照 第26章 。
________________________________________
安装发行集
建立一个交易式发行集和建立一个快照式发行集的过程相仿。以下为建立一个交易式发行集的步骤:
1. 在 Enterprise Manager 中选择 工具 。下一步可点选 复写 / 建立和管理发行集 ,或点选菜单中的 执行精灵 ,选择 建立发行集精灵 开启 建立与管理发行集 的对话框,如图27-1 所示。这个对话框中可以选择想要包含在发行集内的数据库或数据表。
图27-1 「建立与管理发行集」对话框
如果发行集已存在,还可点选以下更多选项:
o 发送新的订阅 :可将现有的发行集建立为 发送订阅(push subscription) 。本章的 〈设定订阅〉 一节会有详细说明。
o 属性与订阅 :可让您修改发行集与订阅的属性。
o 指令化发行集 :可让您建立 SQL 指令,用于建立其它更多的发行集。
o 删除发行集 :可删除已建立的发行集。
2. 选择想要建立发行集的数据库(本章以 Northwind 为例),选择数据库后按下 建立发行集 开启 建立发行集精灵 ,接着看到的是欢迎画面(如图27-2 所示)。勾选左下角的 显示这个精灵中的进阶选项 。
3. 按 下一步 进入 选取散发者 画面(如图27-3 所示)。这里可以选择想要包含在发行集内的数据库或数据表。默认值会将散发者设为上个步骤所选择的数据库。
图27-2 「建立发行集精灵」的欢迎画面
图27-3 「选取散发者」画面
________________________________________
说明
如果在系统中并没有指定散发者, 选择散发者 的画面会要求您指定散发者。一个发行集只能有一个散发者,如果您已设定了作为散发者的服务器,就会看到如下的 选择发行集数据库 画面。
________________________________________
4. 按 下一步 进入 选择发行集类型 ,如图27-4 所示。
图27-4 「选择发行集类型」画面
有三种发行集类型可以选择:
o 快照式发行集 :快照式发行集会在某个时间点完全复制一份发行项(article)给订阅者。快照式发行集可在任何数据表上建立。
o 交易式发行集 :在交易式复写发行集中,当发行集资料发生修改时,将交易传至订阅者。发行项必须在包含主索引键的数据表中建立。
o 合并式发行集 :在合并式发行集中, 订阅者 与 发行者 中的变更会被追踪,而稍后这些变更会合并形成单一的数据版本。合并式发行即可在任何数据表上建立。
5. 选择 交易式发行集 / 下一步 示 可更新的订阅 画面,如图27-5 所示。要在这个阶段显示这个画面,在 建立发行集精灵 的欢迎画面勾选 显示这个精灵中的进阶选项 (如图27-2)。若是没有勾选,则会出现 指定订阅者类型 画面。
图27-5 「可更新的订阅」画面
在这个画面中可以指定订阅者端所发生的变更,被复写到发行者的方式,可视需要选取下列选项:
o 实时更新 :复写代理程序利用 Microsoft 分布式交易协调员进行两阶段交易认可,当订阅者端发生变更,会实时更新至发行者。(实时更新会确认没有发生冲突,这些数据变更会透过两阶段交易认可,关于两阶段交易认可的细节,可参考本书 第25章 。)默认值不会将实时更新设成预设的订阅者选项。
o 队列更新 :队列更新容许订阅者端的更新数据队列,待网络联机后再将数据更新至发行者。这个选项容许订阅者更新数据库及传送更新数据至发行者,且不需透过两阶段交易认可。
________________________________________
说明
当系统需要一份一模一样的数据时,就必须设定实时更新,但是这个选项需要经过两个阶段的认可,因此可能造成很大的系统负担。且如果两个系统不是马上依设定执行,交易就不会被认可。所以如非必要则无须设定及时更新。
________________________________________
6. 按 下一步 进入 转换发行数据 画面,如图27-6 所示。这个选项是 SQL Server 的新增功能。Microsoft 数据转换服务(Data Transformation Services,DTS)
o 转换数据值或类型
o 改变英文字的大小写
o 数据合并
o 数据分割