Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9265933
  • 博文数量: 299
  • 博客积分: 9955
  • 博客等级: 中将
  • 技术积分: 4177
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-27 20:59
文章分类
文章存档

2015年(1)

2012年(2)

2011年(9)

2010年(47)

2009年(108)

2008年(132)

我的朋友

分类: Mysql/postgreSQL

2009-10-02 11:47:05

第13学时复制介绍
在本学时中,你将了解SQL Sever复制的主要功能。这个功能强大的工具将会帮助你在不
同地点之间移动数据。为了掌握复制功能,你必须先了解有关术语和复制方法。
本学时的要点包括:
• 什么是复制
• 出版/订阅模型
• 复制怎样工作
• 复制代理
• 复制数据时的因素
• 分发方法
13.1 什么是复制
当今的商业世界充斥着数据,换句话说就是谁拥有了这些数据,谁就能控制商业交易。
每天,所有的商业机构都在收集有关消费者、销售、存货、事务处理和有关其他任何你能想
到的数据。现在的问题是要保证人们在需要时能够及时地得到的这些数据。举一个简单的例
子,假想你是一家公司的执行总裁,你要做出一个事关公司命运的决定,而在做出决定之前,
你需要的仅是某人的一个电话将提供的最后一条信息,而这个电话来迟了。可想而知你在等
电话时所受的煎熬。
尽管SQL Sever复制不能保证你在需要时能接到电话,但它能保证存储在SQL Sever中的
数据随要随到。复制允许你将数据移到离需要它们的客户更近的地方。
SQL Sever复制还可以为你提供其他好处。正如以前提到过的,最大的好处是数据能分发
到不同的地方。这可以帮助消除网络拥挤,提高多个服务器之间的数据访问速度,这样就减
少了负荷。例如,可以将用于报表的重要数据从事务处理繁忙的服务器中移出。另一个好处
是可以将数据从一个服务器移到可用的另一个服务器上。可以用复制为你的主数据库创建一
个镜像,这样一旦一个服务器产生了故障,用户可以几乎没有耽搁地继续工作。尽管这对于
数据可用性来说并非最佳方案,但很多人都在这么做。
为了能使复制正常运行,你应该先熟悉所有相关的术语。在下面几节,我会介绍这些重
要术语和所需的其他信息。
13.2 出版/订阅模型
SQL Sever在描述复制过程中的所有主要成员时采用了出版/订阅模型。这包括所有服务器
和要复制数据的独立部分。正如名称所示,所有这些术语都来自出版业。
13.2.1 出版服务器
出版服务器指使提供数据给其他服务器使用的服务器。出版服务器指定哪些数据要复制,
并确定自上次同步发生后哪些数据已经发生了变化。出版服务器保留被复制数据的唯一主拷
贝。复制过程体系中的其他服务器可以修改该数据,但只有出版服务器拥有主拷贝。
13.2.2 分发服务器
分发服务器是把数据从出版服务器发送到订阅服务器的服务器。一个分发服务器能够为多
个出版服务器和订阅服务器服务。这个服务器的实际作用随你所选择的复制方式的不同而不同。
分发服务器包括一个称作分发数据库的数据库。分发数据库存储在分发服务器上。这个数据库
也称为保存-转发数据库。在发送到订阅服务器之前,所有的数据修改都被存储在该数据库中。
13.2.3 订阅服务器
订阅服务器是一种通过分发服务器从出版服务器接收数据的服务器。与SQL Sever以前版本
中将复制的数据作为只读数据不同,SQL Sever 7.0中复制的数据可以修改,而这些改动不会丢失。
如果服务器进行了相应配置,这些改动能被送回到出版服务器以便重新分发给其他的服务器。
13.2.4 出版物
出版物是一组一个或多个的文章。出版物是订阅服务器能订阅的最小单元。在出版物级
也提供安全性。这种安全性是通过出版物访问清单(即PA L )形式实现的。PA L包含了所有能访
问出版服务器的登录的清单。
13.2.5 文章
文章是供复制的一组数据,它作为出版物的一部分。一篇文章可以包括表中的所有数据、
表中列的子集、表中行的子集或者是两者的组合。这些数据的子集通过一个称为过滤的处理
来创建。过滤的三种类型分别是纵向过滤、横向过滤和混合过滤。
1. 纵向过滤
如图1 3 - 1所示,纵向过滤是减少发送给客户的数据列数的过程。这可能仅仅是许多理由
1 1 4 SQL Server 7 24学时教程
下载
图13-1 纵向过滤
出版服务器
订阅服务器
中的一条。最重要的是它减少了在服务器上的开销,因为你减少了要处理的数据量。其次,
可能出于安全性的考虑,不能发送所有的数据。
例如,在一些有关人力资源的数据库里,你可能有一张包含有雇员信息的表,这些信息
有姓名、地址、电话号码和薪金。除了薪金外,所有这些信息都需要送到另一地点。纵向过
滤能为你解决这个问题。
2. 横向过滤
如图1 3 - 2所示,横向过滤是一个减少发送给订阅服务器的数据行数的过程。你可以在向
不同地区复制数据时使用这个过程。
例如,你可能有几个冷库,用以储藏生产出来的待售肉制品。每个冷库都需要有关所有可
能储藏的产品的信息。这个产品信息只能在一个地方修改,然后复制到需要这个数据的地点。
3. 混合过滤
如图1 3 - 3所示,为了进一步减少发送给客户的数据量,可能需要把纵向过滤和横向过滤
结合起来。这种过滤可用来把与某些客户站点有关的电话信息发送到那些站点去。
第1 3学时复制介绍1 1 5
下载
图13-2 横向过滤
图13-3 混合过滤
出版服务器
订阅服务器
出版服务器
订阅服务器
13.2.6 订阅
订阅服务器通过订阅出版物来从出版服务器收到数据。在建立订阅时,可以选择推式或
拉式订阅。
推式订阅是由出版服务器创建和管理的。出版服务器把出版物推到订阅服务器上,几乎
无需在订阅服务器上进行设置。使用推式订阅的好处是所有的管理都在中心位置。出版和订
阅能同时进行,而且可以同时建立许多订阅服务器。
拉式订阅由订阅服务器建立并管理。在这种情况下,订阅服务器连接在出版物服务器上,
下载订阅和任何并发的数据变化。拉式订阅的主要的优点是允许订阅服务器管理员选择他们
想要的出版物。使用拉式订阅,出版和订阅是分开的,不必由同一个用户完成。通常,在出
版物不要求很高的安全性时使用拉式订阅较好。
13.3 复制怎样工作
就其最简捷的形式而言,复制的实际过程相当简单。在出版物创建后,订阅服务器数据
库和出版服务器数据库保持同步,这样就保证了两个服务器有相似的起始点。当出版服务器
有变动时,可以由日志读者进程从事务日志中读取。该进程把事务处理信息移到分发服务器
中,由此发送给订阅服务器。这些事务处理然后被应用到订阅服务器的数据库中。
同步处理
正如前面所述,在实际的复制过程开始之前,订阅服务器的数据库必须先要和出版服务
器同步。这包括表的结构和数据。SQL Sever将自动为你完成同步过程。它将创建模式脚本,
在远程服务器上运行,并为你填入数据。这就称为自动同步。
但是有些情况下,并不想让SQL Sever自动同步数据。例如,设想一下试图自动同步一个
大于5 G B的出版物。因为所有同步操作都要通过网络进行,这可能导致严重的瓶颈。这种情
况下,你会执行手动同步。在执行之前,你要先决定数据库如何同步。
这可能是一个备份,或者甚至是一系列脚本,然后再用磁带发送给客户。这将会节约大
量的时间和网络带宽。
13.4 复制代理
称为复制代理的进程同复制的基本组成部分一起,在复制过程中负责不同工作。每个复制
过程至少包括两种不同的复制代理。它们包含快照代理、日志读者代理、分发代理、合并代理。
13.4.1 快照代理
快照代理负责准备用于出版的表和存储过程的结构及初始数据文件,在分发服务器上存储
快照,并在分发数据库中记录有关同步状态的信息。每个出版物在分发服务器中将有自己的快
照代理。快照代理在SQL Sever Agent中运行,并可以使用SQL Sever Enterprise Manager管理。
13.4.2 日志读者代理
日志读者代理负责从用于出版的数据库的事务日志中把为复制而标记的事务移到分发数
1 1 6 SQL Server 7 24学时教程
下载
据库中。每个使用事务复制的出版数据库在分发服务器中都有自己的日志读者代理。
13.4.3 分发代理
分发代理把分发数据库中的事务和快照任务发送到订阅服务器。当一个新的推式订阅建
立时,为保持同步而设置的事务和快照出版物将有它们自己独立的分发代理,运行在分发服
务器上。而那些没有设置的,则共享一个运行在分发服务器上的分发代理。用于快照或事务
出版物的拉式订阅有一个分发代理,运行在订阅服务器上。合并出版没有分发代理。它们依
靠合并代理,这点下面将要讨论。分发代理通常在SQL Sever Agent中运行,并可以使用S Q L
Sever Enterprise Manager管理。
13.4.4 合并代理
在处理合并出版时,合并代理移动和协调初始快照后发生的数据改动。每个合并出版都
有一个连接出版服务器和订阅服务器的合并代理,并且一有变化双方都会更新。在一个完全
合并过程中,该代理先从订阅服务器上载所有的改动,只要该服务器中的g e n e r a t i o n值为0或
比上次发送到出版服务器的g e n e r a t i o n值高。该代理收集改动过的行,那些没有冲突的行将应
用在出版数据库中。
冲突是出版服务器和订阅服务器都改动的行。冲突由冲突调解器来处理,它与在出版物
定义中的文章有关。然后该代理通过把所有变动的内容从出版服务器下载到订阅服务器来逆
转这个过程。推式订阅的合并代理运行在出版服务器上。而拉式订阅的合并代理运行在订阅
服务器上。快照和事务出版物不使用合并代理。
13.5 复制数据时的因素
在知道什么是复制数据和怎样复制数据后,你需要明确一些关键因素。在决定合适的分
发方法之前,你要判断每个不同的因素对于你的重要性。这些因素是数据延迟、个体独立性
和数据的一致性。
13.5.1 数据延迟
数据延迟是把更新的数据发送到订阅服务器所需要的时间。对于大多数复制方法来说,
在数据改动和订阅服务器获得更新之间有一段时间延迟是很正常的。需要考虑的一个重要事
情是,对客户来说及时得到最新的数据的重要程度。根据数据可能延迟的长短,可以使用两
种复制方法。会带来大多数数据延迟的方法是SQL Sever复制。这种复制有时被称为准实时数
据。换句话说,数据常常不是最新的,但是足够及时。另一种方法称作分布事务处理,保证
数据是最新的。这种方法依靠两阶段提交工作。为使两阶段提交有效,无论何时只要任一服
务器需做数据修改,两个服务器都必须可以使用。对于服务器和网络来说,这都是非常巨大
的开销。
13.5.2 站点独立性
站点独立性指的是每个单独的站点在操作时都能不受其他任何站点的影响。当一个站点
能够不依赖于其他站点而操作时,它是高度独立的。复制允许站点保持高度独立性,因为它
第1 3学时复制介绍1 1 7
下载
们不必一直被连接起来以持续工作。另一方面,分布式事务处理依赖于一直连接着的所有服
务器。即使有一个服务器在某一点没连上,其他的服务器都不能继续工作。
13.5.3 事务一致性
事务一致性指的是如果所有事务在一个站点上完成,那么其结果是在任何一个参与站点
上的数据都是相同的。虽然这听起来很复杂,其实不然。归根到底就是,如果数据在出版服
务器中没有变动,那么在复制过程中也不会有数据被修改。在SQL Sever中可以使用下面两层
数据一致性:
• 立即事务一致性—所有参与复制的站点在同一时刻数据相同。在SQL Sever中唯一可
实现它的方法是使用分布式事务处理。
• 延迟事务一致性—所有站点都能保证得到与出版站点某些点上相同的数据。与立即事
务一致性不同,从实际修改的产生到订阅站点的更新可能会有一些延迟。
13.5.4 数据分发方法
在你判定了可接受的数据延迟、站点独立性和事务一致性后,下一步是选择数据分发方
法。如图1 3 - 4所示,每种不同类型的分发方法都有不同程度的站点独立性和数据延迟。
不同的分发方法具有的不同级别的站点独立性和数据延迟说明如下:
• 分布式事务处理—分布式事务处理保证在任何时刻所有站点都有绝对相同的数据。
• 带更新订阅服务器的事务复制—用户可以在本地站点上修改数据,而且这些改动同时
会应用到所用的源数据库。这些修改最终复制到其他站点上。此类数据分发方法把复制
和分布式事务结合在一起。因为同时在本地站点和源数据库上进行数据更改,所以不会
1 1 8 SQL Server 7 24学时教程
下载
图13-4 每个分发方法都有
不同程度的站点独
立性和数据延迟
增加




减少
合并复制
快照复制
带更新订阅服
器的快照复制
事务复制
带更新订阅服
器的事务复制
分布式事务复制
减少增加
站点独立性
发生冲突。
• 事务复制—使用事务复制,数据只能在数据源被修改,然后再发送给订阅服务器。因
为数据只能在一地修改,所以不会发生冲突。
• 带更新订阅服务器的快照复制—这种方法很像带更新订阅服务器的事务复制。它允许
用户在本地修改数据,并且这些修改同时会应用到所用的源数据库。然后,整个修改过
的出版物会复制到所有订阅服务器。这种类型的复制比事务复制提供了更高的独立性。
• 快照复制—出版物的完全拷贝会被发送给所有订阅服务器。这其中包括修改过的和未
修改的数据。
• 合并复制—所有站点独立地修改本地数据,然后再由出版服务器修改。这种方法可能
会导致冲突,但可以解决。
13.6 分发方法
有四种分发数据的方法:快照式、事务式、合并式、分布式。你要根据你的业务需要进
行选择。每种方法都依赖于不同数量的计算机和网络资源。
13.6.1 快照复制
顾名思义,快照复制是在一瞬间及时地把出版物上所有文章制成一张“相片”,然后再把
整张“相片”发送给订阅服务器。这种方法需要很少的开销,因为它不需要跟踪该数据的任
何变化。不论变化与否,它只管复制所有数据并发送给订阅服务器。快照复制最大的缺点是
要耗用巨大的网络带宽,尤其是出版物所容纳的文章非常大时。这种复制很容易建立。在多
数情况下,当你处理一个比较小的出版物而且订阅服务器对接收的数据不进行修改时,这是一
个很理想的方法。例如对电话号码、目录信息来说,快照复制是很好的选择。
快照复制最初是作为单向复制方法设计的。换句话说,数据发送给订阅服务器后,就不
再被修改。当你需要在订阅服务器修改数据时, SQL Sever 7.0有内置的功能允许你在不丢失
的情况下进行修改。这种称作立即更新订阅服务器的功能能够在发生修改时便通过使用两阶
段提交在出版服务器上进行修改。这些修改然后被复制到其他所有的订阅服务器。
13.6.2 事务复制
事务复制是从出版数据库的事务日志处获得事务,然后再把它们应用到订阅数据库去。
因为所有的数据修改都已经存储在事务日志中,所以做这种类型复制的一半工作已经被完成
了。这就是说,尽管听起来可能会导致服务器大量的花销,实际上并不像你想象的那么严重。
这些从事务日志中读来的修改被向前送到分布服务器,然后再按同最初形成时的同样顺序发
送到订阅服务器。
使用标准的事务复制,数据只由出版服务器修改。这些修改几乎实时地按照出版服务器
上完全一样的产生顺序发送给其他站点。这样可以避免数据冲突。在这个意义上,同一时间
不能对同一数据进行多个更新,它迫使SQL Sever决定留下哪个更新。
和使用快照复制一样,很多时候你需要让事务复制出版物能支持立即更新订阅服务器。
这个过程使用两阶段提交来把事务发给出版服务器。这种设置过程只需用到出版服务器。在
订阅服务器完成这些修改并发送回出版服务器后,最终将会发送到所有其他订阅服务器上。
第1 3学时复制介绍1 1 9
下载
进行修改的订阅服务器没有完全的独立性,因为在数据被修改时出版服务器必须是可访问的,
否则根本不能进行修改。
13.6.3 合并复制
合并复制是所有复制方法中最复杂的。SQL Sever 7.0版本的这种新功能可以对服务器所
有出版物上文章的修改进行跟踪,然后与这些修改同步,因此数据库的所有拷贝都有完全相
同的数据。因为任何一个服务器都能修改数据,所为要有一些解决冲突的方案。这些方案所
基于的标准由管理员决定。在所有冲突解决后,这些修改传回到出版服务器,然后再复制给
所有的订阅服务器。
在为合并复制创建一个出版物时, SQL Sever 对数据库执行三种不同的修改。首先, S Q L
Sever 必须为要复制的每一行标记或建立一个唯一的列。这个列用于为该表的所有不同的拷贝
标记相异的行。如果表中已经有一列拥有R O W G U I D C O L属性,SQL Sever会自动使用该列作
为行的标记符。如果没有, SQL Sever会在表中增加称为R O W G U I D的列。SQL Sever还会在
该列上建立索引。
其次,SQL Sever会在表中增加触发器来跟踪表中数据发生的任何修改。触发器跟踪所有
的修改并记录在合并系统表中。触发器能在行级或列级跟踪修改,这取决于你怎样设置。在
一个表里,SQL Sever 7.0支持同类型的多个触发器,所以合并触发器不会与表中的用户自定
义触发器发生冲突。
最后, SQL Sever 在含有复制表的数据库中增加新的系统表。M S M e rg e _ c o n t e n t s和
M S M e rg e _ t o m b s t o n e表跟踪修改、插入和删除。这些表依靠R O W G U I D列跟踪哪一行确实被
修改了。
合并代理使用一个叫做M S M e rg e c o n t e n t s的特殊表来标记冲突。在这个表里,一个称为
l i n e a g e的列用来跟踪一行的所有修改历史。不管何时用户修改了行中的数据,复制过程都会
修改l i n e a g e值。此列的内容是一个位置标识符和该位置所建行的最新版本这两者的组合。由
于复制过程要把已发生的所有修改合并起来,它要检查每个位置的信息看看是否有冲突发生。
如果有冲突发生,该代理启动管理员所决定的冲突解决处理方案来解决冲突。
13.6.4 分布式事务
最后但也是最重要的是分布式事务。如前面所述,分布式事务不是真正的复制。分布式
事务的操作通过两阶段提交来实现。两阶段提交也称作2 P C,它保证一个事务要么提交到所有
服务器,要么从所有服务器上回滚。这是非常好的,因为这保证了所有服务器上的数据总是
最新的。这种数据分布方式的缺点是,在事务被提交时,只要任何一个服务器因为某种原因
不能用,这个事务就会失败。使用这种方案工作,你必须有一个高速的局域网。因为可能会
出现短暂的网络中断,在一个拥有很多服务器的大环境中,这种方案不总是有效。
13.7 课时小结
本学时介绍了复制的基本概念和能用到的不同类型的复制。这些只是复制的基础。复制
是一个功能强大的工具,它可以解决很多业务问题。在接下来的两个学时里,我将讲解复制
策略以及怎样创建和监视复制。
1 2 0 SQL Server 7 24学时教程
下载
13.8 专家答疑
问题:我能否在SQL Sever 7.0和以前的版本之间复制数据?
解答:在SQL Sever 7.0和以前的版本之间可以创建某种类型的复制。在这类情况中,你
可以创建快照复制和事务复制,但不能创建合并复制。SQL Sever以前的版本中没有支持合并
复制的技术。
问题:SQL Sever复制能帮我解决有关数据和服务器可用度的所有问题吗?
解答:虽然SQL Sever能帮助你保存所需要的数据的多份拷贝,并把它们放到你需要的位
置,但SQL Sever并不能解决所有有关数据和服务器可用度的问题。要正确解答这个问题,你
可以查看SQL Sever 7.0企业版的Windows NT Enterprise Server。依靠这两个功能强大的软件
和足够的硬件投资,你能创建一个服务器方案,它对你的用户来说可用度可以高达9 9 . 9 9%。
问题:复制需要另外的工具吗?
解答:就本身而言, SQL Sever的复制不需任何另外的工具。这种功能内置在SQL Sever
内部。但是,当实施复制时,你通常需要至少两套SQL Sever及其赖以运行的操作系统。你要
为每套SQL Sever和操作系统付费,否则将无法登录。
13.9 课外作业
这些思考题和练习题是供你加深理解用的。答案可以在附录“答案”中找到。
13.9.1 思考题
1) 什么是SQL Sever复制?
2) 什么时候可能要使用SQL Sever复制?
3) 数据分发的四种主要方法是什么?
4) 出版服务器的用途是什么?
5) 分发服务器的用途是什么?
6) 什么是出版物?
7) 文章里包含哪些内容?
13.9.2 练习题
调查你公司的情况,看看采用什么样的分发方法可适合你的公司。记住要考虑客户在修
改复制数据时的所有要求。
阅读(485) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~