SQLServer技术(111)

来源:互联网 发布:php和mysqlweb开发pdf 编辑:程序博客网 时间:2024/04/30 08:46
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

  2000提供了比以前版本更多的复制选项,其中包括立即更新订购者,排队更新,以排队更新作为热备份的立即更新,传递复制数据,过滤出版数据等。其中前三个选项表示可在订购者处对复制数据进行修改,然后将修改以相应的方式反映到出版者那里。如果在复制中使用这些复制选项,将使复制的配置和管理更为困难,所以很有必要对这些复制选项有着更为清晰的认识和了解。

16.6.1立即更新订购者
    所谓立即更新订购者是指在复制时使用了立即更新选项。通常而言,快照复制和事务复制都是单向数据复制即数据从出版者的源数据库复制到订购者的目标数据库。但是SQLServer通过允许订购者来修改复制数据而增强了这种模式的功能。立即更新订购者选项允许既可以在出版者也可以在订购者处对复制数据进行修改。立即更新是指对复制数据进行修改的订购者与出版者之间保持数据的立即更新,即立即将订购者的修改反映到出版者那里。并且提供了对其它订购者而言的潜在事务一致性,即订购者的修改在立即反映到出版者那里之后,允许这一修改不必马上同步到其它订购者那里。在创建出版物时对该选项进行设置。

    应该强调的是,在对数据进行修改的订购者与出版者之间使用了两阶段提交,从而要求当订购者对数据的修改在出版者那里被成功提交之后,这一修改才会在该订购者处被提交。如果提交成功,然后出版者才会在分发代理执行时(如果是快照复制,则也可以是在快照被刷新时),把这种修改分发到其它的订购者那里。

    与完全的两阶段提交协议相比,立即更新订购者选项降低了复制的复杂性以及事务提交失败的可能性。因为完全的两阶段协议要求所有参与事务的服务器之间必须有可靠的网络连接,并且对数据的修改只有在所有的参与者中都被成功提交才会生效但当设置立即更新订购者选项时,由于仅在对复制数据进行修改的订购者与出版者之间使用了二阶段提交协议,所以事务的完整性仍得到很好的维护,而在出版者和其它订购者之间并不使用二阶段提交协议,这样便取消了所有参与者必须保持数据同步的复杂性。
注意:合并复制不允许使用立即更新订购者选项。

SQLServer2000中,若设置了立即更新订购者选项则,需要以下组件的支持;
触发器
存储过程
Microsoft的分布式事务协调器MSDTC
冲突检测
环路检测

1触发器
触发器位于订购者,被用来捕捉在订购者上发生的事务并利用远程过程调用将事务提交给出版者。由于使用二阶段提交协议,从而保证事务在出版者被成功提交后才会在订购者那里提交,如果提交失败,则订购者事务将回滚,从而使订购者数据库与出版者数据库仍能保持同步。
2存储过程
存储过程位于出版者上,如果自订购者上次接收复制数据以来,出版者数据库发生的变化与订购者提交的事务不发生冲突,才允许在出版者提交这些来自订购者的事务。若有冲突发生,则拒绝事务提交,两处的事务都将回滚。每篇论文都有为INSERT、DELETE、UPDATE事务创建的存储过程。
3Microsoft的分布式事务协调器(MSDTC)
在触发器使用存储过程将订购者事务提交给出版者时,需要Microsoft的分布式事务协调器(MSDTC)来管理出版者与订购者之间的两阶段提交。远程存储过程使用BEGINDISTRIBUTEDTRANSACTION来对MSDTC进行初始化操作。
4冲突检测
出版数据库中的存储过程使用时间戳来进行检测,以确定某列被复制到订购者之后是否又被修改。当订购者提交立即更新事务时,它会把某行的所有列(包括时间戳列)送回到出版者,出版者利用存储过程将该行当前(属于出版者数据库)的时间戳值与从订购者送回的时间戳值进行比较,如果相同,表明在复制给订购者之后没有发生修改,则接收事务(用从订购者送回的行值来修改该行的当前值)。
5环路检测
环路检测主要是基于以下考虑而被提出的,即如果订购者的立即更新事务在出版者和订购者都被成功提交后,出版者要在以后的某一时刻将该事务复制到其它订购者,但是由于提交立即更新事务的订购者已成功提交了该事务,因此也就没有必要再将此事务从出版者那里复制给该订购者。如何解决该问题呢?环路检测就是用来确定一事务是否已在某订购者服务器处被成功提交,从而避免该事务又一次应用于订购者服务器,最终因破坏了完整性约束(如向同一表中插入同一行)导致复制中止。

共4页  第1页   
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击