当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server数据库技术(111)

MSSQL
MS SQL SERVER2005 XML 最佳实践
SQL Server对文件进行全文检索的查询
教你构建SQL Server可管理安全机制
维护SQL Server的交易日志经验总结
SQL SERVER 2005 EXPRESS不能远程连接的问题
SQL Server与Oracle并行访问本质区别
SQL Server数据库优化其索引的小技巧
分析及解决SQLServer死锁问题
用SQL Server为Web浏览器提供图像
SQL Server SQL Agent服务使用小结
SQL Server 存储过程的分页方案比拼
SQL Server数据库中存储引擎深入探讨
四招解决SQL Server对上亿表的排序和join的问题
SQL Server数据库管理员必须掌握的DBCC命令
如何将sql数据库的文件备份到本地?
如何解决Sybase数据库乱码问题详解
SQL Server:SQLServer中最小函数依赖集
小编谈Transact-SQL中的一些命名规范
谈SQL编写规范
浅谈SQL命名与注释规范

MSSQL 中的 SQL Server数据库技术(111)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 38 ::
收藏到网摘: n/a

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

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

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

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

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

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

16.6.2 排队更新订购者

排队更新选项是SQL Server 2000 的新增功能。与立即更新订购者一样,排队更新允许快照复制或事务复制的订购者对复制数据的修改,然后将修改反映到出版者那里。但不同的是,排队更新并不要求订购者与出版者之间的网络