SQL Server 2005 数据库复制详细介绍
对于一个地域分散的大型企业组织来说,构建具有典型的分布式计算机特征的大型企业管理信息系统时,总要解决一个很重要的问题:如何在多个不同数据库服务器之间保证共享数据的一致性。之所以有这个重要的问题在于企业组织在不同地点对具有相同结构的本地数据库进行修改,但要保证修改后的数据库有相同的结果,其本质就是在对本地数据库的修改体现在其他具有相同数据的远程数据库中。那么如何解决这个问题就要用到数据库的复制技术。 SQL SERVER提供了内置的复制能力,复制组件并不是附加产品,而是核心引擎的一部分。在复制这个技术的支持下,用户可以跨局域网、广域网或因特网的不同数据服务器上维护数据的多个拷贝,从而保证数据的一致性。 复制模型; (1)出版物和论文论文是被复制的数据集合,一篇论文一般就是咱们所说的表,论文是出版物的基本组成单元。出版物是论文的集合。它可以包括一个或多个论文订阅者,订阅的是出版物而不是出版物中的论文,这样可以使订阅更为简单。 (2)出版者出版者是出版出版物的服务器。出版者服务器来维护源数据库以及有关出版物的信息。使数据可用于复制。除了决定哪些数据将被复制外,出版者要检测哪些复制数据发生了变化,并将这些变化复制到分发者的分发数据库中。 (3)分发者分发者是指把从出版者传递来的复制数据或事务等送至相应的订阅者的服务器,并负责维护分发数据库。 (4)订阅者订阅者是指存储复制数据的副本机器。且接收并维护已出版的数据的服务器,订阅者也可以对出版数据进行修改,尽管订阅者可以对数据进行修改,但它仍是一个订阅者,当然订阅者也可以作为其他订阅者的出版者。 (5)订阅类型推订阅和拉订阅 (1)快照代理快照代理在分发者上创建并存储快照文件,任务是:在分发数据库中准备已发布表的架构和初始数据以及其他对象、存储快照文件并记录出版数据库和订阅服务器之间的同步信息,快照代理运行在分发者服务器上,并与出版者相连接。每一个出版物都有自己的快照代理。与各种类型的复制一起使用。 (2)日志阅读代理日志读取器代理与事务性复制一起使用。它将发布服务器上的事务日志中标记为复制的事务移至分发数据库中。使用事务性复制发布的每个数据库都有自己的日志读取器代理,该代理运行于分发服务器上并与发布服务器连接(分发服务器与发布服务器可以是同一台计算机)。 (3)分发代理分发代理与快照复制和事务性复制一起使用。它将初始快照应用于订阅服务器,并将分发数据库中保存的事务移至订阅服务器。分发代理既可以运行于分发服务器(对于推送订阅),也可运行于订阅服务器(对于请求订阅)。 (4)合并代理:合并代理与合并复制一起使用。它将初始快照应用于订阅服务器,并移动和协调所发生的增量数据更改。每个合并订阅都有自己的合并代理,该代理同时连接到发布服务器和订阅服务器并对它们进行更新。合并代理既可以运行于分发服务器(对于推送订阅),也可以运行于订阅服务器(对于请求订阅)。默认情况下,合并代理将订阅服务器上的更改上载到发布服务器,然后将发布服务器上的更改下载到订阅服务器。 (5)队列阅读代理队列读取器代理与包含排队更新选项的事务性复制一起使用。该代理运行于分发服务器,并将订阅服务器上所做更改移回至发布服务器。与分发代理和合并代理不同,只有一个队列读取器代理的实例为给定分发数据库的所有发布服务器和发布提供服务。 (1)快照复制如其名字所言,快照复制指在某一时刻给出版数据库中的出版数据照相,然后将数据复制到订阅者服务器。快照复制实现较为简单,其所复制的只是某一时刻数据库的瞬间数据, (2)事务复制快照复制是将整个数据集发送给订阅服务器,由于体积大而造成复制周期较长,会形成复制滞后问题。那么事务复制使用事务日志来生成将复制到订阅服务器的事务,因为它只复制事务也就是变化,所以滞后也比快照复制低得多,因为将不断地在订阅服务器处得到及时应用。 事务复制有三个组件: 快照代理,它生成架构,数据以及跟踪复制过程所需的数据; (3)合并复制合并复制是为移动用户设计的,可以在发布服务器或是订阅服务器处执行修改,在合并代理运行时,这些修改将同步,多用于发布服务器与订阅服务都修改数据的情况下。工作原理如下:在要复制的每个表上实现触发器,并使用包含GUID列唯一标识要复制的表中的每一行。对其中的任何一个表进行修改时,都会将更改将记录一个数据表中,在合并代理运行时,它收集数据表中的GUID,这些GUID指出了在发布服务器和订阅服务器处修改过的行。对于只在发布服务器或是订阅端修改的数据则直接进行相应操作,如INSERT,UPDATE,DELETE,如果双方都有GUID则按照用户指定的方式解决冲突,默认发布服务器伏先。 配置复制:无论是快照复制,事务性复制还是合并复制,创建复制都要经过以下几个步骤: 1. 创建发布服务器。选择要发布的服务器。如果有条件的,也可以分发服务器,在这里我们就将发布服务器和分发服务器设置在同一台计算机上。 创建可以使用此发布的订阅服务器。 我们将SERVER1上的DB1数据库复制到SERVE2服务器上 我们在这里选择将发布服务器本身作为自己的的分发服务器。下面指定一个快照文件夹,用于存放快照信息,并依次选择发布数据库DB1 接下来指定复制类型;我们先进行快照复制 几种发布类型前面已做讲解,具有可更新订阅的事务发布属于事务发布的一种。 在该对话框里可以指定用于在分发服务器上运行快照代理的WINDOWS用户。WINDOWS用户又称为进程帐户,因为代理进程是在该帐户下运行的。 此时发布成功完成,如果要修改发布属性,可以在复制-----本地发布----看到该发布 下面就可以进行订阅了,订阅可以在发布服务器上进行,也可以在订阅服务器上进行。 选择发布服务器,然后指定复制类型:我们选择是推复制 并且给SERVER2选择数据库 弹出如图所示的分发代理安全性对话框。在该对话框里可以设置同步订阅时运行分发代理进程的帐号: 对于推送订阅来说,分发代理在分发服务器上运行。对于请求订阅来说,分发代理在订阅服务器上运行。在本例使用的是推送订阅,因此应该使用发布服务器的用户 测试: 至于事务复制和合并复制,过程大致相同只是要注意表的主键和GUID问题,在此不再累述,如有疑问或不同意见请批评指定 1.代理服务一定要事先运行 2.如果是GHOST的系统,会发生计算机名和SQL SERVER中所能识别的服务器名称不一致的情况,则请使用以下的代码进行同步更新, @@servername begin declare @server sysname set @server = @@servername exec sp_dropserver @server = @server set @server = cast(serverproperty('servername') as sysname) exec sp_addserver @server = @server,@local = 'LOCAL' end再重新启动SQL SERVER 核心服务和代理服务 本文出自 “杜飞” 博客 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |