安全可靠的复制 作者:Cameron O'Rourke 使用现成的Oracle技术来建立分布式系统。 复制包括使一个分布式系统中跨多个数据库的一些或所有应用程序数据保持同步。在本栏目中,我将解释为什么你需要使用复制功能,并描述一些可以用来实现复制功能的Oracle技术。 你需要设计一个具备复制功能的系统有以下几个原因: 远程数据访问需要很大的网络带宽; 数据和性能 在对复制进行评估时需要考虑两个网络因素:网络带宽和网络延迟。 网络带宽几乎不是问题,除非你运行在无线网络上或你的WAN(广域网)连接是通过拨号或ISDN来实现的。在这种情况下,复制数据可能要比每次需要时再访问更有效。 网络延迟对于像HTTP这样的Web协议也不是什么大问题,因为每个用户请求的网络往返次数被控制在最小,并且网络请求一般都是并行处理的。然而,当你使用JDBC访问数据时,底层数据访问协议一般要求很多次的网络往返来满足一个单一请求。 高可用性和安全性 除了联网因素,复制还可以帮助你满足很多目标,如保证重要服务的正常运行以及维持对数据的自主控制等。 数据的同步拷贝可以使数据恢复到最新的版本,这对于传统备份是不可能实现的。在即使服务短期中断也令人无法接受的情况下,单向复制可以保证一个备用数据库在接到通知后马上接管主数据库的工作。 通常有一些法规、与安全性相关或其他现实的原因要求维护对共享数据的本地控制。例如,假设两家政府机构需要共享特定数据,但法律禁止将其完整的数据集进行合并。复制可以选择性地双向发布数据变更。 另外,复制还可以被设置为单向(主-从)、双向(多个主节点)或n向(即三个或更多个节点保持同步)。一个减少n向同步的固有复杂性的策略是不允许对数据进行更新。你的系统可以将数据分为不同的"版本",并为每个新版本建立一个新的全局标识符。 Oracle和复制 有几个Oracle技术对于设计数据复制功能特别有用。选择使用哪个技术完全取决于你的特定应用程序的要求。 一般有两种形式的复制,即通常所说的数据复制和程序复制。 当使用数据复制时,对数据库对象(如表)所做的改动将被捕获并保存在本地,然后被应用到每个远程地点。高级复制(Advanced Replication)是一个实施了这种复制的Oracle数据库特性。由于你需要一个数据库之间的Oracle Net Services (SQL*Net)连接,因此高级复制通常不适合在WAN(广域网)上使用。然而,高级复制不要求程序代码,并且可以传播数据变更和模式的变更。 程序复制使用程序代码来捕获和传播已提交的事务,而不是数据变化本身。例如,将采购订单上运输费用的变更作为一个事务表示出来可能比将组成采购订单的数据库表的所有变化都表示出来要简洁得多。Oracle高级排队(AQ)是Oracle数据库的一个特性,它提供了消息排队功能并且可以将事务传送到远程系统。AQ可以处理各种不同的有效负载类型,就像高级复制特性一样,AQ可以在Oracle Net Services上传播消息。但AQ还可以以XML格式对消息进行编码,通过HTTP和SMTP来传播这些消息,这使其成为在WAN上使用的一个更好的选择。 如果你需要与非Oracle系统共享数据,那么Oracle9i应用服务器(Oracle9iAS)集成可能是个好的选择。它提供了一个围绕基于Oracle AQ的消息中心而设计的应用集成框架。Oracle9iAS集成解决方案提供了不同系统之间进行连接所需的基于内容的路由、交叉引用和域值映射特性。和往常一样,我只是对这一主题作了肤浅的探讨,因此要想了解更丰富的其他信息,请查看Oracle文档。
网络延迟会导致你的应用程序运行得非常慢;
一个单一站点的故障或崩溃会导致令人无法接受的服务失效;
需要对特定数据的本地所有权和控制。