1、第16章 数据复制与转换,16.1 复制概述 16.2 配置复制 16.3 创建发布出版物16.4 订阅出版物 16.5 管理复制选项 16.6 复制监视器 16.7 数据导入导出16.8 复制实例,1,16.1 复制概述,16.1.1 复制结构 16.1.2 复制类型 16.1.3 复制代理 16.1.4 可更新订阅,2,16.1.1 复制结构,1复制概念: 出版和订阅出版: 向其他数据库服务器(订阅者)复制数据。订阅: 从其他数据库服务器(出版者)接收复制数据。(1)论文和出版物: 论文是被复制的数据集合(表、列、行、存储过程) 。出版物是论文的集合。(2)出版者: 出版服务器。确定复制数
2、据、检测变化分发者。 (3)分发者: 是一类服务器, 维护分发数据库、复制数据订阅者。(4)订阅者: 是一类服务器, 接收并维护出版物(也可修改出版物)。(5)订阅类型: 推订阅、拉订阅,2复制拓扑结构: 1)中心出版者、2)带有远程分发者的中心出版者、3)出版订阅者、4)中心订阅者。,中心出版者,带有远程分发者的中心出版者,出版订阅者,中心订阅者,3,16.1.2 复制类型,三种:快照复制、事务复制、合并复制 1快照复制在某一时刻给出版数据库中的出版数据照相,然后将数据复制到订阅者服务器。 2事务复制 所复制的内容不是数据,而是多条数据更新语句或存储过程。修改总是发生在出版者上,订阅者只以读
3、取数据的方式将修改反映到订阅数据库,所以能够避免复制冲突。3合并复制 允许订阅者对出版物进行修改并将修改合并到目标数据库。各节点可独立工作,不必考虑事务的一致性。如果在合并修改时发生冲突,则复制按照一定的规则或自定义的冲突解决策略来对冲突进行分析并接受冲突一方的修改。,4,16.1.3 复制代理,1快照代理 在分发者上创建并存储快照文件,在分发数据库中记录出版数据库和订阅数据库之间的同步信息。在分发者上运行并与出版者相连接。每个出版物都有自己的快照代理。 2日志阅读代理 将出版者事务日志中标有复制的事务移至分发数据库。使用事务复制的每一个出版数据库都有自己的日志阅读代理。日志阅读代理在分发者服
4、务器上运行。 3分发代理 将存储在分发数据库中的事务或快照分发到订阅者服务器。如果事务出版物或快照出版物被设置为只有创建了推订阅即立即在出版者和订阅者之间同步,则在分发者上各有一个分发代理;否则将共享一个分发代理。合并出版物没有分发代理。,5,16.1.3 复制代理,4合并代理 用来移动、合并在快照代理创建初始快照之后所发生的增量修改。每一个合并出版物都有自己的合并代理。当使用推订阅合并出版物时,合并代理运行在出版者上;当使用拉订阅合并出版物时,合并代理运行在订阅者上。快照出版物和事务出版物没有合并代理。5队列阅读代理在快照复制或事务复制时,如果选择了“排队更新”选项,则需要使用队列阅读代理。
5、队列阅读代理是运行在分发者上的多线程代理,它主要负责从分发者的消息队列中读取消息,并将消息中的事务应用到出版者。,6,16.1.4 可更新订阅,可更新订阅:可在订阅者处对复制数据进行修改,然后将修改以相应的方式反映到出版者。有三种类型:1即时更新 立即将订阅者的修改反映到出版者,允许这一修改不必马上同步到其它订阅者。在创建出版物时设置。2排队更新 将订阅者的修改保存在一个队列中的,当订阅者与出版者之间的网络连接恢复时,队列中的这些事务将按先后顺序被应用到出版者。在创建出版物时可对该选项进行设置。3即时更新并用排队更新作备份 订阅者的修改一方面立即反映到出版者(如果网络连接正常),另一方面会备份
6、到队列中,以便当网络连接恢复时,将队列中的这些事务按先后顺序应用到出版者。,7,16.2 配置复制,16.2.1 创建服务器角色和分发数据库 16.2.2 配置复制选项 16.2.3 删除复制配置信息,8,16.2.1 创建服务器角色和分发数据库,创建服务器角色即指定复制过程中服务器是作为出版者、分发者,还是作为订阅者。由于一个SQL Server服务器可以扮演一个或多个角色,所以必须指定由哪个服务器来扮演哪些角色。分发数据库用来存储复制给订阅者的所有事务及出版者与订阅者的同步信息。分发数据库包含很多与复制有关的系统表。在进行复制前必须首先创建分发数据库(与复制有关的系统表会自动生成),同时指
7、定出版者、出版数据库、分发者、订阅者。使用对象资源管理器可以创建分发数据库。具体操作步骤可参见SQL Server数据库管理系统。,9,16.2.2 配置复制选项,1配置分发选项。使用企业管理器配置分发选项的步骤为: 启动企业管理器,选中要进行分发选项配置的分发者服务器。 主菜单工具复制配置发布、订阅服务器和分发发布服务器和分发服务器的属性分发服务器。 属性设置分发数据库属性:名称、有关出版者、事务保持时间、历史记录保持时间。 代理程序配置代理程序配置设置复制代理的运行参数。2配置出版选项。指定分发者为哪个出版者所使用。 启动企业管理器,选中分发者服务器。 主菜单工具复制配置发布、订阅服务器和
8、分发发布服务器和分发服务器的属性发布服务器。 在“服务器”表格内选择要使用当前分发数据库的出版者。 单击分发数据库右侧按钮设置出版者属性(所用分发数据库,快照文件位置,与分发者的连接方式等) 。,在创建服务器角色和分发数据库之后,利用对象资源管理器可以进行复制选项的配置和管理,主要包括配置分发选项、设定出版选项、设置出版数据库、设置订阅者选项、删除分发者等。 1配置分发服务器属性 2配置发布服务器属性 通过对象资源管理器允许出版者使用分发数据库。具体操作步骤可参见SQL Server数据库管理系统。,10,16.2.3 删除复制配置信息,删除复制配置: “禁用发布”向导可以完成这一任务。禁用分
9、发者对复制产生的影响为: 1)分发者上的分发数据库将被删除; 2)所有使用该分发者的出版者将丧失出版者角色,同时删除该出版者的所有出版物;如果能登录到出版者,则会删除所有出版物,如果不能则出版数据仍存在,必须手工删除。 3)所有订阅也被删除。使用对象资源管理器具体操作步骤可参见SQL Server数据库管理系统。,11,16.3 创建发布出版物, 启动对象资源管理器,选中出版者服务器。 在主菜单上选择“复制本地发布”,单击右键,选择“新建发布”,出现“新建发布向导”对话框,单击“下一步”按钮。 单击“下一步”按钮,弹出“选择发布数据库对话框”,从“数据库”框中可以选择将出版哪一数据库的表、视图
10、或存储过程。 选择指定的出版数据库后,单击“下一步”按钮,打开“选择发布类型”对话框,从中选择所使用的复制类型。 单击“下一步”按钮,在“项目”对话框中可以选择表、存储过程等。 两次单击“下一步”按钮后,出现“快照代理” 对话框,选择“计划在以下时间运行快照代理”。 单击“更改”按钮,在弹出的对话框中设置代理程序执行频度。 单击“下一步”按钮,设置代理安全。单击“安全设置”按钮,在“进程账户”中输入相应的账户,单击“确定”按钮。 两次单击“下一步”按钮后,填入“发布名称”,单击“完成”按钮。,12,16.4 订阅出版物, 选中出版者服务器,在主菜单上选择“复制本地订阅”,单击右键,选择“新建订
11、阅”,出现“新建订阅”向导对话框,两次单击“下一步”按钮。 在“订阅服务器”对话框中的“订阅数据库”选项下选择数据库(如果没有,则需要新建数据库),单击“下一步”按钮。 指定分发代理安全性。单击按钮,在“进程账户”中输入相应账户,单击“确定”按钮。 单击“下一步”按钮,在“同步计划”对话框中选择“连续运行”选项,单击“下一步”按钮。 在“初始化订阅”对话框中选择“首先同步”。 其余步骤全部选择默认设置,最后单击“完成”按钮结束订阅创建。,13,16.5 管理复制选项,16.5.1 可更新的订阅选项 16.5.2 筛选复制数据 16.5.3 可选同步伙伴,14,16.5.1 可更新的订阅选项,在
12、SQL Server中,基于即时更新的可更新订阅需要以下组件的支持:(1)触发器触发器位于订阅者上,用来捕捉在订阅者上发生的事务,并利用远程过程调用将事务提交给出版者。(2)存储过程存储过程位于出版者上。(3)分布式事务协调器在触发器使用存储过程将订阅者事务提交给出版者时,需要分布式事务协调器(DTC) 来管理出版者与订阅者之间的两阶段提交。(4)冲突检测出版数据库中的存储过程使用时间戳来进行检测,以确定某列被复制到订阅者之后是否又被修改。(5)环路检测环路检测是用来确定一事务是否已在某订阅者处被成功提交,从而避免该事务又一次应用于订阅者服务器。,15,16.5.1 可更新的订阅选项,包括:即
13、时更新、排队更新、即时更新并用排队更新作备份。在SQL Server 2000 中,即时更新需要以下组件的支持:(1)触发器: 位于订阅者上,用来捕捉在订阅者上发生的事务,并利用远程过程调用将事务提交给出版者。由于使用二阶段提交协议,从而保证事务在出版者被成功提交后才会在订阅者那里提交,如果提交失败则订阅者事务将回滚,从而使订阅者数据库与出版者数据库仍能保持同步。(2)存储过程: 位于出版者上。只有出版者数据库发生的变化与订阅者提交的事务不发生冲突,才允许在出版者提交这些来自订阅者的事务,否则拒绝事务提交,两处的事务都将回滚。每篇论文的每种更新操作都有相应的存储过程。(3)分布式事务协调器(D
14、TC): 在触发器使用存储过程将订阅者事务提交给出版者时,需要DTC来管理出版者与订阅者之间的两阶段提交。,(4)冲突检测: 出版数据库中的存储过程使用时间戳来进行检测,以确定某列被复制到订阅者之后是否又被修改。当订阅者提交即时更新事务时,它会把某行的所有列(包括时间戳列)送回到出版者,出版者利用存储过程将该行在出版者数据库中的时间戳值与从订阅者送回的时间戳值进行比较,如果相同(表明在复制给订阅者之后没有发生修改),则接收事务,用从订阅者送回的行值来修改该行的当前值。(5)环路检测: 用来确定一事务是否已在某订阅者处被成功提交,从而避免该事务又一次应用于订阅者服务器。,在SQL Server
15、2000 中,排队更新需要以下组件的支持: (1)触发器:当进行排队更新时,触发器依附在订阅者的出版表上,用来捕捉订阅者上执行的事务,并将这些事务作为消息传送到队列中。(2)存储过程:在创建出版物时,若指定了排队更新选项,则在出版数据库中对出版表执行插入、删除、更新的存储过程将自动生成。队列阅读代理将调用存储过程在出版者上执行队列中的事务,并进行冲突检测,如有必要则产生一些补充命令。(3)队列: 用来存储订阅者传送的消息。订阅者与分发者都有一个消息队列。在网络断开时,订阅者传送的消息首先存储在订阅者消息队列,然后在网络接通时被传送到分发者消息队列。队列阅读代理读取这些消息,并将其中的事务应用到
16、出版者。(4)队列阅读代理: 是运行在分发者上的多线程代理,其主要任务是从消息队列中读取信息,并将消息中的事务应用到出版者。,16,16.5.2 筛选复制数据,对出版表进行水平、垂直分割,包括列筛选、行筛选、动态筛选和联合筛选。行、列筛选可在快照复制、事务复制和合并复制中使用,但动态筛选和联合筛选只能在合并复制中使用。(1)行筛选: 把某些特定的行发送给订阅者,清除那些用户不必或不应看到的数据行,从而能为不同的订阅者创建不同的出版物,同时由于不同订阅者订阅来自同一表的不同数据行,因此有助于避免因多个订阅者修改同一数据而导致的修改冲突。(2)列筛选: 列筛选就是对表进行垂直分割。列筛选能够减少订
17、阅者的存储空间需求,降低向订阅者传送数据修改所需的时间,但有些列必须包含在出版物中,它们是:1)有主键约束的列;2)没有默认值的非空列;3)包含在惟一索引中的列;4)合并复制、基于即时更新的快照复制或事务复制中的ROWGUID 列。,(1)行筛选:使用行筛选就是把某些特定的行发送给订阅者,清除那些用户不必或不应看到的数据行。(2)列筛选:列筛选就是对表进行垂直分割。 (3)动态筛选: 指在合并复制的处理过程中,根据从订阅者得到的数据值对出版表进行的数据筛选。 (4)联合筛选: 联合筛选允许在合并处理过程中定义两个出版表中的关系。,17,16.5.4 可选同步伙伴,可选同步伙伴的功能使得基于合并
18、复制的订阅者不仅可与创建订阅的出版者进行数据同步,而且也可以与其它订阅者进行数据同步,即使主出版者不能继续使用。使用可选同步伙伴时需要注意以下要求:(1)只有合并复制才可使用可选同步伙伴。(2)可选同步伙伴必须有订阅所需的数据和论文结构。(3)在可选同步伙伴上的出版物最好是在原始出版者上所创建的出版物的克隆。(4)须将出版物属性定义为订阅者可与其它出版者进行数据同步。(5)对于命名订阅,须保证该订阅者也是可选同步伙伴的订阅者,这样订阅者才能与其它出版者进行数据同步。(6)对于命名订阅,可选同步伙伴上自动添加与原始出版者上订阅具有相同属性的新订阅。,18,16.6 复制监视器,利用该工具可以浏览
19、出版者的出版物或分发者所支持的订阅,浏览复制代理的状态信息和历史,监视与复制事务有关的复制警报,监视快照代理、日志阅读代理、分发代理、合并代理的活动状况等。 启动对象资源管理器,登录指定的到服务器,依次打开“复制监视器”、“代理程序”文件夹。 选中“快照代理”,此时在右边窗格中显示已创建的快照代理。 右击准备查看的代理,在弹出菜单中选择“代理程序历史记录”选项,打开“快照代理程序历史记录”对话框。 单击“会话详情”按钮,打开“快照代理程序的最新历史记录”对话框,从中可以了解到目前为止快照代理所执行的处理、运行的起始时间等信息。,19,16.7 复制实例,设服务器实例ZUFE-DXBPUB和ZU
20、FE-DXBSUB上有相同的数据库MyDB,其中含有第0章给出的5张表,现要将ZUFE-DXBPUB作为出版者,ZUFE-DXBSUB作为订阅者,实现Student表的快照复制。为此需要进行以下步骤:1安装并注册服务器实例PUB 服务器要作为出版者,必须保证安装了SQL Server代理,并且该代理不使用系统帐户。为此要选择自定义安装(图18-5),设置服务启动帐户为域用户(图18-6)并设置sa登录的密码(图18-7)。安装完成后先用SQL Server服务管理器启动相应的SQL Server服务和SQL Server代理,然后用企业管理器进行注册,最后在该服务器实例上创建MyDB数据库和相
21、应的关系表并录入数据。同理可完成服务器SUB的安装、注册和MyDB数据库创建(注意不要创建上述5张表)。,20,16.7 数据导入导出,16.7.1 SQL Server数据表数据导出16.7.2 SQL Server数据表数据导入,21,16.7.1 SQL Server数据表数据导出,使用SQL Server的数据导入导出功能可以把其数据导出为任何支持OLE DB 和ODBC数据源的数据。针对不同目的数据源类型,在导出操作时,目的数据源的存储方式、用户验证方式等可能不同,但大部分操作都是相同的。启动对象资源管理器,登录指定的到服务器。展开数据库结点,右键需要导入导出的数据库,分别单击“任务
22、”、“导出数据”,出现导入导出向导。,22,16.7.2 SQL Server数据表数据导入,把其他类型的数据导入SQL Server数据库,同样适用导入导出向导。操作步骤和方法跟从SQL Server导出数据一样,只是源数据可以是其他类型数据,目标数据只能是SQL Server数据源。在导入SQL Server数据库时要注意两点,首先要注意选择哪个数据库作为目标数据库。其次,在新建数据库中,每个表字段可能需要调整,可以通过在“选择源表或视图”对话框中单击每个表的“转换”按钮来操作。,23,16.8 复制实例,1配置出版者并创建分发数据库 选中出版者服务器ZUFE-MXH,在主菜单上选择“复制
23、”,单击右键,选择“配置分发”,在“向导”对话框中单击“下一步”按钮。 选中“选择分发服务器”对话框,使“ZUFE- MXH”成为自己的分发服务器,从而在ZUFE- MXH上创建一个分发数据库和日志,单击“下一步”按钮。 在“配置SQL Server代理”对话框中选择“是”,从而自动启动SQL Server代理,单击“下一步”按钮。 在“指定快照文件夹”对话框中选择生成快照的文件夹,单击“下一步”按钮。指定分发的数据库名称已经数据库和日志文件的路径。分发数据库名称可写为“分发教学管理”,单击“下一步”按钮,出现“发布服务器”对话框,再单击“下一步”按钮。 在“向导完成”对话框中选择默认选项,单
24、击“下一步”按钮。 在进行下一步以前,查看SQL Server代理服务器是否启动,如果没有启动,需要启动。 在“完成配置发布和分发向导”对话框中单击“完成”按钮。完成后,服务器实例ZUFE-MXH下会增加一个“复制监视器”文件夹,在数据库文件夹中会增加一个分发数据库“分发教学管理”。,24,16.8 复制实例,2配置分发和出版选项 由于服务器实例ZUFE-MXH是自己的分发者,所以分发选项和出版选项的配置都是针对它的。本例分发和出版选项全部采用默认配置。3配置出版数据库 本例的出版数据库是ZUFE-MXH上的“教学管理”,故需要在对象资源管理器中选中出版者服务器ZUFE-MXH,在主菜单上选择
25、“复制配置分发”,在“发布服务器属性”对话框中打开“发布数据库”标签,选择“教学管理”为事务复制。,25,16.8 复制实例,4创建出版物本例的出版物是“教学管理”数据库中的“学生表”,故需要在对象资源管理器中执行如下步骤: 选中出版者服务器ZUFE-MXH,在主菜单上选择“复制本地发布”,单击右键,选择“新建发布”,出现“新建发布向导”对话框,单击“下一步”按钮。 在“选择发布数据库”对话框中选择“教学管理”,单击“下一步”按钮。 在“选择发布类型”对话框中选择快照复制。 单击“下一步”按钮,在“项目”对话框中选中“学生表”。 两次单击“下一步”按钮后,出现“快照代理” 对话框,选择“计划在
26、以下时间运行快照代理”。 单击“更改”按钮,在弹出的对话框中做如图16-7所示的设置,目的在于将代理程序执行频度设置为每分钟一次。 单击“下一步”按钮,设置代理安全。单击“安全设置”按钮,出现如图16-8所示对话框,在“进程账户”中输入“ZUFE-MXHmeng”,单击“确定”按钮。 两次单击“下一步”按钮后,在“发布名称”后输入“发布教学管理_学生表”,单击“完成”按钮。完成后,在对象资源管理器的本地发布处会出现“发布教学管理_学生表”。,26,16.8 复制实例,5订阅出版物 在创建完出版物之后,必须订阅出版物才能实现数据的复制。本例的订阅数据库是ZUFE-MXH上的“教学管理复制”数据库
27、。 选中出版者服务器ZUFE-MXH,在主菜单上选择“复制本地订阅”,单击右键,选择“新建订阅”,出现“新建订阅”向导对话框,两次单击“下一步”按钮。 在“订阅服务器”对话框中的“订阅数据库”选项下选择“教学管理复制”(如果没有,则需要新建数据库)单击“下一步”按钮。 指定分发代理安全性。单击按钮出现如图16-8所示对话框,在“进程账户”中输入“ZUFE-MXHmeng”,单击“确定”按钮。 单击“下一步”按钮,在“同步计划”对话框中选择“连续运行”选项,单击“下一步”按钮。 在“初始化订阅”对话框中选择“首先同步”。 其余步骤全部选择默认设置,最后单击“完成”按钮结束订阅创建。,27,16.8 复制实例,6复制验证进行上述复制设置后打开ZUFE-MXH上“教学管理复制”数据库,刷新后会发现其中多了一张“学生表”,且内容和ZUFE-MXH上“教学管理”数据库中的“学生表”相同,它就是复制过来的出版物。此时也可以打开ZUFE-MXH上“教学管理”数据库中的“学生表”,修改其中的一些信息,1分钟后打开ZUFE-MXH上“教学管理复制”数据库中的“学生表”,可以发现发生了一致性的修改。,28,Thank you very much!,谢谢您的光临!,29,