"SQL Server数据复制(上)"
SQL Server数据复制是分布式数据库应用程序中常用的数据拷贝技术,它将一个数据库中的数据拷贝到通过局域网、广域网或Internet网络连接的不同站点或同一个服务器中的不同数据库中,并能够自动保持这些数据的同步,使各个拷贝具有一致的数据。
SQL Server数据复制基于“出版-订阅”模型,由出版者、分发者和订阅者三种服务器构成。出版服务器标识其数据库中的哪些数据用于复制,并检测这些数据的变化和维护该站点中的所有出版信息。分发服务器中建立一个或多个分发数据库,用来保存出版服务器的出版物,并向订阅者传递它们所订阅的复制数据。订阅服务器用于存储复制数据,SQL Server 7.0还允许用户修改订阅服务器所接收到的出版物。
出版服务器所出版的数据的最小单位为条目,出版条目可以是数据库中的表或存储过程。SQL Server允许对所出版表添加纵向或横向过滤器,从而使出版条目中只包含表中的某些列或其中的某些数据行,一组出版条目的集合构成一个出版物。
SQL Server复制部件采用模块化设计,各种复制操作通过不同的复制代理实现。SQL Server中的复制代理包括:快照代理、日志阅读代理、分发代理和合并代理。
快照代理运行在SQL Server代理服务环境下,其功能是:为复制准备表结构、初始化出版表和存储过程的数据文件,将出版物快照存储到分发服务器的分发数据库中,并记录分发数据库的同步状态信息。每个出版物在分发服务器上均运行着自己的快照代理,并通过快照代理与出版服务器连接。
日志阅读代理将用于复制的事务从出版服务器的事务日志中拷贝到分发数据库。每一个使用事务复制出版的数据库在分发服务器上均运行着自己的日志阅读代理,并通过该代理与出版服务器连接。
分发代理将保存在分发数据库中的事务或出版物快照传递到订阅者。分发代理运行在SQL Server代理服务环境下,可以直接使用SQL Server企业管理器进行管理。
对于快照复制和事务复制,如果在配置推订阅时采用立即同步方式,那么每个出版物在分发服务器上启动自己的分发代理,并由它实现与订阅者间的连接;如果将推订阅配置为非立即同步方式,那么所有的快照或事务出版物在分发服务器上共享一个分发代理,并由它实现与订阅者间的连接。
快照和事务出版物拉订阅的分发代理则运行在订阅服务器上,而不是在分发服务器上。合并复制没有分发代理。
合并代理每个合并出版物均有自己的合并代理,在创建出版物的初始快照后,由合并代理在出版服务器和订阅服务器之间传递出版物内容的变化,并对二者中的出版物做相应修改。合并出版物推订阅的合并代理运行在出版服务器上,而其拉订阅的合并代理则运行在订阅服务器上。快照复制和事务复制没有合并代理。
SQL Server提供了三种复制类型来满足不同环境中的应用需要:快照复制、事务复制和合并复制。
快照复制是SQL Server中最简单的一种复制方式,它拷贝数据库中出版物在某一时刻的结构和数据状态,即建立出版物快照,之后通过复制代理将出版物快照复制给订阅服务器。快照复制操作由快照代理和分发代理实现。快照代理将出版物中各条目(表)的结构和数据拷贝到分发服务器的快照文件(但不是分发数据库)中,并在分发服务器的分发数据库中记录复制同步操作。分发服务器再根据分发数据库中的同步记录将快照文件传递到订阅服务器的目标数据库中。
事务复制在出版大型数据库时,如果采用快照复制方式,分发服务器为了完成复制操作,必须在每次出版物内容变化时从出版服务器中拷贝表结构及其中的大量数据。之后再将它们传递给订阅服务器,这大大增加了网络的通信负担。对于低速连接的网络环境,采用快照复制将严重影响应用程序的正常运行,因此需要使用事务复制来解决这个问题。