热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

复制选项的规划_MySQL-mysql教程

复制选项的规划
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 的新增功能。与立即更新订购者一样,排队更新允 许快照复制或事务复制的订购者对复制数据的修改,然后将修改反映到出版者那里。但不 同的是,排队更新并不要求订购者与出版者之间的网络连接一直处于激活状态。
通常在创建出版物时对该复制选项进行设置,如果使用了排队更新选项,那么订购者 对复制数据的修改是保存在一个队列中。当订购者与出版者之间的网络连接恢复时,这些 队列中的事务将按先后顺序被应用到出版者。
由于订购者对复制数据的修改是以异步的方式反映到出版者那里的,所以,一旦同一 数据被出版者或其它的订购者修改,则容易出现复制数据的修改冲突。在创建出版物时, 我们通常也要决定冲突的解决策略,从而对可以出现的冲突提供解决方案,保证复制数据 的一致性。
如果用户经常读到数据,并且偶尔修改数据,则在该情况下推荐使用排队修改,这样 订购者即使在离线的情况下仍可以对复制数据进行修改。

在SQL Server 2000 中,若设置了立即更新订购者选项,则需要以下组件的支持:
触发器
队列
存储过程
队列阅读代理

1 触发
触发器依附在订购者的出版表上,当进行排队更新时,触发器用来捕捉订购者上执行 的事务,然后将这些事务包在消息中并传送到队列中。

2 存储过程
在创建出版物时,若指定了排队更新选项,则在出版数据库中对出版表执行插入、删 除、更新的存储过程将自动生成。队列阅读代理将调用存储过程在出版者上执行队列中的 事务,并进行冲突检,测如有必要则产生一些补充命令,这些命令首先传给分发数据库, 然后传送给订购者。除此之外,在出版者上仍要创建记录冲突信息,并将冲突信息传递给 相关订购者的存储过程,如果检测到冲突,这些存储过程将由队列阅读代理调用。

3 队列
队列主要用来存储包含订购者事务的消息,订购者与分发者都有一个消息队列。在网 络断开的情况下,包含订购者事务的消息首先存储在订购者消息队列,然后在网络接通时 被传送到分发者消息队列。队列阅读代理读到这些消息并将消息中的事务应用到出版者。

4 队列阅读代理
队列阅读代理运行在分发者上多线程代理,其主要任务就是从消息队列中读取信息并 将事务应用到出版者。

16.6.3 转换复制数据
转换复制数据是SQL Server 2000 新增的功能。用可转换订购(Transformable subscriptions) 来实现复制数据的转换。可转换订购主要是利用数据转换服务(DTS)所提供的 功能,如数据移动、传递映射、过滤等,从而可以根据每个订购者的具体要求来定制、发 送复制数据。它可以在快照复制和事务复制中使用。比如,在以下情况下我们应该使用转 换复制数据选项:

根据每一订购者对出版数据进行列或水平分割
在SQL Server 2000 以前的版本中,由于不同的订购者需要不同的数据(这里订购者 所需要的数据是指表在垂直或水平分割后的某一部分),所以必须把数据分割成不同的数 据块,从而在创建快照复制或事务复制时,也要分别为每一个订购者创建不同的出版物。 这给复制的管理和配置带来极大的不便,由此可增加系统的负担。但是在SQL Server 2000 中,可转换订购允许为同一出版物创建定制的数据分割(列或行分割),即同一出版物支 持多个订购,从而满足不同订购者对出版数据的不同需求。

创建数据转换,如数据类型匹配、列操作(如两列合成一列)、字符串操作、用 户自定义函数等。
使用可转换订购在出版者与订购者之间进行基本的、简单的数据转换和列操作主要包括以下几个方面:

改变数据类型(除主键列外)
重新命名某列
从某列提取子字符串或向某列添加额外的字符
对某列使用函数
在创建出版物时设置该选项。完成该选项设置后,将创建一个复制DTS 包,订购者将把该DTS 包作为出版物的一部分。
下面我们将介绍在Enterprise Manager 中如何创建可转换订购。
首先,在创建出版物时要设置Transform Published Data 选项,在创建出版物的step6

推荐阅读
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 探讨架构师在项目中应如何平衡对产品的关注和对团队成员的关注,以实现最佳的开发成果。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 深入理解一致性哈希算法及其应用
    本文详细介绍了分布式系统中的一致性哈希算法,探讨其原理、优势及应用场景,帮助读者全面掌握这一关键技术。 ... [详细]
author-avatar
Sunny-阿坚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有