原文:复制(1)——SQLServer 复制简介

前言:

  SQLServer的复制技术最少从SQLServer2000时代已经出现,当初是为了分布式计算,不是为了高可用。但是到了今天,复制也成为了一种高可用技术,并且被广泛使用。很多问题都通过复制得以解决。

复制组件:

  复制说白了就是一种发布/订阅模式,但是这种模式并不容易理解。下面介绍一下复制技术的一些概念。提醒一下,这里的复制在英文中不是COPY,而是Replication。它包含三个组件:发布者、分发者和订阅者。三者缺一不可,并且均以在发布和订阅中定义的项目为操作单元。

  • 项目(Article):是用于复制中的可配置的最小操作单元,它可以是一个单独的SQL Server对象,也可以是一个对象中的一个自己。这些对象通常是表、视图、存储过程等。还可以是表中的部分行或者列的集合。在非严格环境下,可以把多个对象定义为一个项目来发布和订阅。
  • 发布(Publication):注意这里是名词,是一组项目的逻辑集合,每个发布可以包含一个或多个项目。发布中的配置项会影响它包含的所有项目,通过这种方式,可以减少管理对象所带来的影响。其中最重要的配置项就是复制类型。
  • 发布者(Publisher):运行发布的实例,发布者监控所有项目的变更,并且告知这些信息给分发者。
  • 分发者(Distributor):是一个跟踪所有订阅和发布活动变更的实例,在复制过程中充当中间人,绝大部分的变更会存储在一个分发数据库(存在于系统数据库目录下,库名为distribution),可以是单独的实例,也可以运行在订阅服务器或者发布服务器上,但是通常会运行在发布者所在的机器上。
  • 订阅者(Subscriber):同样是一个实例,用于通过分发者,接收所有发布者传过来的信息。
  • 订阅(Subscription):与发布配对,用于决定哪个服务器(订阅者)接收从发布中传输过来的信息。每个订阅都会创建一个发布者和订阅者之间的连接。复制技术存在两种订阅方式,推送(push )和提取(pull)。对于推送订阅,分发者直接在订阅数据库更新数据,对于提取订阅,订阅者会周期性询问分发者是否有新变更可用,如果有,就会自行更新自己的数据。

图中上半部分是分发者和发布者均在一个实例上的情况,下半部分是三者都分开实例。

复制类型:

  粗略来说,SQLServer有三种主要的复制类型:快照复制、合并复制和事务复制。这里先简单介绍,后续会详细并演示每一种类型。

快照复制:

  每次运行时,会创建被发布对象的完整副本及其数据,并使用SQLServer的BCP工具把每个表的内容写入到快照文件夹中。这类快照文件夹是由分发者创建的共享文件夹。复制过程中的所有参与者都必须能够访问快照文件夹。

  每次快照复制开始运行后,分发者会从发布中抓取已配置的发布项的当前快照,并传送给订阅者,然后应用到订阅数据库中,当应用新快照时,订阅数据库上的项目会被删除并按新快照的内容重建,这个过程只会在每次快照复制启动时执行一次,发布和订阅端之间没有持续的数据流,并且这个过程是高带宽和存储开销的操作。

  默认情况下,其他类型的复制会在初始化时通过分发者,通过快照来同步所有的订阅项。这种类型的复制最适合用于相对静态的数据环境。

事务复制:

  基于事务的一种复制类型,每个在发布项中的已提交的事务都会被扫描,并通过分发者传输到订阅端。这个扫描操作是由日志读取器代理(log reader agent)通过读取发布数据库中的事务日志完成。如果已发布项中有修改,会把修改记录在分发者的分发数据库中。然后从分发数据库上,按照当前的订阅类型,应用到订阅者中。

  事务复制可以接近实时同步,并只占用少量的发布者空间。同时,这种类型的复制可以配置成数据双向移动,但是事务复制的最初设计是仅仅用于单向的。

合并复制:

  最初的设计是用于允许修改发生在发布者和订阅者上。同时,合并复制在订阅者不能持续连到发布者,可能隔天连一次这种情景下也很有用。这种情景下,可以每天晚上同步,但是当一个数据被同时来自于不同发布者的数据所修改时,就会产生冲突。可以通过一些配置来解决。

复制(1)——SQLServer 复制简介的更多相关文章

  1. SQLSERVER复制的要点

    SQLSERVER复制的要点 在论坛里经常有人问:SQLSERVER复制出问题了!!SQLSERVER复制不运行了!!SQLSERVER复制遇到阻塞了!! 然后最后来一句:“怎麽办?????????? ...

  2. SQLServer复制(二)--事务代理作业

    之前的一篇已经介绍了如何配置复制,介绍了发布者.分发者和订阅者以及事务日志运行的简单关系.其中提到了复制代理,我们这篇将详细介绍复制代理,它是什么?在事务复制的步骤中起到了什么作用? 代理和工作 首先 ...

  3. SQLSERVER复制优化之一《改变包大小》

    SQLSERVER复制优化之一<改变包大小> 自从搭了复制之后以为可以安枕无忧了,谁不知问题接踵而来 这次遇到的问题是丢包,不知道情况的读者可以先看一下我之前写的一篇<SQLSERV ...

  4. SQL Server复制入门(一)----复制简介

    简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护 ...

  5. SQL Server复制入门(一)----复制简介【转】

    SQL Server复制入门(一)----复制简介 简介 SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是 ...

  6. SQLSERVER复制优化之一《减少包大小》

    原文:SQLSERVER复制优化之一<减少包大小> SQLSERVER复制优化之一<减少包大小> 自从搭了复制之后以为可以安枕无忧了,谁不知问题接踵而来 这次遇到的问题是丢包, ...

  7. "SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名"转

     "SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名" 2014-06-12 12:01:10 最近在学习SQL SERVER的高级复制技术的时候 ...

  8. sqlserver 复制表结构(可以含有数据 或 只要表结构)

    sqlserver 复制表结构(可以含有数据 或 只要表结构) SELECT * INTO bb FROM aa(NOLOCK) WHERE 1=0

  9. SQL Server复制入门(一)----复制简介 (转载)

    简介SQL Server中的复制(Replication)是SQL Server高可用性的核心功能之一,在我看来,复制指的并不仅仅是一项技术,而是一些列技术的集合,包括从存储转发数据到同步数据到维护数 ...

随机推荐

  1. LVS+Keepalived实现高可用负载均衡(转)

    LVS+Keepalived实现高可用负载均衡   一.原理         1.概要介绍         如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具 ...

  2. linux开机启动服务和chkconfig使用方法(转)

    每个被chkconfig 管理的服务需要在对应的/etc/rc.d/init.d 下的脚本加上两行或者更多行的注释. 第一行告诉 chkconfig 缺省启动的运行级以及启动和停止的优先级.如果某服务 ...

  3. 大规模集群管理工具Borg

    Google的大规模集群管理工具Borg 概述 Google的Borg系统是一个集群管理工具,在它上面运行着成千上万的job,这些job来自许许多多不同的应用,并且跨越多个集群,而每个集群又由大量的机 ...

  4. POJ 2182 Lost Cows(牛排序,线段树)

    Language: Default Lost Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9207   Acce ...

  5. C 一个字符串有三段,第一段原样输出,第二段为要输出字符串的长度,第三段为依据第二段长度补齐第一段

    C 一个字符串有三段,第一段原样输出.第二段为要输出字符串的长度,第三段为依据第二段长度补齐第一段 比如:输入abc 11 12.输出abc12121212 #include<stdio.h&g ...

  6. meta标签详解:源http://blog.csdn.net/kongjiea/article/details/17092413

    一.大众机型常用meta标签name的设置 1.name之viewport <meta name="viewport" content=""> 说明 ...

  7. Qt 3D研究(九):尝试第二边缘检测方法

    Qt 3D研究(九):尝试第二边缘检测方法 三维应用程序,通过FBO.将3D图像渲染成纹理,然后对渲染成的纹理进行图像处理,终于显示在屏幕上的.是风格化后的图案.上一次我使用了一种普通的图像处理方法: ...

  8. MySQL基金会-基本数据库操作

    1. 删除数据库 DROP DATABASE 数据库名; mysql> drop database test; 即删除数据库模式 2 .创建数据库 create DATABASE 数据库名; m ...

  9. Add/Remove listview web part in publish site via powershell

    1. Here is the code: Add WebPart in Publish Site Example : AddWebPartPublish http://localhost  " ...

  10. 排序算法c语言描述---冒泡排序

    排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等排序进行分析. 文章规划: 一.通过自己对排序算法本身的理解,对每个方法写个小测试程序. 具体思路分析 ...