SQL Server数据库实用技术(109)
时间:2007-11-09 来源:不详 作者:迈克DB
在事务复制中快照代理和分发代理的具体步骤与快照复制基本相同。事务复制中各代理按照以下的执行顺序来协调工作完成事务复制(见图16-53)。
(1) 当创建订购时或到了创建出版物时,所规划的时间快照代理就会被执行,快照代理在论文上放置共享锁之后,便创建包含数据文件与描述文件的同步集合。描述文件主要是为了在订购数据库内创建与论文表相同的表结构。然后将:这两个文件存储在分发者的复制目录下,并在分发数据库中记录同步作业。
(2) 日志阅读代理可以连续不断地运行或在出版物创建时规划的时刻运行来监视数据变化。日志阅读代理执行时,它首先阅读出版物的事务日志,搜索出带有复制标志的INSERT、 UPDATE、 DELETE 语句和其它修改事务。接着,日志阅读代理将这些带有复制标志的事务批拷贝至分发者的分发数据库中。日志阅读代理使用系统过程sp_replcmds 从日志中来获取下一批带有复制标志的命令。只有那些被提交的事务才送至分发数据库。
在分发数据库中的复制事务和出版者事务日志中有复制标志的事务是一一相对的。在 Msrepl_transactions 表中存储的一个事务可由多个命令组成,每一条命令存储在Msrepl_ commands 表中。在整个批事务成功写入分发数据库后,每一命令将被提交接着阅读代理调用sp_repldone 系统过程来标明复制事务最终在哪里完成。最后代理标明在事务日志中的哪一行将被截掉。那些仍旧等待复制的行不会被截掉。从出版者删除事务日志并不影响复制,因为只有那未标有复制的事务才会被清除。
内容来自dedecms
(3) 事务命令一直存储在分发数据库中,除非分发代理从分发者将其推至订购者数据库或从订购者将其拉到订购者数据库。
注意:分发代理第一次执行时的主要任务是订购初始化,即将初始快照文件分发到订购者。
分发代理仅用于复制而不包含任何用户表,同时也不允许在分发数据库中创建任何其它数据库对象。
在出版者招待的将被复制的操作将按顺序在订购者上被执行、确保数据的最终一致性。
如果订购事务出版物但却没有对订购进行初始化,那么在出版者上自动定制的存储过程都不能在订购者上使用。相反必须在订购者手工创建存储过程。
16.4.3 存储过程的复制
SQL Server 中除了可以复制表以外还可以复制存储过程。在快照复制中,如果论文中包含存储过程,则在复制过程中整个存储过程将从出版者传递到订购者。在事务复制中,如果论文中包含存储过程,则在复制过程中传递给订购者仅是一条存储过程的执行语句,而不是由存储过程的执行而引起变化了的数据。
如果某一存储过程在执行后产生的结果集很大,我们会发现仅复制存储过程的执行语句而不是大量的SQL 语句将带来极大好处。不必再担心大量的复制语句会占满分发数据库而引起事务丢失,也不再会因复制大量的SQL 语句而引起网络传输性能的下降而感到沮丧。 dedecms.com
下面的例子也许会帮助用户更为深刻地理解复制存储过程的优点。
假如数据库的使用者打算修改出版物中某一表的10000 条记录的某一列。如果不使用存储过程复制,它的处理过程应是这样的:当这些修改在出版者完成时,日志阅读代理便会从事务日志中读出这些带有复制标志的上10000 条DELETE 语句以及相同数目的UPDATE 语句,并将它们送到分发数据库,分发数据库有限的空间立刻显得有些局促起来如果您很不走运的话,分发数据库会被添满而导致复制中断),然后分发代理再把这20000 条语句分发到订购者,在分发时20000 语句争先恐后地挤满了网络线路,我想您会体会到那种等待的滋味。
文章评论
共有位Admini5网友发表了评论 查看完整内容