对于一个地域分散的大型企业组织来说,构建具有典型的分布式计算机特征的大型企业管理信息系统时,总要解决一个很重要的问题:如何在多个不同数 据库服务器之间保证共享数据的一致性。之所以有这个重要的问题在于企业组织在不同地点对具有相同结构的本地数据库进行修改,但要保证修改后的数据库有相同 的结果,其本质就是在对本地数据库的修改体现在其他具有相同数据的远程数据库中。那么如何解决这个问题就要用到数据库的复制技术。

  SQL SERVER提供了内置的复制能力,复制组件并不是附加产品,而是核心引擎的一部分。在复制这个技术的支持下,用户可以跨局域网、广域网或因特网的不同数 据服务器上维护数据的多个拷贝,从而保证数据的一致性。
  
  复制 模型

  SQL SERVER使用出版和订阅这一术语来描述其复制活动,所谓出版,就是向其他数据库服务器(订阅者)复制数据,订阅就是从另外服务器(出版者)接收复制数 据。虽然出版和订阅的对象都是将数据复制,但出版和订阅却并不是不同角度的同一数据操作,而是体现出一定的层次性和顺序性(总是先进行出版,再进行订 阅)。SQL SERVER的复制组件有出版物与论文。出版者、订阅者、推订阅和拉订阅。
  (1)出版物和论文
论文是被复制的数据集合,一篇论 文一般就是咱们所说的表,论文是出版物的基本组成单元。出版物是论文的集合。它可以包括一个或多个论文订阅者,订阅的是出版物而不是出版物中的论文,这样 可以使订阅更为简单。
  (2)出版者
出版者是出版出版物的服务器。出 版者服务器来维护源数据库以及有关出版物的信息。使数据可用于复制。除了决定哪些数据将被复制外,出版者要检测哪些复制数据发生了变化,并将这些变化复制 到分发者的分发数据库中。
  (3) 分发者
分发者是指把从出版者传递来的复 制数据或事务等送至相应的订阅者的服务器,并负责维护分发数据库。
  (4)订阅者
订阅者是指存储复制数据的副本机 器。且接收并维护已出版的数据的服务器,订阅者也可以对出版数据进行修改,尽管订阅者可以对数据进行修改,但它仍是一个订阅者,当然订阅者也可以作为其他 订阅者的出版者。
出版者、分发者、订阅者实际上并 不一定指相互独立的服务器。它只是对SQL SERVER在复制过程中所扮演的不同角色的描述。SQL SERVER允许一台SQL SERVER服 务器可以扮演不同的角色。比如一台出版者的服务器既可出版出版物,也可以作为分发者来存储和传送快照复制和事务复制。在实际应用中,用户决定是否让一台服 务器扮演一个或多个角色。在很大程序是基于对复制系统性能的考虑,例如,为了提高分发者从分发数据库向订阅者的数据库复制出版物的效率,降低出版者服务器 的负载,用户常不允许一台服务器既扮演出版者又扮演分发者。而是让其他的服务器专站承担分发者任务,从而提高了出版者和分发者的性能。
  (5)订阅类型
推订阅和拉订阅
推订阅是指由出版者将所有发生在 出版数据库的修改复制给订阅者,而不必向订阅者发出请求,只要出版数据库发生修改,出版者就会自动把这种修改体现在订购者那 里,在对数据同步性要求比较高的场合,最好使用推订阅,拉订阅是指订阅者在经过一段时间就会向出版者要求复制出版数据库发生的变化。
 
  复制代理:

  (1)快照代理
快照代理在分发者上创建并存储快 照文件,任务是:在分发数据库中准备已发布表的架构和初始数据以及其他对象、存储快照文件并记录出版数据库和订阅服务器之间 的同步信息,快照代理运行在分发者服务器上,并与出版者相连接。每一个出版物都有自己的快照代理。与各种类型的复制一起使用。
  (2)日志阅读代理
日志读取器代理与事务性复制一起 使用。它将发布服务器上的事务日志中标记为复制的事务移至分发数据库中。使用事务性复制发布的每个数据库都有自己的日志读取器代理,该代理运行于分发服务 器上并与发布服务器连接(分发服务器与发布服务器可以是同一台计算机)。
  (3) 分发代理
分发代理与快照复制和事务性复制 一起使用。它将初始快照应用于订阅服务器,并将分发数据库中保存的事务移至订阅服务器。分发代理既可以运行于分发服务器(对于推送订阅),也可运行于订阅 服务器(对于请求订阅)。
  (4)合并代理:   
合 并代理与合并复制一起使用。它将初始快照应用于订阅服务器,并移动和协调所发生的增量数据更改。每个合并订阅都有自己的合并代理,该代理同时连接到发布服 务器和订阅服务器并对它们进行更新。合并代理既可以运行于分发服务器(对于推送订阅),也可以运行于订阅服务器(对于请求订阅)。默认情况下,合并代理将 订阅服务器上的更改上载到发布服务器,然后将发布服务器上的更改下载到订阅服务器。
  (5)队列阅读代理
队列读取器代理与包含排队更新选 项的事务性复制一起使用。该代理运行于分发服务器,并将订阅服务器上所做更改移回至发布服务器。与分发代理和合并代理不同,只有一个队列读取器代理的实例 为给定分发数据库的所有发布服务器和发布提供服务。

  复制类型:

  SQL SEVER提供了三大类复制类型:快照复制、事务复制、合并复制。可以在实际应用中使用相应的复制类型,每一种复制类型都在不同程序上实现数据的一致性。
   (1)快照复制

如其名字所言,快照复制指在某一 时刻给出版数据库中的出版数据照相,然后将数据复制到订阅者服务器。快照复制实现较为简单,其所复制的只是某一时刻数据库的瞬间数据,
快照复制是将整个出版物传送给订 阅者,就是在某一时刻将出版数据进行一次“照相”,生成一个描述出版数据库中数据的当前状态的一个文件,然后在相应的时间将 其复制到订阅都的数据库上,快照复制并不是不停的监视出版数据库中发生的变化情况,它是对出版数据库进行一次扫描,把所有出版数据中的数据从源数据库送至 目标数据库,而不仅仅是变化的数据。如果数据量很大,那么要复制的数据就很多。因此对网络资源要求很高,不仅要有较快的传输速度,而且要保证传输的可靠 性。
快照复制是最为简单的一种复制类 型,能够在出版者和订阅者之间保证数据的一致性。快照复制通常使用在以下场合:
        在一定时间内出现大量的更 改的操作,但数据总量不大,变化周期较长。
  (2)事务复制
快照复制是将整个数据集发送给订 阅服务器,由于体积大而造成复制周期较长,会形成复制滞后问题。那么事务复制使用事务日志来生成将复制到订阅服务器的事务,因为它只复制事务也就是变化, 所以滞后也比快照复制低得多。
事务复制有三个组件:
快照代理,它生成架构,数据以及 跟踪复制过程所需的数据;
分发代理:它分发快照和随后的命 令;
日志读取器代理:它读取发布数据 的事务日志。
在事务复制中,当出版数据库发生 变化时,这种变化就会立即传递给订阅者。并在较短时间内完成(几秒),而不是像快照复制那样要经过很长一段时间间隔。因此, 事务复制是一种接近实时地从源到目标分发数据的方法。由于某种原因事务复制的频率较高。所以必须保证在订阅者与出版者之间要有可靠的网络连接。
  (3) 合并复制
合并复制是为移动用户设计的,可 以在发布服务器或是订阅服务器处执行修改,在合并代理运行时,这些修改将同步,多用于发布服务器与订阅服务都修改数据的情况下。工作原理如下:在要复制的 每个表上实现触发器,并使用包含GUID列唯一标识要复制的表中的每一行。对其中的任何一个表进行修改时,都会将更改将记录一个数据表中,在合并代理运行 时,它收集数据表中的GUID,这些GUID指出了在发布服务器和订阅服务器处修改过的行。对于只在发布服务器或是订阅端修改的数据则直接进行相应操作, 如INSERT,UPDATE,DELETE,如果双方都有GUID则按照用户指定的方式解决冲突,默认发布服务器伏先。

  配置复制:
  无论是快照复制,事务性复制还是合并复 制,创建复制都要经过以下几个步骤:
  1.创建发布服务器。选择要发布的服务器。如果有条件的,也可以分发服务器,在这里我们就将发布服务器和分发服务器设置在同一台计算 机上。
  2.不论是发布服务器还是订阅服务器必须开启代理服务。
  3.创建一个发布。即将需要的数据库及对象发布出来。
  4.选择一个适合自己的发布类型。
  5.设置复制代理及安全,即指定可以运行代理的用户帐号。
  创建可以使用此发布的订阅服务器。
  现在我们的实验基于下图:
  我们将SERVER1上的DB1数据库 复制到SERVE2服务器上 
  具体操作如下 :
  SERVER1上操作:实例名---- 复制----本地发布-----新建发布
  我们在这里选择将发布服务器本身作为自 己的的分发服务器。下面指定一个快照文件夹,用于存放快照信息,并依次选择发布数据库DB1
  接下来指定复制类型;我们先进行快照复 制

  几种发布类型前面已做讲解,具有可更新 订阅的事务发布属于事务发布的一种。

  在该对话框里可以指定用于在分 发服务器上运行快照代理的WINDOWS用户。WINDOWS用户又称为进程帐户,因为代理进程是在该帐户下运行的。

 
  此时发布成功完成,如果要修改发布属 性,可以在复制-----本地发布----看到该发布

  下面就可以进行订阅了,订阅可以在发布 服务器上进行,也可以在订阅服务器上进行。
  在订阅服务器上订阅:
  SERVER2上操作:实例名 -----复制--本地订阅----新建订阅
  在发布服务器上订阅:实例名----- 复制--本地发布------右击属性---选择新建订阅
  接下来的操作双方是一样的:

  选择发布服务器,然后指定复制 类型:我们选择是推复制   并且给SERVER2选择数据库

 
  弹出如图所示的分发代理安全性对话框。 在该对话框里可以设置同步订阅时运行分发代理进程的帐号:

  对于推送订阅来说,分发代理在 分发服务器上运行。对于请求订阅来说,分发代理在订阅服务器上运行。在本例使用的是推送订阅,因此应该使用发布服务器的用户
  连接到分发服务器:对于推送订阅来说, 只能通过模拟进程帐户来与分发服务器连接。
  对于请求订阅来说,可以使用模拟帐户或 是SQL SERVER用户来连接。
  连接到订阅服务器:对于推送订阅来说, 可以通过模拟进程或是SQL SERVER用户来连接。
  对于请求订阅来说,只能使用模拟帐户来 连接。
  测试:
  此时我们就可以看到发布服务器中的YG 表已经复制到了订阅服务器中。
  我们在SERVER1的DB1数据库中 的YG表中插入一条记录。
  至于事务复制和合并复制,过程大致相同 只是要注意表的主键和GUID问题,在此不再累述,如有疑问或不同意见请批评指定
                                
                                                                      
 
  常见错误;
  1.代理服务一定要事先运行
   2.如果是GHOST的系统,会发生计算机名和SQL SERVER中所能识别的服务器名称不一致的情况,则请使用以下的代码进行同步更新,
 
  if  serverproperty('servername')  <>  @@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 核心服务和代理服务。

SQL Server 2005 数据库复制(转载)的更多相关文章

  1. 如何创建和还原SQL Server 2005数据库?

    在还原SQL Server 2005数据库文件之前,建议先把要还原的数据库文件复制粘贴到某个盘的根目录下,这样便于一会儿找到相关的文件,比如C盘. 先打开SQL Server 2005的Microso ...

  2. 通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...

  3. 烂泥:SQL Server 2005数据库备份与恢复

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 服务器的迁移,因为业务使用的数据库是SQL Server 2005,所以就要首先对数据库进行备份. 备份可以分为手动备份和自动备份,我们先来介绍手动备份 ...

  4. SQL Server 2005同步复制

    原文:SQL Server 2005同步复制 以下实现复制步骤(以快照复制为例) 运行平台SQL SERVER 2005 一.准备工作: 1.建立一个 WINDOWS 用户,设置为管理员权限,并设置密 ...

  5. 【转】通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数 ...

  6. Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码)

    Linux下使用FreeTDS访问MS SQL Server 2005数据库(包含C测试源码) http://blog.csdn.net/helonsy/article/details/7207497 ...

  7. SQL Server 2005数据库定期备份(非常详细)与 SQL Server 2005数据库备份定期清理

     SQL Server 2005数据库定期备份 分类: SQL Server 20052011-01-06 16:25 3320人阅读 评论(1) 收藏 举报 sql server数据库sqlserv ...

  8. 烂泥:SQL Server 2005数据库安装

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 为了能更好的利用服务器,所以打算把该业务进行迁移.因为该业务比较特殊,需要服务器上有相应的硬件支持,所以打算直接升级该服务器目前的操作系统.目前公司服务 ...

  9. 修改SQL Server 2005 数据库文件名字

    对于SQLServer 2005的数据库文件名字的修改.不多说,见图: 对于数据库名的更改直接选中要修改的数据库,F2,你懂的,不懂的可以去屎了.....0.0 下面要修改数据库的文件名 原理就是利用 ...

随机推荐

  1. 一个按钮,如果5分钟内点击再次点击给予提示操作频繁,在JS里可以这样写

    很简单. 但是,如果你要离开这个页面再进来, 就没办法限制了. 除非用cookie 储存状态 给个示例 var isLock = flase; //定义全局变量 按钮点击事件: if(isLock){ ...

  2. [MySQL] 按日期进行统计(前一天、本周、某一天)

    在mysql数据库中,常常会遇到统计当天的内容.例如,在user表中,日期字段为:log_time统计当天 sql语句为: select * from user where date(log_time ...

  3. [CareerCup] 5.6 Swap Odd and Even Bits 交换奇偶位

    5.6 Write a program to swap odd and even bits in an integer with as few instructions as possible (e. ...

  4. [CareerCup] 9.9 Eight Queens 八皇后问题

    9.9 Write an algorithm to print all ways of arranging eight queens on an 8x8 chess board so that non ...

  5. LeetCode 笔记22 Distinct Subsequences 动态规划需要冷静

    Distinct Subsequences Given a string S and a string T, count the number of distinct subsequences of  ...

  6. WPF打印原理,自定义打印

    一.基础知识 1.System.Printing命名空间 我们可以先看一下System.Printing命名空间,东西其实很多,功能也非常强大,可以说能够控制打印的每一个细节,曾经对PrintDial ...

  7. linux实践——ELF分析

    一.ELF的部分结构定义 elf header(定义在/usr/include/elf.h)//64位的系统ELF文件头包括以下两个部分 #define EI_NIDENT (16) typedef ...

  8. 20145303 20145339 《信息安全系统设计基础》 实验五 简单嵌入式WEB服务器实验

    20145303 20145339 <信息安全系统设计基础> 实验五 简单嵌入式WEB服务器实验 实验目的与要求 1.掌握在ARM开发板实现一个简单WEB服务器的过程 2.学习在ARM开发 ...

  9. 《TCP/IP详解卷1:协议》第5章 RARP:逆地址解析协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  10. 18.C#扩展方法(十章10.1-10.2)

    今天的话题,我们来聊下扩展方法,自己也真心感叹自己的文笔,那叫一个惨啊,回顾写的文章,看着看着也忘记当时是怀着什么心态写的,哈哈,现代人真心是太随性了,可能也是太冷漠了,接着写的吧,总是会有帮助,也会 ...