[返回]
中国计算机报1999年第89期
左 洪
数据复制作为一种重要而有力的数据库技术使得企业范围的数据和存储过程的分布变得简单。SQL
Server 7.0提供了完备的复制功能。通过使用复制功能,用户可以产生数据的拷贝,移动这些数据拷贝到任何其它的地方,并自动化地同步数据,以便分布式环境下的多个数据拷贝保持相同的数据值。SQL
Server的复制功能具有相当的灵活性,这使得在同一台服务器的数据库间或依赖网络互连的多台服务器间可以方便地实现复制。
复制的设计要求
由于应用的多样性,想要通过一种方案来解决所有问题是不可能的,因此SQL
Server提供了多种数据复制技术以便量体裁衣地适应特定应用的特殊需求。其中,每种技术都将产生不同的好处,也会有不同的限制和约束,这依赖于应用的特定需求。我们可以从三个角度来考虑复制的设计要求:事务的一致性、各站点的自主性和分割数据以避免冲突。当然,不同的分布式应用的需求将依据上述三个角度中的一个或多个角度而变化。
复制的上下文中,事务的一致性意味着在复制完成后,任何参与复制的各站点数据与所有事务只在一个站点上发生所最终形成的数据相同。对于分布式应用中的数据复制来说,至少存在三种可能的事务一致性级别,分别是立即完成的一致性、可延迟完成的一致性和汇聚模式。
各站点的自主性反映了一个站点上的操作对其它站点的影响。如果一个站点能够执行特定的交易,而且独立于同其连接的其它站点以及其它站点中的操作状态,那这种能力被称为完全的站点自主性。
分割数据以避免冲突的方法可以赋予用户自己对交易一致性的控制。用户可以将数据分割成不同的部分,并将它们部署在多个站点。当然,这样做将缺乏事务一致性的保证,但并不意味着交易不完整。用户通过设计适当的应用规则,完全可以使每一个参与复制的站点确保部署的数据最终满足事务一致性要求。
复制模型的主要部件
基于对复制技术的设计要求,SQL Server提供了强有力的复制模型。复制模型由出版者、分发者、订阅者、文章、出版物以及推与拉模式的订阅组成。
出版者通常是一台服务器,它可以在复制中为其它服务器提供数据。除了需要标识需要被复制的数据以外,出版者还要监视数据的改变并维护站点内所有出版物的信息。任何将要被复制的数据元素都有一个出版者,尽管它可以被许多的订阅者更新或被其它订阅者再一次出版。订阅者是存储复制品(数据)和接收数据更新的服务器。在较早的版本中,数据更新通常只发生在出版者身上。然而在SQL
Server 7.0中,订阅者被允许进行数据更新。此后,一个订阅者亦可以成为出版者,以便为其它订阅者提供复制服务。分发者是一台维护着分发数据库的服务器。但在每种SQL
Server 7.0复制的类型中,分发者都将充当不同的角色。
出版物由一系列的文章组成,这里的文章实际上是一组将被复制的数据集合。一篇文章可以是一个表、几个数据列、某些行,当然也可以是一个存储过程。一个出版物可以由多篇文章组成。订阅者只能订阅出版物而不能订阅一个出版物中的独立的文章。在这一点,SQL
Server 7.0与之前版本相比有所修改。
使用推订阅模式,出版者将向订阅者“推”数据的改变,而无须订阅者显式地发出复制请求。这种方式将复制的控制权保留在出版者手中,在实现近似实时的数据复制应用中是明显的最优方案。而对于拉订阅模式,订阅者向出版者定期/不定期地请求数据更新。对于有大量订阅者的复制来说,“拉”模型更加适合,尤其是订阅者需要通过窄带线路连接出版者时。另外,出版物可以同时支持推和拉订阅模式。
复制的类型
SQL Server提供了三种主要的复制类型:快照类型、事务类型和合并类型。一个复制过程除了需要常规的部件以外,还需要两个或多个复制代理。复制代理主要有:快照代理、日志读取代理、分发代理和合并代理。
快照代理准备数据库构架和被出版的表、存储过程的初始数据文件,存储快照在分发者上,并在分发数据库中记录同步状态的信息。每个出版物都有自己的快照代理,它运行在分发者上并连接着出版者。日志读取代理将被标记为需要复制的事务,从出版者的事务日志中移到分发数据库。每一个使用事务性复制的被出版数据库均有自己的日志读取代理,它运行在分发者上并连接出版者。分发代理将分发数据库中保持的事务和快照任务直接移动到订阅者。当推订阅被创建时,每个为立即同步而建立的事务性出版物和快照出版物均拥有自己的分布代理,它运行在分发者上并与订阅者相连。不需要立即同步的事务性和快照出版物将在一对出版者/订阅者间共享分发代理,它运行在分发者上并与订阅者相连。而对于拉订阅模式来说,快照和事务性出版物都拥有运行在订阅者上分布代理,而不是运行在分发者上的。合并代理通常应用于合并出版物,它可以在最初快照生成后,移动和协调新增加的数据改变。
快照复制就像拍照片一样,一次记录下被出版数据的信息。在复制过程中,订阅者被整个数据集更新。所以,快照复制将发送所有的数据给订阅者,而不是仅仅发送被改变的数据。当然,如果文章非常大,复制将需要极大的网络资源用于数据传输。所以,再使用快照复制时应该综合考虑整个数据集的大小和数据是否经常被改变。快照复制是最简单的复制类型,它可以确保可延迟完成的一致性,另外,如果订阅者并不更新数据的话,它也提供了高度的自主性。
SQL Server的事务性复制可以支持两种类型的对象复制:表和存储过程。用户可以在一个出版物中,定义一篇文章,它可以基于一个表中的部分或全部的数据。与表对象的情况类似,用户可以选择一个或多个存储过程作为被复制的文章。如果使用合适的话,基于存储过程的复制将会使应用具有更好的性能,例如可以大大减少网络的通讯量。事务性日志使用事务日志来监视文章中的数据改变。
合并复制监视源数据库中的改变,并同步出版者和订阅者的数据值,其中无论是出版者还是订阅者均可以更新数据。在合并复制中,出版者是创建出版物的服务器。尽管出版物由出版者创建,当出版者同订阅者发生冲突时,出版者并不会自动地成为主宰冲突的一方。冲突的主宰者可以由用户定义的条件来决定。与此类似,目的数据库中的数据改变将被告知源数据库。合并复制涉及快照代理和合并代理的参与。快照代理将准备包含有被出版数据表的结构与数据的快照文件,在分发者上存储这些文件,并在分发者的分发数据库中记录同步任务。合并代理应用存储在出版数据库表中的初始快照任务于订阅者。它也合并在最初快照被建立后增加的数据改变,并依据用户配置的规则或使用用户自定义的解决方法来协调冲突。
复制工具
Replication Wizards极大地简化了开发、实现和维护复制的步骤。其中,Configure
Publishing and Distribution Wizard被用于帮助用户将一台服务器标识为分发者,并可以选择标识其它的复制部件;Create
Publication Wizard可协助用户创建出版物;Push Subscription Wizard可协助用户从一台服务器上将出版物“推”到一个或多个服务器甚至服务器组上;Pull
Subscription Wizard可协助用户从一台服务器上的出版物“拉”到其它服务器的数据库中;Disable
Publishing and Distribution Wizard可协助用户在一台服务器上禁止出版、分发;Replication
Conflict Viewer可协助用户查看和解决合并复制过程中发生的冲突。
通过使用SQL Server Enterprise Manager,用户可以跨多台服务器建立一个完整的复制环境。SQL
Server Enterprise Manager使用Replication Monitor来监视事先计划的四种复制代理(快照代理、日志读取代理、分发代理和合并代理)的处理过程。Replication
Monitor也维护了任务的列表、队列和历史记录,这对于解决复制中出现的问题是非常有用的。另外,Replication
Monitor也提供了一种简单的方法,用于为复制事件设置报警。当一个事件发生时,Replication
Monitor会自动地响应,同时可以执行一个用户定义的任务,也能向指定的管理员发送e-mail或一个传呼消息。
SQL Server 7.0作为一个分布式数据库系统,复制是一个非常重要的部件。同时,由于此版本对移动计算的支持,复制功能及其工具更是必不可少。尽管SQL
Server 7.0依然沿用了SQL Server 6.5中的“出版-订阅”的模式描述,但其复制类型被扩展到三种不同的类型,他们正是基于一致性同自主性的比例来定义的。通过对应用灵活地使用复制,用户可以获得强大的功能。无论是对企业内的分布式数据库系统,基于移动计算的数据库应用,还是OLAP应用,SQL
Server 7.0均可以执行更好的复制服务。