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 数据分割
图27-6「转换发行数据」画面
7. 按 下一步 进入 指定订阅者类型 画面,如图27-7 所示。这个画面允许指定是否所有的订阅者都执行 SQL Server。尽量接受预设的设定,也就是指定所有的订阅者皆使用 SQL Server 2000。如果接受此设定,就接受所有复写皆使用原 SQL Server 数据型别。如果 SQL Server 7 系统也被用在复写设定中,选择第二个复选框;如果设定中有非 SQL Server 的系统,就选取第三个复选框,使复写数据转换成文字格式。这样的转换会造成系统多余的负荷。
图27-7「指定订阅者类型」画面
8. 按 下一步 进入 指定发行项 画面,如图27-8 所示。这里可以指定将被复写为发行项的数据表、预存程序和检视表。这些发行项会整理为发行集。在右手的方块中选择想要的数据表、预存程序和检视表,或勾选在 全部发行 数据行中想要发行的对象类型。记住,每一个对象就是一个发行项,而一个发行集是一组依逻辑组合的发行项。
图27-8「指定发行项」画面
________________________________________
说明
如果在订阅者端有预存程序,可以设定复写预存程序的执行,而不会复写这些预存程序执行后造成的数据变更。
________________________________________
9. 按 下一步 ,在这个步骤中,SQL Server 检查发行集,如果有任何的错误,就会出现如图27-9 的画面。
图27-9「发行项的问题」画面
10. 在发行集分析完成后,按下 确定 回到精灵,进入 发行集名称与描述 画面,如图27-10 所示。
11. 按 下一步 进入 自定发行集的属性 画面,如图27-11 所示。在这里可以指定是否定义数据筛选或其它属性,选择 是, ....。
图27-10「发行集名称与描述」画面
图27-11「自定发行集的属性」画面
12. 按 下一步 进入 筛选数据 画面,如图27-12 所示。在这个画面中,可以指定是否用垂直筛选以筛选资料行,还是以平行方式筛选数据列。两个都选择后按下 下一步 。
图27-12「筛选资料」画面
13. 进入 筛选数据行 画面,如图27-13 所示。这个画面可让您选择不想复写的数据行。可从 选取数据表的数据行 清单中,清除复选框的勾选,即可将不想复写的数据行移除。这样就可以垂直筛选的方式建立发行项,使发行者端复写较少的资料行。
________________________________________
说明
含主索引键的数据行是不能被移除的,因为主索引键在交易式复写时会被使用到。本章稍早有解释过这项限制。
________________________________________
14. 按 下一步 进入 筛选数据表的数据列 画面,如图27-4 所示。在这个画面中可以筛选数据列,按下这个可进入 指定筛选 的 [...] 按钮,就可设定筛选。
图27-13「筛选资料行」画面
图27-14「筛选资料列」画面
15. 指定筛选 对话框出现,如图27-15 所示。这个对话框让您将 WHERE 子句加入 SQL 陈述式,以筛选数据列。当选定要复写的数据列后,按 确定 回到精灵。
图27-15「指定筛选」对话框
16. 按 下一步 进入 允许匿名订阅 画面,如图27-16 所示。这个画面允许指定是否允许匿名订阅或具名订阅。可依您实际需要选择。
图27-16「允许匿名订阅」画面
17. 按 下一步 进入 设定快照集代理程序的排程 ,可参照 26章中的〈设定快照式复写〉 一节的步骤十五和步骤十六的相关设定。由于在交易式复写中,快照集仅在一开始建立订阅者数据表时使用,因此可设定以手动方式建立快照集,不必设定建立快照集的排程。
18. 排程建立后,按 下一步 进入 完成建立发行精灵 画面,以及浏览此发行集所设定的选项。按 完成 确认所有的设定,对话框会出现并告知发行集已建立完成。
设定记录读取器代理程序
在建立了发行集后,可以修改记录读取器代理程序的组态,举例来说,以选定执行模式的方式,可指定记录读取器代理程序应如何被启用。在连续模式中(预设模式),记录读取器代理程序会在 SQL Server 代理程序开启后就可启用。记录读取器代理程序会连到在发行者端的交易记录文件,并不断的读取记录文件。而在依排程执行的模式中,记录读取器代理程序会依指定的排程启动,完成读写交易记录文件中复写的交易停止。更改模式和其它的属性可以提高执行效能,并降低发行者端的负担。以下为设定记录读取器代理程序的步骤:
1. 在 Enterprise Manager,展开想要修改的服务器,展开 复写监视器 数据夹,展开 代理程序 后选择 记录读取器代理程序 数据夹。
2. 在右手边的窗格中,选定一发行集按下鼠标右钮,叫出快捷菜单,如图27-17 所示。
图27-17发行集的快捷菜单
3. 选择 代理程序属性 ,进入 记录读取器代理程序属性 窗口,如图27-18 所示。
图27-18「记录读取器代理程序属性」窗口
4. 选择 步骤 页签,如图27-19 所示。在卷标页,我们可以看到记录读取器代理程序执行的步骤,这些步骤执行如下的动作:
o 记录读取器代理程序启动讯息 :将讯息记录在 记录读取器代理程序 的历史数据表中(在散发者数据库的MSLogreader_histroy数据表中)。
o 执行代理程序 :依指定的排程启动代理程序,当执行模式为连续时,代理程序会在系统结束时才停止执行。
o 侦测非记录性代理程序的结束 :将代理程序事件失败的讯息放在记录读取器代理程序的历史数据表中。
5. 选择 执行代理程序 步骤,并点选 编辑 按钮进入 编辑作业步骤 对话框,如图27-20 所示。在这个对话框可以设定如何启动 记录读取器代理程序 。
图27-19「记录读取器代理程序属性」窗口的「步骤」页签
图27-20「编辑步骤」对话框的「一般」页签
记录读取器代理程序可以设定为很多选项。预设的记录读取器代理程序参数可在本步骤中的命令方块及如图27-22 中的复写代理程序设定文件的详细数据对话框中变更。可变更的两项参数如下:
o 连续模式 :指定是否记录读取器代理程序以连续模式或依排程执行。删除参数即可将记录读取器代理程序依排程执行。
o 散发者安全模式 :指定记录读取器代理程序使用 SQL Server 或 Microsoft Windows 2000 认证。
另外,您也可以在 编辑 对话框中指定其它参数,如 AsynchLogging、Buffers、DefinitionFile、 散发者和发行者信息及 MessageInterval 。
________________________________________
相关信息
关于这些参数的设定可以在 SQL Server《在线丛书》中找到数据。在 索引 页签中输入 记录读取器代理程序 后选择 启动 主题即可。
________________________________________
6. 完成记录读取器代理程序属性的修改后,按 确定 储存修改。
透过记录读取器代理程序设定文件,可以修改其它的选项,请参照下列的步骤:
1. 在 Enterprise Manager 右手边的窗格中,展开 代理程序 后选定一发行集按下鼠标右钮,叫出快捷菜单,选择 代理程序设定文件 ,如图27-21 所示。
图27-21「代理程序设定文件」对话框
2. 按下 新增设定文件 按钮以建立一个新的设定档,现有的设定档不允许修改。按下按钮后会看到如图27-22 的画面。
图27-22「复写代理程序设定文件的详细数据」对话框
3. 在此对话框中,可以修改以下的参数:
o HistoryVerboseLevel :可指定记录信息的多寡。除非在实际执行时有遇到问题,否则预设的值通常就足够。
o LoginTimeout :指定在代理程序逾时之前尝试登入的秒数。
o PollingInterval :指定此记录查询复写交易的秒数。
o QueryTimeout :指定在代理程序逾时之前发出查询的秒数。
o ReadBatchSize :指定在一个批次中所要读取交易记录文件内数据的次数。
________________________________________
说明
如前所述,如果记录读取器代理程序是依排程执行,当 SQL Server 代理程序启动时,记录读取器代理程序就会读取在交易记录文件中被标示为复写的所有交易。记录读取器代理程序会读取交易的次数,或是读取交易记录文件内在 ReadBatchSize 参数中所指定的命令,将命令插入散发者数据库中。当所有被标示复写的交易均被读取后,记录读取器代理程序就会暂停执行直到下一个排程的开始。
________________________________________
设定订阅集
如在之前快照式复写中的设定方式,在交易式复写中的最后一个步骤也是设定订阅者。首先必须启用在散发者数据库中的订阅者(可参照前一章 〈启用订阅者〉 一节)然后从订阅者端发行者端设定订阅集。在订阅者端可以设定提取订阅,或是在发行者端可以设定发送订阅。
设定提取订阅
在订阅者端可依下列步骤设定提取订阅:
1. 在 Enterprise Manager 选择 工具 / 复写 / 提取订阅至 ,在 提取订阅至 对话框中选择 提取新的订阅 ,或是在 工具 中选择 精灵 / 复写 / 提取定于精灵 。任何一种方式都可以进入 欢迎使用提取订阅精灵 ,如图27-23 所示。注意在画面下方可勾选进阶选项,在这个范例中我们勾选这个选项,这项选择可以启用数据转换。
图27-23「使用提取订阅精灵」的欢迎画面
2. 选择 下一步 进入 寻找发行集 画面,如图27-24 所示。这里可以选择要在标准 Windows 2000 网络的环境下或是在 Active Directory 服务中寻找发行集。选择默认值,也就是让您在注册的服务器中寻找发行集。
图27-24「寻找发行集」画面
3. 按 下一步 进入 选取发行集 画面,如图27-25 所示。这里可以看到有哪些会被应用在复写的发行集。注册在 SQL Server 系统上的服务器在这里都会列出。展开所选的发行者系统,并选择要使用的发行集。
4. 选取发行集后按 下一步 进入 指定同步代理程序登入 画面,如图27-26 所示。这里可以指定代理程序联机到发行者时的方式和登入账号。
图27-25「选取发行集」画面
图27-26「指定同步代理程序登入」画面
5. 按 下一步 进入 选取目的数据库 画面,如图27-27 所示。这里可以指定复写的发行项要放在哪个数据库中。如果要建立新的数据库,按 新增 进入 数据库属性 窗口。
图27-27「选取目的数据库」画面
6. 按 下一步 进入 初始化订阅 画面,如图27-28 所示。选择 是, ....来开始订阅者端的数据库结构和数据。如果之前建立过结构,就选择 否, ....。
图27-28「初始化订阅」画面
7. 按 下一步 进入 快照集传送 画面,如图27-29 所示。这里可以选择快照集从哪里传送。如果没有修改快照集数据夹,请选择接受默认值的位置。
图27-29「快照集传送」画面
8. 按 下一步 进入 设定散发代理程序排程 画面,如图27-30 所示。这个画面可以选择连续更新、依排程更新,或是仅在需要时更新。在大部分的情况下,会选择使用排程。
当决定系统如何操作更新程序时,记得如散发代理程序执行的愈频繁,在散发者端和订阅者端的负担就愈重。所以代理程序最好依需要而设定执行,而不要过度执行。
按 变更 按钮可以变更散发代理程序的排程,按下 变更 按钮可进入 编辑重复执行作业排程 对话框,自订重复执行作业的排程。
图27-30「设定散发代理程序排程」画面
________________________________________
说明
如果选择转换发行集,在这里就会出现 指定 DTS 封包 画面。要继续执行步骤就要在之前就建立 DTS 封包,否则,就要停止精灵的安装步骤,并在建立封包后再重新回到设定精灵。本范例我们不选择转换发行集。
________________________________________
9. 按 下一步 进入 启动必要的服务 画面,如图27-31 所示。如果 SQL Server 代理程序还未被启动,从这个画面中可以启动服务。这里可以看到 SQL Server 代理程序是否已在订阅者端启动。若是还未被启动,会提示您启动该代理程序,若是想手动启动代理程序,请在 Enterprise Manager 中展开 管理 数据夹,在 SQL Server 代理程序中按下鼠标右钮,在快捷菜单中选择启动或停止 SQL Server 代理程序即可。
10. 按 下一步 进入 完成提取订阅精灵 画面,如图27-32 所示。选择 完成 即可完成订阅集的设定作业。
图27-31「启动必要的服务」画面
图27-32「完成提取订阅精灵」画面
现在发行项会在订阅者端被复写,并定期依所设定的排程更新。在确认发行集代理程序的排程后,再启用复写。如果没有设定及时产生快照集至散发者端,在快照集代理程序依自己排程执行的情况下,可能需要一些时间才能将数据送至散发者端。就算复写在执行中,实际的数据也会在快照集代理程序作业完成后才会送至订阅者端。
设定发送订阅
发送订阅要在发行者端启动,可使用 发送订阅精灵 来设定。当使用发送订阅,复写的排程由发行者端决定。发送订阅适用于联机固定的订阅者。使用这类型订阅集的目的是在散发者端就可以方便的管理所有的订阅集,不需要在订阅者端个别地管理每一个订阅集。请参照以下步骤使用 发送订阅精灵 :
1. 使用以下任一方法进入 发送订阅精灵 。第一种方法是在 Enterprise Manager 中点选 工具 ,选择 复写 / 将订阅发送至其它服务器 ,进入 建立与管理服务器的发行集 对话框,如图27-33 所示。然后选择 发送新的订阅 。
图27-33「建立与管理服务器的发行集」对话框
以下为 欢迎使用发送订阅精灵 画面,如图27-34 所示。
图27-34「欢迎使用发送订阅精灵」画面
2. 按 下一步 进入 选择订阅者 画面,如图27-35 所示。这里可以指定发行集要发送至哪一个订阅者端。
图27-35「选择订阅者」画面
3. 选择 下一步 进入 选取目的数据库 画面,如图27-36 所示。这里可以指定订阅者端的数据库,可以选择已存在的数据库,或是依需要建立新的数据库。
图27-36选取目的数据库
4. 按 下一步 进入 设定散发代理程序位置 画面,如图27-37 所示。在这里可以选择在散发者端执行散发代理程序(此为默认值,建议使用此选项),或是在订阅者端执行。这是 SQL Server 新增的选项,不在之前 Server 7 的版本中。
5. 按 下一步 进入 设定散发代理程序排程 画面,如图27-38 所示。在这里可以选择连续更新订阅集或选择依排程更新订阅集。选择依排程更新订阅集,按下 变更 按钮可进入 编辑重复执行作业排程 对话框更改排程及更新订阅集的频率。记住如果选择的是连续更新,会造成系统的负担。
图27-37设定散发代理程序位置
图27-38「设定散发代理程序排程」画面
6. 按 下一步 进入 初始化订阅 画面,如图27-39 所示。在这里可以指定订阅集是否开始。初始化结构描述和在订阅者端的数据集已由预设指定。如果结构已存在, 否, ...这个选项就不会提供选择。这个画面中也可以启动快照集代理程序。建议在开始快照集时就启动快照集代理程序,否则就必须手动启动代理程序。一旦启用了快照集并开始执行复写,在新的订阅集建立之前都不需使用到快照集。每建立一次订阅集,就要建立新的快照集,因此不需为快照集建立排程,除非计划使用快照集同步更新订阅者端数据。
图27-39「初始化订阅」画面
7. 按 下一步 进入 启动必要的服务 画面,如图27-40 所示,可指定用自动启动的方式启动 SQL Server 代理程序。
8. 按 下一步 进入 完成发送订阅精灵 画面,如图27-41 所示。检查设定是否正确后,按 完成 开始将快照集复制到订阅者的程序。您会看到一个描述程序进行的对话框,最后会出现操作程序完成的消息框。当精灵完成后,发送订阅就建立,且会定期更新。
图27-40「启动必要的服务」画面
图27-41「完成发送订阅精灵」画面
________________________________________
相关信息
请参阅 第26章的〈管理复写〉 一节,提供关于管理和关于复写的疑难排除;监视和管理复写代理程序;停用复写;和移除订阅集、散发集、和发行集。
________________________________________
设定、监视与校调散发者
本节将会学到如何设定、监视与校调散发者。如前一章所提到的,散发者是一个含有 SQL Server 数据库的服务器(称为 散发者数据库 ),用于储存复写数据。这项数据保存在 SQL Sever 数据库中,会具以下优势:
• 执行效能佳 :SQL Server 提供散发者端取得、保存及散发数据所需的执行效能。
• 可信度高 :由于 SQL Server 具高阶的回复特性,SQL Server 数据库非常适用于数据的复写。使用交易记录可使 SQL Server 在系统故障时回复,使数据不流失。
• 操作简便 :由于 SQL Server 复写透过 SQL Server 通讯协议,直接和散发者端沟通,因此设定散发者的步骤十分简便。
设定散发者
散发者端活动的多寡取决于数据库端修改频率。由于散发者端使用的是 SQL Server 数据库,所有在散发者端的修改都会记录在交易记录文件内,所以在设定散发者数据库和记录文件时,要确定执行时所需的大小,以达到执行时应有的效率。预设的值可应用于较小型的复写系统,但是当系统增加,SQL Server 精灵预设的值可能就不再是最佳化的设定,因为精灵并未将交易记录文件和数据夹以最佳化放置,通常它们被放置在 SQL Server 预设相同的位置。
若是适当的设定散发者数据库,就可避免日后因执行效能所产生的问题。以下为设定散发者数据库的几个重点:
• 在散发者数据库系统使用 RAID 控制器。使用硬件的 RAID 控制器会比使用软件的 RAID 控制器有效率。
• 在 RAID 1 磁盘区中设定散发者数据库的交易记录。交易记录文件应该被分开放置,以利用循序性的 I/O 操作,达到较佳的执行效能。
• 为交易记录文件设定足够的储存空间,以避免需要不断的更新交易记录文件。可视情况于每晚更新一次交易记录文件。
• 将散发者数据库设在 RAID 1 或 RAID 10 磁盘区。由于写入散发者数据库的次数较频繁,在这里我们不建议使用 RAID 5。
• 为散发者数据库设定足够的空间保存多余的复写数据。如果订阅者故障,数据库可能需要保存好几天的复写数据。
• 以校调其它 SQL Server 数据库的方式校调您的散发者数据库。
使用 Enterprise Manager 设定散发者端
要依之前的要点设定适合的散发者数据库,必须指定数据库的位置。要利用 Enterprise Manager 执行这个步骤,首先开启 设定发行暨散发精灵 ,利用这个精灵设定发行与散发,并在自订设定画面选择进入自订散发者设定。这个选项允许将散发者数据库以手动指定数据库位置,也允许将数据库重新命名、启用发行、与建立发行集和订阅者。
不过,当使用精灵时,就不能设定散发者数据库的大小。要设定数据库大小,要在 Enterprise Manager 中选择数据库属性,变更数据库大小与交易记录文件夹。如果您希望一并指定数据库位置和大小,可使用sp_adddistributionab这个预存程序来执行。
使用sp_adddistributiondb设定散发者
使用sp_adddistributiondb这个预存程序允许以指令码建立散发者数据库。当您希望一并设定数据库大小、位置与交易记录时适用。当使用指令码建立了一个散发者数据库,可以重复的将指令码用在其它的系统上,或是当重建系统设定时使用指定码重建散发者数据库。
________________________________________
说明
在建立散发者数据库前,应该先启用散发者。您可以使用sp_adddistributor来作设定,然后使用散发者系统名称。
________________________________________
在 SQL Server《在线丛书》中有使用sp_adddistributiondb预存程序的语法,以下为使用范例:
sp_adddistributor Dash
以下 SQL 陈述式启动设定 Dash 这个数据库为散发者:
sp_adddistributiondb
@database=dist,
@data_folder='C:\mssql2000\data',
@data_file='dist.mdf',
@data_file_size=10,
@log_folder='C:\mssql2000\data',
@log_file='dist.ldf,
@log_file_size=2,
@min_distretention=0,
@max_distretention=72,
@history_retention=96,
@security_mode=0,
@login='sa',
@password='',
@createmode=0
监视散发者
利用 Windows 2000 效能监视器(perfmon)来监视散发者。在效能监视器中有几项对象是在使用 SQL Server 复写时会加入,这些对象包括:
• SQLServer:Replication Agents :计算现在系统中有几个不同类型的代理程序正在执行。
• SQLServer:Replication Dist :提供关于散发者延迟时间的信息。
• SQLServer:Replication Logreader :提供关于记录读取器代理程序的活动和延迟时间的信息。
• SQLServer:Replication Merge :提供关于合并式复写的速率数据。
• SQLServer:Replication Snapshot :提供关于快照集复写效能的信息。
利用效能监视器来监视这些值可让您了解是否散发者端有执行效能上的困难。虽然这些效能监视器数据提供很多有用的信息,但并不一定可找出真正的问题。以上几种对象中,监控散发者端较为重要的是 SQLServer:Replication Dist 物件。这个对象提供一下几种计数器:
• Dist:Delivered Cmds/sec :每秒传送给订阅者的散发指令数。这个计数器提供在订阅者端有多少活动。
• Dist:Delivered Trans/sec :每秒传送给订阅者的散发交易数。这个计数器提供同样提供在订阅者端有多少活动。
• Dist:Delivery Latency :散发延迟(以微秒为单位)。将交易传给散发者,并在订阅者套用,这中间所花的时间。
虽然这些计数器记录着散发者端执行的过程,但是如果要利用这些数据决定如何校调散发者端,还是略嫌不足。因为校调散发者端最重要的几个部分是属于 SQL Server 数据库端的校调。关于校调的重点如下:
• CPU 的高使用率 :是否有一个或数个 CPU 长时间的以高使用率执行(超过 CPU 容量的 75% 级为高使用率)?
• I/O瓶颈 :I/O 率是否过高?监视每一秒中执行的多少的 I/O 操作,以及执行一个 I/O 操作需要多少时间?
• 响应时间 :SQL Server 的响应时间是否太长?
校调散发者
如之前所提到,散发者就是包含散发者数据库的服务器,而校调的方式就如同之前其它的 SQL Server 数据库,如正确的设定散发者的大小。散发者是发行者与订阅者之间沟通的桥梁,因此应小心设定使其足以应付流量,以避免成为效能瓶颈的因素。以下几项可做设定与校调散发者时的参考:
• 校调 I/O 子系统 :确定散发者有足够的 I/O 容量。
• 使用多重处理器系统 :CPU 的执行能力通常不是问题的所在,因为在很多情况下,在散发者端所处理的动作并不会使用到大量的 CPU。虽然如此,最好还是准备最少两个 CPU 以应付某些时候可能同时执行某些作业。
• 校调操作系统 :设定服务器服务以便将网络应用程序能达到最佳的生产率,透过 控制台 内的 网络 即可做这样的设定。另外,可将不需要的服务移除,如 IIS 和 FTP 服务。
• 在执行快照集复写时监视散发者端 :当快照集在交易式和合并式复写中执行时(包括第一次开始复写时),由于很多的数据会被写入散发者端,因此大量的 I/O 操作会在同一时间产生,也使得 I/O 子系统可能负荷过重。一旦产生了这项的状况,产生快照集所需的时间就会增加,因此,您必须再传送快照集时一并监视散发者端。
• 校调 SQL Server :使用本书中不断提及的技巧与重点校调您的 SQL Server 系统。
交易式复写校调
本节会学习如何设定及校调,使交易式复写的执行最佳化。首先,我们会先了解交易式复写属性,然后才开始学习设定、监视及校调要点。
交易式复写属性
交易式复写首先复制快照集至发送者端,然后到订阅者端。当快照集被复制,在散发者端上执行的 记录读取器代理程序 会不断的或依排程读取发行者端的交易记录文件。读取的频率则依您在记录读取器代理程序的设定而定。(发行者在读取交易记录文件的时候,会遇到跟复写有关的问题。)
记录读取器代理程序 所读取发行者端中交易记录文件内的记录,会放在散发者数据库中,这些交易最后会被送至订阅者端。下列所列出的几项因素会影响交易式复写的执行效能:
• 发行者交易记录端的 I/O 效能 :读取在发行者端的交易记录文件才可知道修改过什么数据。当复写在执行时,交易记录文件在被读取的同时也被写入数据,因此后续交易记录的存取可能受到干扰,造成瓶颈。要避免这样的情况发生,必须特别留意记录文件的设定。
• 散发者的效能 :散发者端的效能,与执行复写的多寡和发行者使用散发者的数量有关,本章稍早曾学习如何安装与校调散发者。
• 订阅者的效能 :订阅者端的效能与在其系统上活动的多寡有关。有效的在订阅者端的 SQL Server 数据表执行标准校调操作,可避免订阅者效能瓶颈的问题。
由于许多因素都可影响系统的执行效能,因此适当的设定大小和系统可有效的避免这些因素的产生,使系统有效率的执行。
设定交易式复写
还是那句老话,要避免复写对系统带来的负担,在发行者端必须适当的设定交易记录。在本节中,我们会再多看看设定交易式复写所要注意的重点:
• 所有的复写系统都要有足够的 I/O 容量(以下会提及如何设定足够的 I/O 容量)。或者考虑将发行者端交易记录的 I/O 容量设定的比需要的更大。
• 增加在散发者端所认可批次的大小。
• 校调记录读取器代理程序。
设定足够的 I/O 容量
若是 I/O 的容量足够,即可增进复写过程的效能。如同其它的 SQL Server 系统,系统中负责记录复写的交易记录文件应该放在自己的 RAID 1 磁盘区中以便保护数据,而数据夹则放在一个或数个 RAID 10 或 RAID 5 磁盘区。与快照式复写不同的地方在于,交易式复写只需微幅的调整标准 I/O 设定,这些调整在本节中会有所讨论。
在发行者设定 I/O 子系统 一般来说,在设定发行者端的 I/O 子系统时,应遵照本书中不断提及的重点来设定。不过,有时可能需要将发行者端的交易记录文件的 I/O 容量,设定比需要的容量更大。通常我们会将交易记录文件设在 RAID 1 磁盘区。在需要的时候(依系统的忙碌程度而定),可能会需要设在 RAID 10 磁盘区,利用更多的磁盘区。RAID 5 则不适用。
在散发者设定 I/O 子系统 散发者端数据库的交易记录文件应设定在 RAID 1 磁盘区。这样可使得散发者数据库的记录文件达到最佳执行效能,改善散发者的执行效能。
在订阅者设定 I/O 子系统 交易式复写的订阅者端不需要特别的 I/O 设定。只要遵照一般的要点作设定即可。
设定散发者认可批次大小
散发者端的交易数目决定了单一批次中可认可的复写交易数目。如果将批次大小增加,单一批次中可认可的数据列就增加。基于当散发者数据表在更新时会被锁定,因此让需要利用到散发者资料表的处理时间增长。如果将批次的大小减少,单一批次中认可的数据列就减少,等待散发者数据表的时间就相对减短。
如果散发者数据库因同一时间被不同的数据来源存取(指的是一个发行者和数个订阅者),试着减少批次大小。如果记录读取器代理程序依定期的排程执行,且在同一时间将大量的交易插入数据库中,设定较大的批次就有好处。可能您根本不需要变更批次大小,但如果真的有需要,建议在变更前比较增加与减少批次,才决定哪一种设定较佳。
在 Enterprise Manager 中可进入 散发代理程序 的属性设定,设定认可批次大小。在本章的〈监视与管理复写代理程序〉一节中也可找到相关信息。
校调记录读取器代理程序
如之前所提到,记录读取器代理程序可读取发行者端的交易记录文件,让记录文件以随机性的方式取代循序性的 I/O 操作。设定记录读取器代理程序后,您可以降低它对记录所产生的影响。有几种方法可以使记录读取器代理程序的操作更有效率,其中一种方法是让交易记录文件磁盘区使用含有快取的控制卡,由于记录读取器代理程序读取记录文件磁盘,控制卡上的快取将会让读取操作尽量从快取中读取,就不会造成随机性 I/O 操作。
另一种校调记录读取器代理程序的方法为减少它的执行次数。记录读取器代理程序可以连续性方式或定期执行。如果系统的更新并不频繁,就可以连续性方式执行。反之,若系统的交易记录文件的使用频繁,就减少发行者端记录读取器代理程序的执行次数。这样一来,记录读取器代理程序就不会经常的读取交易记录,让交易记录文件的 I/O 执行保持循序性。
若是系统的使用很频繁,可以增加读取批次大小的方法,让记录读取器代理程序的执行更有效率。这里指定了从一个交易记录文件中读取交易的次数,以及一次复写多少交易到散发者端。在一个使用率高的系统中,增加这个参数可改善执行效能。另外,当您增加了轮询间隔,增加批次大小就很有帮助。如果增加了在记录读取器代理程序读取批次的大小,也应该增加在散发者端认可批次的大小以符合新的读取批次大小。
您可利用 Enterprise Manager 来设定记录读取器代理程序。本书〈监视和管理复写代理程序〉一节有相关信息。
监视交易式复写系统
监视交易式复写活动的方式就和之前的方式一样,都是透过效能监视器。效能监视器是在使用 SQL Server 复写时加入的对象,对象如下:
• SQLServer:Replication Logreader :提供关于记录读取器代理程序的活动和延迟时间的信息。
• SQLServer:Replication Dist :提供关于散发者延迟时间的信息。延迟的时间过长可能是散发者负荷过重的警讯。
• SQLServer:Replication Logreader :提供关于记录读取器代理程序的活动和延迟时间的信息。注意是否延迟时间过长,这可能是记录读取器代理程序在发行者端读取交易记录时产生问题。另外,注意每秒中交易的次数,如果交易次数过于频繁,可能需要为交易记录文件磁盘区增加更多的 I/O 容量。
请注意,利用效能监视器来监视这些值可让您了解散发者端是否有执行效能上的困难。虽然这些效能监视器数据提供很多有用的信息,但并不一定可找出真正的问题。
校调交易式复写系统
校调交易式复写系统最主要的步骤就是正确地设定和监视系统,这些在前一节中已提及。另外,在系统作业中且您正在进行监视时,可能需要修改轮询时间间隔。通常默认值所设定的 10 秒就可以接受。如果增加轮询频率(让轮询时间间隔缩短),复制交易的时间就更快,但也相对的增加了交易记录的负担。如果降低轮询频率,就会得到相反的结果,也就是会让复写时间更久。
此外,如果更新的次数太过频繁,可能就需要增加批次大小。如之前所提到,记录读取器代理程序可以在同一时间读取交易记录文件外的交易。如果增加这个值,且将轮询时间间隔保持在 10 秒,就可以复写更多的交易,也不会增加额外的负担。
在必要的时候也要监视网络是否可承载负荷。如果系统并不是执行的很顺,举例来说,如果 CPU 和 I/O 子系统达到饱和,或是复写过程的时间过长,就可能是网络出了问题。网络的问题就比较棘手,因为网络的问题不是检查执行效能就可以知道,可能要用到如 Microsoft System Management Server(SMS)这样的网络监控产品才可以监控是否网络卡是否已达饱和。
最后,请记住发行者、散发者和订阅者都是 SQL Server 系统,所以必须像校调其它 SQL Server 系统一般的校调这些系统。校调 SQL Server 的要点在本书已不断的提及。
执行交易式复写
本节会学习执行交易式复写的几种方法。交易式复写可以采一对多或多对一的结构执行。通常,交易式复写可以透过广域网络(WAN)执行。
一对多复写
多数的交易式复写都采用一对多的复写结构。执行这类型的结构就是将一个数据表发行到一个或多个订阅者端。
多对一复写
在一个多对一的复写结构中,一个数据库被一个以上的订阅者订阅。这种结构并不是一种常见的复写结构,但也广泛的被使用。由于交易式复写的执行方式是在发行者端读取交易记录,并在订阅者端执行插入、更新和删除,所以适用这类型的复写结构。使用这种结构唯一的潜在缺点是,订阅者端数据表必须在数据表上定义主索引键。只要不违反这个规则,多对一复写结构就可正常执行。
透过 WAN 复写
复写透过 WAN 是常见的方式。如果复写的数据透过 WAN 传送,要注意经常监视散发者端的历史记录并注意可能因频宽受限导致复写时间过久。另外,如果环境允许的话,尽量将复写设定为只有散发者代理程序透过 WAN 联机,也就是说,将散发者和发行者设定在 WAN 的同一端上。
本章总结
在本章中,我们介绍了交易式复写的基本要点,包括什么是交易式复写,如何运用、监控及校调交易式复写。在下一章我们将介绍合并式复写。