【 tulaoshi.com - SQLServer 】
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 可以指定哪个数据库为出版数据库,选择表或存储过程来创建论文从而创建复制出版物。
注意:要创建复制出版物必须