16.3.1 快照复制概述 快照复制就是在某一时刻对出版数据进行一次“照相”,生成一个描述出版数据库中数据瞬时状态的静态文件,最后在规定时间将其复制到订购者数据库。快照复制并不像事务复制那样要不断地监视、跟踪在出版数据库中发生的数据变化,它所复制的内容不是 INSERT、 UPDATE、 DELETE 语句(事务复制的特征),也不是仅限于那些被修改数据(合并复制的特征)。它实际上是对订购数据库进行一次阶段性的表刷新,把所有出版数据库中的数据从源数据库送至目标数据库,而不仅仅是那些发生了变化的数据。如果论文很大,那么要复制的数据就很多,因此对网络资源需求较高,不仅要有较快的传输速度,而且要保证传输的可靠性。 快照复制是最为简单的一种复制类型,能够在出版者和订购者之间保证事务的潜在一致性。快照复制通常使用在以下场合:不需要实时数据时,如在进行决策支持、查询静态表信息时;只读订购者(订购者不对出版数据进行修改),并且不需要最近的数据;使用立即更新订购者时对数据库的修改次数和数据量较少。 快照复制的执行仅需要快照代理和分发代理。快照代理准备快照文件(包括出版表的数据文件和描述文件)并将其存储在分发者的快照文件夹中,除此之外快照代理还要在分发者的分发数据库中跟踪同步作业。分发代理将在分发数据库中的快照作业分发至订购者服务器的目的表中。分发数据库仅用于复制而不包括任何用户表。 每一次快照代理执行时,都要创建将被分发至订购者的数据文件和描述文件(也称为同步集合)。快照代理主要通过以下几步来完成这一工作(见图16-24)。 (1)从分发者到出版者的连接并在出版物论文中的所有表上加了共享锁。共享锁是为了确保快照数据的一致性,因为共享锁将防止所有的其它用户对表进行修改。快照代理应该被安排在数据库活动较少期间执行。 (2) 快照代理又建立从出版者到分发者的连接,并将每一个表的表描述拷贝至分发者上的一个.sch 文件中,该文件存储在分发数据库工作目录下的一个子目录。如果出版物中包括索引和声明的参考完整性,则快照代理将所有被选择的索引写入分发者的.idx 文件中。 (3) 快照代理对出版者的出版表的数据执行一次快照,并把这些数据写入分发者上的一文件当中。该文件存储在分发数据库的工作目录下的一个子目录中,如果订购者有SQL Server, 则快照被做为.bcp 文件存储;如果一个或多个订购者是异构数据库源,则快照被做为字符模式的.txt 文本文件存储同步集合包括.sch 和.bcp 文件,出版物中每一篇论文都有一个同步集合。 (4) 快照代理向分发数据库的Msrepl_commands 和Msrepl_trnsactions 表中插入新行。Msrepl_command 表中的每个记录是指明同步集合和出版者等位置的命令,Msrepl_trnsactions 表中的每条记录是引用订购者同步任务的命令。 (5) 快照代理最后释放在每一个论文上的共享锁。 每一次为快照代理运行的分发代理将数据和描述文件分发给订购者。分发代理通过以下几步来完成该任务: (1) 分发代理从其所在的服务器向分发者服务器建立连接,对于推订购,分发代理位于分发者服务器上;对于拉订购,分发代理位于订购者上。 (2) 分发代理检查分发者的分发数据库中的Msrepl_commands 和Msrepl_trnsactions 表从第一个表,读取同步集合的位置并从这两个表读取订购者的同步任务。 (3) 分发代理将在订购数据库中应用在分发数据库的Msrepl_commands 和Msrepl _trnsactions 表中发现的命令,从而将数据文件和描述文件复制到订购者服务器上。如果订购者不是SQL Server 数据库,则分发代理将按要求转换数据类型。在出版物中的所有论文都将被同步并在各表中保持事务和参考完整性。 当有很多的订购者时,应让分发代理运行在订购者服务器上,即使用拉订购。这样可以减轻分发者负载,提高其性能。如果使用推订购,只要订购者订购出版物或在出版物创建时所规划的时间来临,快照代理都会被执行。但是在快照代理执行的规划时间来临时,只有那些没有被同步的订购者才会被同步。 16.3.2 创建快照复制出版物 在SQL Server 中,利用Create Publication Wizard 可以指定哪个数据库为出版数据库,选择表或存储过程来创建论文从而创建复制出版物。 注意:要创建复制出版物必须其有sysadmin服务器角色。 出版物不能跨多个用户数据库。 使用SQL Server Enterprise Manager 创建复制出版物需执行以下步骤: (1) 启动SQL Server Enterprise Manager, 选中出版者服务器。 (2) 在主菜单中选择Tools, 在下拉菜单中选择Replication, 然后选择Create and Manage Publications 选项,此时会打开Create and Manage Publications On ‘publisher’ 对话框。如图16-25 所示: (3) 在Databases and Publications 框中选择准备出版的数据库然后当选择Create Publication 选项,打开Create Publication Wizard 对话框,选中show advanced option in Wizard ,如图16-26 所示。 (4) 单击“下一步”,打开Choose Publication Database 对话框,如图16-27 所示。从Database 框中可以选择将出版哪一数据库的表、视图或存储过程。 (5) 选择指定的出版数据库后,单击“下一步”,打开Select Publication Type 对话框,如图16-28 所示,从中选择所使用的复制类型。 (6) 单击“下一步”,按钮打开Updatable Subscriptions 对话框,如图16-29 所示。 Immediate updating 选项表示订购者在对复制数据更新后,立即将这些变化反映到出版者;Queued updating 选项表示订购者在对复制数据更新后,首先将这些更新事件包裹在消息中,并将这些消息存储在订购者和分发者的消息队列中,然后队列阅读代理将从分发者的消息队列中读取这些更新事件,并将其应用到分发者上。可以选择任意一个选项,也可以将其都选中。如果不做出选择,则单击“下一步”之后将打开Transform Published Data 对话框与(Imme- diate updating 和Queued updating 复制选项以及Transform Published Data 有关的问题,我们将在“16.6 复制选项”一节做详细介绍)。在此我们选择Queued updating。 (7) 单击“下一步”,打开Specify Subscriber Types 对话框,如图16-30 所示。 SQL Server 2000 提供了三种类型订购者;SQL Server 2000 订购者,SQL Server 7 订购者和异构订购者。如果选择了SQL Server 7 订购者类型,则一些SQL Server 2000 的新增特性将无法使用。在这里我们选择Server running SQL Server 2000 选项。 (8) 单击“下一步”按钮,打开Specify Articles 对话框,如图16-31 所示在SQL Server 2000 中,出版物不仅可以是表,存储过程,而且也可以是视图。左面的表格用来确定出版物包括哪些种类的数据库对象,比如您选中Table 旁的复选框,则会在右面的表格中显示出版数据库中所有用户自定义的表,如果准备让您的论文包括某个表就选中该表对应的复选框。Show unpublished objects 复选框用来确定是否在右面的表格中显示未被出版的数据库对象。 (9) 单击表格中被出版的表右边的方框按钮打开论文属性对话框,如图16-32 所示, General 标签页主要显示论文(表)的基本信息,包括论文名,有关论文的描述、出版表的所有者、表名以及目标表的所有者。 (10) 选择Snapshot 标签,如图16-33 所示。 注意:因为快照复制是将出版数据包括表的结构描述文件和数据文件通过当分发人工理复制到订购者,且订购者在初始同步时已在订购数据库中创建了同名、同结构的表,那么订购者是如何接收这些复制数据呢?可采用以下几种方式:将表删除后再重建;删除那些与从出版者复制过来的数据相匹配的数据行,而保留不匹配的数据行;删除表中数据但保留表结构;不删除表和表中数据,而将数据添加到表中。 在Name Conflict 区域可以选择一种数据接收方式,即名字冲突的解决方式。在Copy objects to destination 区域设置在将主键索引拷贝到目标数据库的同时是否也将复制其它选项,比如出版表上的聚簇索引或非聚簇索引、参照完整性约束、用户自定义的触发器等。 Convert user_defined to base data type 复选框用来确定是否将出版表中用户和自定义数据类型在复制到目标表后转换成其源数据类型(SQL Server 支持的基本数据类型)。 (11) 单击“确定”按钮,回到Specify Article 对话框,然后单击“下一步”按钮,打开Article Issue 对话框,如图16-34 所示。 (12) 打开Select Publication Name and Description 对话框,如图16-35 所示。在Publication name 文本框中输入出版物的名称;在Publication description 文本框中输入有关出版物的描述文字。 我们建议除了默认了描述信息外,应该输入其它一些信息,这样当在该出版数据上创建多个出版物不至于混淆。 (13) 单击“下一步”,打开Customize the Properties of the Publication 对话框,如图16-36 所示。 可通过选中Yes 或No 选项来决定是否对有关出版物的其它属性项进行自定义设置或使用SQL Server 的默认设置。在滑动框内可以浏览出版物的默认属性。在这里我们选择 Yes, I will define data filters…选项。 (14) 单击“下一步”打开Filter Data 对话框,如图16-37 所示。如果准备提高应用程序性能,提高复制数据在网络上的传输速度,尽力减少订购数据库存储和维护复制数据的数据量,则应根据各订购者对数据的具体要求选择适当的过滤类型,如垂直过滤或水平过滤。在这里我们将两个选项全部选中。 (15) 单击“下一步”按钮,打开Filter Table Column 对话框,如图16-38 所示。在Columns in selected table 下的表格内清空左边的复选框表示出版论文中不包括该列。 注意:合并复制不支持表的垂直分割,即不能进行列过滤(只复制某些列),不允许论文件中不包括主键列。若配置了立即更新订购者选项,则不能允许论文中不包括时时戳(timestamp)列。 (16)单出“下一步”,打开filter table rows对话框,如图16-39所示。从表格中选中要进行过滤的论文,然后单击该行最右边的按钮,打开specify fileter对话框,如图16-40所示。在该对话框的空白区域输入过滤条件。在本例中使用如下条件:au_id like'20%. 注意:在空白区域输入的不是整个select语句,也不必输入where关键字,只需在where关键字后输入条件表达式即可,条件表达中出现的列必须包含在出版表中。 (17) 单击“下一步”,打开Allow Anonymous Subscribers 对话框,如图16-41 所示,选择Yes 表示允许匿名订购者订购出版物;选择NO 表示只有那些被启用为订购者角色的服务器才可以订购出版物。 注意:匿名订购者是比较特别的拉订购。因为通常情况下,出版者存储维护与订购者有关的信息,分发者存储维护与订购者性能有关的信息。为了避免因存储维护这些信息而使系统负载过重,常使用匿名订购者,尤其有多个订购者且通过Internet进行出版复制。 (18) 单击“下一步”,弹出Set Snapshot Agent Schedule 对话框,如图16-42 所示。如果选中Create the first snapshot immediately 表示在单击“下一步”按钮后会立即创建快照若不使用默认的快照代理执行时间设置,可单击Change 按钮进行设置。 (19) 单击“下一步”,打开创建出版物完成对话框,如图16-43 所示。在滑动窗口可浏览出版物的创建信息,若想更改某些设置,可按“上一步”,回到上个对话框。单击“Finish”, 完成出版物创建。 16.3.3 订购出版物 在创建完出版物之后,必须订购出版物才能实现数据的复制。在订购出版物之前应在订购者上创建订购数据库。在订购时要进行以下选项的设置: 由哪些订购者来订购出版物 选择目标(订购)数据库 订购属性 在SQL Server Enterprise Manager 中,利用推(拉)订购向导来订购出版物需执行以下步骤: (1) 启动SQL Server Enterprise Manager, 选中出版者服务器。 (2) 在主菜单中选择Tools, 在下拉菜单中选择Replication, 然后选择Push Subscriptions to Others 选项,此时会打开Create and Manage Publications On ‘publisher’ 对话框。单击出版数据库旁的“+ ”,会显示当前出版数据库中的所有出版物。如图16-44 所示。 (3) 选中将被订购的出版物,单击Push New Subscription 按钮,打开Welcome to the Push Subscription Wizard 对话框,选中show advanced option in the wizard 复选框。单击“下一步”打开Choose Subscribers 对话框。如图16-45 所示。 (4) 在Enabled Subscribers 下选择已被启用的订购者,单击“下一步”打开Choose Destination databases 对话框,如图16-46 所示。 (5) 在Subscription database name 下的编辑框中输入目标数据库名称,或单击 Browse or create 按钮,将会弹出Browse databases 对话框。在空白框中列出选中订购者上的所有数据,从中选择某个数据库来准备接收复制数据,也可以单击“Create New” 来创建新订购数据库。 (6) 单击“下一步”,打开Set Distribution Agent Schedule 对话框,如图16-47 所示。如果希望出版者与订购者之间迅速实现数据的一致性,可选择Continuously 选项,表示分发代理处于不断的运行状态。选择Using the follow scheduling 表示在规划的时间运行分发代理。 (7) 单击“下一步”弹出Initialize Subscription 对话框,如图16-48 所示,订购初始化是指快照代理开始运行并在订购者生成同步集合(描述文件和数据文件),随后分发代理将同步集合分发到订购者。如果已经进行手工同步,则不必进行订购初始化。Yes ,initialize the schema and data at the subscriber 选项表示由SQL Server 来完成订购初始化工作。 (8) 单击“下一步”,打开Updatable Subscription 对话框,如图16-49 所示。其各选项的具体含义请参看“16.6 复制选项”一节。 (9) 单击“下一步”,打开Start Required Service 对话框,如图16-50 所示,在该对话框的表格内列出运行同步处理的服务。所有复制类型都需要启动SQL Server Agent, 如果是立即更新订购者的快照复制和事务复制,则还需要MS DTC 。若选中左边的复选框,则订购创建后该服务就会自动启动,否则必须以后手工启动。 (10) 单击“下一步”,打开Completing the Push Subscription Wizard 对话框,如图16-51 所示。单击“完成”,结束订购创建操作。 16.3.4 管理出版物 在创建出版物结束之后,或在设置了拉或推订购之后,仍可对绝大多数复制选项进行重新设置。其中主要包括:论文的内容、订购的属性、快照文件的位置、具有存取出版物的用户、复制更新相关选项等。而且也可以将出版物删除,重新创建新的出版物。在 Enterprise Manager 中,对于出版物相关的复制选项进行重新设置要执行以下步骤: (1) 单击Tools 菜单项,在下拉菜单中选择Replication, 然后再选择Create andManage Publication 选项,打开对话框。 (2) 在Databases and Publications 中选中已创建的出版物,然后再单击Properties and Subscriptions 按钮,打开Publication Properties 对话框,如图16-52 所示。通过选中各相关标签页,可以重新对其属性进行设置,各选项的具体含义请参看本章前面所作的介绍。 |