第一篇 Replication:复制简介

本篇文章是SQL Server Replication系列的第一篇,详细内容请参考原文



复制这个词来自拉丁语中的"replicare",意味着重复。Replication describes the process of reproducing or duplicating.
Replication in SQL Server does exactly that;it reproduces or duplicates data.任何时候,你需要创建一个数据的副本,或重现该数据的变化,复制可以使用。副本可以在同一个数据库中创建,或者在一台不同的服务器上的远程位置创建。
副本可以连续不断地与源数据保持同步,或在预定的时间间隔内进行同步。复制可以是单向同步或双向同步。Replication can even be used to keep several datasets in sync with each other.
在第一篇,我会告诉你基本的复制组件,并描述他们如何工作,让你复制你的数据和数据的变化。我们还将详细介绍建立一个简单的复制示例。
复制组件
SQL Server复制包含三大组件:发布服务器、分发服务器和订阅服务器。这些组件作用于发布和订阅所定义的文章。
文章
For each SQL Server object that should be replicated, a replication article needs to be defined.每一个文章对应一个SQL Server对象,或一个对象的子集。经常用于复制的对象有表、视图和存储过程。如果需要复制对象的完整列表,可以在Books Online中查找。文章的属性决定了该文章是否包含整个对象,或者只是对象的子集。由于这些限制,可以在单个对象上创建多个文章。
发布
逻辑上属于一组的文章可以组合成一个发布。The publication has options defined that apply to all the articles in that publication.发布的一个主要选项是选择要使用的复制类型。
发布服务器
复制中让发布可用的数据库实例就是发布服务器。发布服务器监控所有文章的变更,并让所有变更信息可用于分发服务器。
分发服务器
分发服务器是用于跟踪所有订阅服务器和所有发布变更的数据库实例,确保每个订阅服务器得到每个变更的通知。大多数的变更被跟踪到一个分发数据库。分发服务器可以是一个单独的SQL Server实例,但往往分布服务运行在发布服务器上。
订阅服务器
通过订阅接收所有发布信息的数据库实例。
订阅
订阅是发布的对应内容。订阅定义哪个服务器(订阅服务器)将接收在发布中的更新。每一个订阅在一个发布和一个订阅服务器之间创建一个链接。订阅有两种类型:推送订阅和请求订阅。在推送订阅中,分发服务器直接更新订阅服务器数据库中的数据。在请求订阅中,订阅服务器定时请求分发服务器,如果出现任何新的更改,则自己更新数据。
复制类型
SQL Server中主要有三大复制类型:快照复制、合并复制和事务复制
快照复制
快照复制每次运行时会对复制的对象和数据创建一个完整的副本。它使用SQL Server‘s BCP将每个表的内容写到快照文件夹。快照文件夹是在配置分发时创建的一个共享文件夹。Each participant in a replication setup needs to have access to the snapshot folder.
每一次快照复制运行,一切都是从零开始重新复制,因此它具有很高的带宽和存储要求。所有其他类型的复制(默认情况下)只有在初始化设置时才使用一个复制快照,以同步所有订阅服务器。
事务复制
事务复制工作于事务的基础之上。Every committed transaction gets scanned for changes applied to replication articles.变更扫描是由日志读取代理完成,它读取发布数据库的事务日志。如果有更改影响已发布对象的话,这些更改将记录在分发服务器上的分发数据库。从那里,他们使用他们的方式应用到订阅服务器。
事务复制允许几乎实时同步,并在发布服务器中只留下一个小印记。虽然有几个选项,允许双向数据传递,事务复制最初是设计为单向同步的。
合并复制
合并复制的设计从一开始就允许对发布服务器以及订阅服务器的数据进行修改。合并复制还允许断开连接的情况/场景,订阅服务器在白天可能无法连接。那个订阅服务器可以在晚上重新连接上后同步。如果一行记录同一时间在两个不同地方被更新,合并复制有几个内置的选项来解决这类冲突。
配置事务复制
为了创建复制,需要配置分发服务器、发布服务器和订阅服务器。复制可以使用T-SQL脚本创建和控制。然后,相关的存储过程数量超过一百多个。因此我们还是使用SSMS图形界面来操作。下面的这个例子是在同一台服务器的同一个实例(SQL2008R2)下实现的。
配置分发
分发服务器是事务复制的核心。在配置其他组件时需要它可用,因此首先要配置分发服务器。
打开SSMS连接到包含复制的源数据库的实例。分发服务器可以在源数据库实例上,很多情况下发布服务器和分发服务器在同一台机器上,本例也是这样。
在你连接到实例后,右击复制文件夹,选择"配置分发…"如图1.1所示:

图1.1 配置分发
配置分发向导显示起始页

图1.2 配置分发向导
在下一个页面(图1.3)你要选择使用此服务器作为自己的分发服务器或选择其他服务器作为分发服务器。分发服务运行的机器还会包含有分发数据库。接受默认设置,也就是使用此服务器充当自己的分发服务器,然后点击下一步(补充:如果代理服务不是自动启动,下一步会提示是否将SQL Server代理服务配置为自动启动)。

图1.3 选择分发服务器
我们来到图1.4对话框,询问快照文件夹的存储位置

图1.4 快照文件夹
快照文件夹可以是你机器或网络的任何位置。在分发服务器上为它创建一个网络共享是有意义的。本例中使用"\\USER-67NP5R8LGK\repldata"
创建快照文件夹需要授予合适的权限。目前我们不会深入到细节,给"Authenticated Users"对文件夹有写的权限(图1.5),给"Everyone"对共享有读的权限(图1.6)。更多关于这一块的安全内容会在这一系列的后面提到。

图1.5 快照文件夹授权访问

图1.6 快照共享文件夹授权访问
在你设置好共享文件夹并将网络路径键入到向导输入框,点击下一步到分发数据库

图1.7 分发数据库
在这里你可以设置分发数据库的名称,以及它的数据文件与日志文件的存储位置。保留默认设置点击下一步来到发布服务器页面

图1.8 准备发布服务器
在发布服务器页面,你准备可能的发布服务器能够使用此分发服务器。我们将配置发布服务器在同一个实例上,因此保留默认设置点击下一步

图1.9 向导操作
最后一个问题是:在向导结束时配置分发还是生成包含配置分发的步骤的脚本文件。保留默认设置点击下一步。
现在你会看到如1.10所示的将会执行的一系列操作。点击完成开启进程

图1.10 向导总结
最后,显示如图1.11所示的配置成功信息

图1.11 执行状态
新建发布
为了创建一个发布,我们首先需要有一个数据库包含一张表用于发布。执行代码1.1创建发布用的测试数据库。

USE MASTER;
GO
EXECUTE AS LOGIN = ‘SA‘;
GO
CREATE DATABASE ReplA;
GO
USE ReplA;
GO
IF OBJECT_ID(‘dbo.Test‘) IS NOT NULL DROP TABLE dbo.Test;
GO
CREATE TABLE dbo.Test(
  Id INT IDENTITY(1,1) PRIMARY KEY,
  Data INT CONSTRAINT Test_Data_Dflt DEFAULT CHECKSUM(NEWID())
);
GO
INSERT INTO dbo.Test DEFAULT VALUES;
GO 1000
USE MASTER;
GO
REVERT;
GO

代码1.1 创建发布所用的测试数据库
在SSMS对象资源管理器,打开复制文件夹,右击"本地发布",选择"新建发布"(图1.12)

图1.12 新建发布
出现图1.13所示的新建发布向导欢迎页

图1.13 新建发布向导
点击下一步,在发布数据库(图1.14)中选择刚才创建的ReplA然后点击下一步。发布类型(图1.15)选择事务复制然后点击下一步

图1.14 选择发布数据库

图1.15 发布类型
现在你可以选择这个发布的文章(图1.16)。勾选dbo.Test表然后点击下一步来到筛选表行对话框(图1.17)。筛选是一个高级主题将会在后面章节讲述,因此现在不需要做任何选择只需点击下一步

图1.16 文章(项目)

图1.17 行筛选
接下来的三个页面是处理快照代理的。第一页面(图1.18)选择"立即创建快照"然后点击下一步。在代理安全性页面(图1.19)点击安全设置按钮,然后选择"在SQL Server代理服务帐户下运行"(图1.20)

图1.18 快照计划

图1.19 代理安全性

图1.20 选择帐户
点击确定然后在代理安全性页面点击下一步。这会带到向导操作页面(图1.21)选择创建发布,点击下一步来到总结页面(图1.22)

图1.21 向导操作

图1.22 向导总结
这里你需要为发布设定一个名称。键入"MyFirstPublication",然后点击完成。最后,显示如图1.23所示的配置成功信息。

图1.23 执行状态
新建订阅
大多数情况下,订阅服务器与发布服务器是不同的机器,但是也有你想让它们在相同的实例的场景。为了让这个例子简单我们使用相同的实例。使用代码1.2创建ReplB数据库

USE MASTER;
GO
EXECUTE AS LOGIN = ‘SA‘;
GO
CREATE DATABASE ReplB;
GO
REVERT;
GO

代码1.2 创建目标数据库
在SSMS对象资源管理器,打开复制文件夹,右击"本地订阅",选择"新建订阅"(图1.24)

图1.24 选择新建订阅
出现图1.25所示的新建订阅向导欢迎页,点击下一步

图1.25 新建订阅向导
在发布页面(图1.26)选择刚创建的发布,点击下一步。"分发代理位置"(图1.27)让你选择推送订阅还是请求订阅。保留默认设置到订阅服务器页面(图1.28)

图1.26 选择发布

图1.27 推送/请求订阅

图1.28 订阅服务器
这里你需要选择订阅服务器和订阅数据库。
下一个页面设置"分发代理安全性"(图1.29)

图1.29 分发代理安全性
点击右侧的省略号按钮,选择"在SQL Server代理服务帐户下运行"(图1.30)

图1.30 选择帐户
点击确定,然后下一步到同步计划(图1.31)。代理计划选择连续运行。下一步到初始化订阅(图1.32)。保留默认设置,立即初始化,点击下一步到向导操作(图1.33)

图1.31 同步计划

图1.32 初始化

图1.33 向导操作
和之前一样,保留默认设置(创建订阅)然后点击下一步来到总结页面(图1.34)——将会执行的系列操作。点击完成启动进程,然后等待绿色成功标记出现(图1.35)

图1.34 向导总结

图1.35 执行状态
代码1.1在数据库ReplA下创建表dbo.Test,并插入1000行记录。在初始化快照传送到订阅服务器后,你将会看到在数据库ReplB下同样有表dbo.Test,并且有1000行记录。在你配置完成后你可以执行代码1.3来验证复制把所有的数据推送到订阅服务器。你可以自己运行其他测试脚本,你可以插入、更新ReplA.dbo.Test然后观察ReplB.dbo.Test也出现同样的变更。

SELECT TOP(20) A.Id AS [ReplA.Id],A.Data AS [ReplA.Data],B.Id AS [ReplB.Id],B.Data AS [ReplB.Data]
FROM ReplA.dbo.Test A
FULL OUTER JOIN ReplB.dbo.Test B
ON A.Id = B.Id
ORDER BY A.Id DESC

代码1.3 比较发布与订阅
总结
Objects in a database on a SQL Server instance referred to as the publisher that are marked for replication are called articles.Articles are grouped together into publications. 订阅服务器通过订阅获取发生在文章上的更新。数据流经分发服务器上的分发数据库。发布服务器、分发服务器和订阅服务器可以是同一个实例或相同/不同的机器上的单独的实例。源和目标数据库可以是相同的(如果发布服务器和订阅服务器是相同的SQL Server实例),但分发数据库必须是分开的。

时间: 2024-08-04 21:16:37

第一篇 Replication:复制简介的相关文章

shell之路【第一篇】shell简介与入门

shell简介 1.Shell 诞生于 Unix,Unix的第一个脚本语言,是与 Unix/Linux 交互的工具,单独地学习 Shell 是没有意义的,shell使用的熟练程度反映了用户对Unix/Linux使用的熟练程度.2.Shell需要依赖其他程序才能完成大部分的工作,这或许是它的缺陷,但它不容置疑的长处是:简洁的脚本语言标记方式,而且比C语言编写的程序执行更快.更有效率. 3.Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程

Python 第一篇:python简介和入门

一.python简介 1.python下载地址:https://www.python.org/downloads/ Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者. Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.数值计算和

Python学习之路【第一篇】-Python简介和基础入门

1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是一种开发语言,而且已经进阶到主流的二十多种开发语言的top 5(数据源自最新的TIOBE排行榜). 来头不小啊!二十多种主流的开发语言,我该从哪一个开始呢?人生苦短,let‘s python! 1.2 Python的由来和发展趋势 Python的前世源自鼻祖“龟叔”.1989年,吉多·范罗苏姆(Gu

第一篇:STL简介

写在前面的话:在网上找了好多都没有找到合适的STL资料,无奈只能看英文的,可是英文水平着实太搓,翻译下来自己都感觉不好意思,所以挂上来让大家指正,希望多多批评! 标准模版库介绍(STL) 标准模版库,或者STL,是一种C++容器类库,算法和迭代器:它提供很多种计算机科学的基础算法和数据结构.STL是一种一般的库,意味着它的组件有强烈的参数化,几乎每一个STL的组件都是一个模板.你应该在你使用STL之前理解模板是如何在C++中工作的. 容器和算法 和很多类库一样,STL包括容器类,这些类库目的是包

python全栈开发【第一篇】Python简介以及入门

一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写Python语言的编译器.Python这个名字,来自Guido所挚爱的电视剧Monty Python's Flying Circus.他希望这个新的叫做Python的语言,能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言. 最新的TIOBE排行榜,Python赶超PHP占据第4, Python崇尚优美.清晰.简单,是一个优秀并广泛使用

Flask 【第一篇】Flask简介

一.Flask介绍(轻量级的框架,非常快速的就能把程序搭建起来) Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器. "微&

第一篇:Django简介

动静态网页 静态网页:数据是写死的,不会变化,除非直接修改html文件 动态网页:数据是动态获取的,例如获取当前时间,或者从数据库中获取数据,当数据库中的数据被修改后,会将被修改的数据动态展示到网页中. jinja2模块 提供了一个可以在html页面上书写类似于python后端的代码 来操作数据(模板语法) 安装:pip3 install jinja2 flask框架模板语法使用的就是jinja2模块,所以你只要下了flask框架 就会自动下载jinja2 模板语法是在后端实现的,前端不识别.

python第一篇

python第一篇 1.python简介 python是一门简单易学而且功能强大的编程语言,它有高效的内置数据结构,并且能够用简洁的语法进行面向对象编程.python简洁的语法和良好的编译解释性,使得它能够成为大多数领域的使用语言,如web开发,科学运算,人工智能,系统运维,金融分析,图形GUI等,很多领域都可以看到python的影子.既然python这么厉害,那为什么不学起来呢?come body!  life is short ,you need python! 2.基本数据类型 首先介绍的

第六篇 Replication:合并复制-发布

本篇文章是SQL Server Replication系列的第六篇,详细内容请参考原文. 合并复制,类似于事务复制,包括一个发布服务器,一个分发服务器和一个或多个订阅服务器.每一个发布服务器上可以定义多个发布.你也可以同时在同一台发布服务器上定义合并发布.事务发布和快照发布.同事务复制,每一个发布所包含的项目需要是单一数据库中的对象.不同的发布可以定义在不同的数据库上.一个项目可以被多个发布使用.All publications on a publisher, independent of th