对一个地域分散的大型企业组织来说,构建具有典型的分布式计 算特征的大型企业管理信息系统时总要解决一个很棘手的问题;如何 在多个不同数据库服务器之间保证共享数据的完整性、安全性和可用 性。之所以引发这样的问题在于企业组织存在这样的数据处理和要求: 在不同的地点对具有相同结构的本地数据库进行修改;但要保证修改 后的数据库有相同的结果。其实质就是将对本地数据库的修改体现在 其它具有相同结构的远程数据库中。 那么我们如何实现这种数据的恢滦阅兀看鸢缚赡苡泻芏嘀郑? 是包括sql server 在内的大多数数据库产品都采用一种复制技术来解 决这一问题。本章的主旨就是介绍sql server 的复制技术。下面让我 们从复制的概述开始。
sql server 提供了内置的复制能力,复制组件并不是附加产品而是核心引擎的一部 分。在复制这一支持分布式数据处理能力的重要技术帮助下,我们可以在跨局域网、广域 网或因特网的不同数据库服务器上维护数据的多个拷贝,从而自动地以同步或异步的方式 保证数据多个拷贝之间的数据的一致性。从本质上讲,复制就是从一个源数据库向多处目 标数据库复制数据。
16.1.1 sql server 的复制模型 sql server 使用“出版和订购”这一术语来描述其复制活动。所谓出版就是向其它数 据库服务器(订购者)复制数据。订购就是从另外服务器(出版者)接收复制数据。虽然 出版和订购的对象都是将复制数据,但出版和订购却并不是不同角度(出版者和订购)的 同一数据操作(复制数据),而是体现出一定的层次性和顺序性(总是先进行出版,然后 再进行订购)。sql server 的复制组件有出版者、订购者、分发者、出版物与论文、推订 购和拉订购。
出版者、分发者、订购者实际上并不一定指相互独立的服务器,它只是对sql server 在复制过程中所扮演的不同角色的描述。sql server 允许一台sql server 服务器可以扮 演不同的角色。比如,一台出版者服务器既可出版出版物也可以作为分发者来存储和传送 快照复制和事务复制。当然一台订购者服务器也可以同时作为其它订购者的出版者,只不 过这种情况很少见。在实际应用中我们决定是否让一台服务器扮演一个或多个角色在很大 程度是基于复制系统性能的考虑。例如为了提高分发者从分发数据库向订购者的数据库复 制出版物的效率,降低出版者服务器的负载。我们常不允许某一sql server 服务器既扮 演出版者又扮演分发者,而是让另外的服务器专门承担分发者任务从而提高了出版者和 分发者的性能。
(5) 队列阅读代理 在快照复制或事务复制时如果选择了queued updating 选项或immediate updating with queued updating as a failover 选项,则需要使用队列阅读代理。 队列阅读代理是运行在分发者上的多线程代理,它主要负责从分发者消息队列中读到 消息并将包含在消息中的事务应用到出版者。
16.1.3 sql server 的复制类型 sql server 提供了三种复制类型:快照复制(snapshot replication)、事务复制 (transactional replication)、合并复制(merge replication)。 可以在实际应用中使用一 种或多种复制类型。每一种复制类型都在不同程度上实现数据的一致性和节点的自主性, 因此对复制类型的选择主要依赖于应用系统对数据一致性、节点自主性的要求以及现有的 网络资源情况(如网宽和网络传输速度)。在分别介绍事务复制、快照复制和合并复制的 三节中我们将讨论如何选择合适的复制类型。下面扼要介绍一下这三种复制类型。