热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLServer复制的阶梯:级别1SQLServer复制介绍

本文章转载于StairwaytoSQLServerReplication:Level1-IntroductiontoSQLServerReplicationBy Sebastian

本文章转Stairway to SQL Server Replication: Level 1 - Introduction to SQL Server Replication

By Sebastian Meine, 2012/12/26

系列

本文是Stairway系列文章的一部分:Stairway to SQL Server复制

SQL Replication可以解决运行数据库驱动应用程序中的许多问题。发布/订阅者模型并不完全容易理解,需要考虑脚本编写和监控复制系统的复杂性。最后,这里是一系列文章,这些文章致力于为所有类型的SQL Server复制生成一种无术语的方法。

级别1SQL Server复制介绍

主要入口:rep-li-ca-tion

发音:瑞皮凯迅

函数:名词

日期:14世纪

单词replication来自拉丁单词replicare,意思是重复。复制描述了复制或复制的过程(www.merriam-webster.com)。

SQL Server中的复制就是这样;它复制或复制数据。任何时候您需要创建数据的副本,或者复制对该数据的更改,都可以使用复制。可以在同一个数据库中或在单独的服务器上的远程位置创建该副本。

复制可以与源数据连续保持同步,或者以预定的时间间隔进行同步。单向同步以及双向同步是可能的。复制甚至可以用于保持多个数据集彼此同步。

在第一层中,我将介绍基本的复制组件,并描述它们如何一起工作,以允许您复制数据和数据更改。我们还将查看设置简单复制场景的详细示例。

复制组件

SQL Server复制由三个组件组成:发布者、分发者和订阅者。这些组件作用于发布和订阅中定义的文章。

文章

对于应该复制的每个SQL Server对象,都需要定义一个复制文章。每篇文章对应于单个SQL Server对象或对象的子集。最常被复制的对象是表、视图和存储过程。有关可复制的对象的完整列表,请参阅联机图书中发布数据和数据库对象。文章的属性确定文章是否包含整个对象,或者对象的过滤子集是否构成复制的文章。通过某些限制,可以在单个对象上创建多个条目。

出版

逻辑上属于一起的一组文章可以组合成一个发布。该发布定义了适用于该发布中所有文章的选项。发布定义的主要选项是要使用的复制类型。

发布服务器

使发布可用于复制的SQL Server实例称为发布者。

发布者监视所有文章以查找更改,并向分发者提供关于这些更改的信息。

经销商

分发者是SQL Server实例,它跟踪所有订阅者和所有已发布的更改,并确保每个订阅者得到每个更改的通知。大多数更改都在分发数据库中跟踪。分发服务器可以是一个单独的SQL Server实例,但是分发服务通常与发布服务器在同一台机器上运行。

用户

订阅者是通过订阅接收所有已发布信息的SQL Server实例。

订阅

订阅是发布的对应部分。订阅定义哪个服务器(订阅者)将接收发布中的更新。每个订阅创建一个发布和一个订阅者之间的链接。订阅有两种类型:推送订阅和拉送订阅。在推送订阅中,分发服务器直接更新订阅者数据库中的数据。在拉式订阅中,订阅者定期询问分发服务器是否有任何新的更改可用,然后更新数据本身。

复制类型

SQL Server中有三种主要的复制类型。它们是快照复制、合并复制和事务复制。

快照复制

快照复制在每次运行时创建复制的对象及其数据的完整副本。它使用SQL ServerBCP实用程序将每个表的内容写入快照文件夹。快照文件夹是共享文件夹位置,在启用复制时必须在分发服务器上设置该位置。复制设置中的每个参与者都需要访问快照文件夹。

每次运行快照复制时,都会从头重新生成所有内容,因此它具有高带宽和存储要求。默认情况下,所有其他类型的复制都使用单个复制快照来仅在初始设置期间将所有订阅者与分发服务器同步。

事务复制

正如名称所示,事务复制在事务的基础上工作。对每个提交的事务进行扫描,以查找应用于复制项目的更改。通过日志读取器代理扫描更改,该代理读取发布者数据库的事务日志。如果存在影响已发布对象的更改,则这些更改将记录在分发数据库中的分发服务器上。从那里他们向订户走去。

事务复制允许接近实时同步,并且在发布服务器上只留下很小的内存占用。虽然有几个选项可以允许双向数据移动,但事务复制最初被设计为仅以一种方式工作。

合并复制

合并复制从一开始就设计成允许在发布方和订阅方对数据进行更改。合并复制还允许断开连接的场景,其中订户在白天可能不连接。那个用户在晚上重新连接后会同步。如果一行同时在两个不同的地方更新,则会发生冲突。合并复制附带了几个内置选项来解决这些冲突。

设置事务性复制

本节将逐步介绍如何设置涉及单个复制表的事务性复制。

要设置复制,需要配置分发者、发布者和订阅者。可以使用T-SQL脚本完全设置和控制复制。然而,必要的T-SQL涉及存储过程的使用,这些存储过程一起具有超过100个必需的参数。因此,首先使用SSMS-GUI是有意义的。这里显示的示例窗口截图是在单个服务器(WIN2008A)上进行的,其中安装了SQL-Server实例(R2A)。这个实例是一个SQL-Server 2008R2实例。但是,您也可以遵循SQL Server 20082005上的示例。

建立分布

分发服务器是事务复制的核心。在设置所有其他组件时,它必须是可用的,因此需要首先进行配置。

首先打开SSMS并连接到包含复制源数据的SQL-Server实例。虽然分发服务器可以位于自己的SQL-服务器实例上,但是在许多情况下,让发布服务器和分发服务器位于同一台机器上是有意义的,正如本示例中假定的那样。

连接到服务器后,右键单击服务器下的“复制”文件夹,然后选择“配置分发”,如图1所示。

 

 技术分享图片

 

 

1:配置分发

配置分发向导将启动窗口以下,如图2所示。

 技术分享图片

 

2:配置分发向导

 

 技术分享图片

 

 

忽略此窗口并单击“下一步”是安全的。

在下一个窗口(图3)中,您将选择分发服务是否应该在这个服务器上运行,或者网络中是否已经配置了分发服务器。运行分发服务的机器还将包含分发数据库。将此选择保留在默认值,即要在此服务器上安装分发版,然后单击“下一步”。

 技术分享图片

 

3:选择分发服务器

这将引发图4中的对话框,要求您选择快照文件夹的位置。

 技术分享图片

 

4:快照文件夹

快照文件夹可以是计算机上或网络中的任何位置。在分销商上为其创建网络共享是有意义的。此示例使用C:\Program Files\Microsoft SQL Server\MSSQL10_50 MSSQLSERVER\MSSQL\ReplData”。

快照文件夹的设置还需要授予适当的权限。现在,无需详细讨论,将写访问权限授予文件夹本身上的“验证用户组”(图5)和读访问权限授予共享上的“每个人”(图6)。有关如何加强这一地区安全的更多信息将在本楼梯的稍后级别给出。

 

5:授予对快照文件夹的访问权

 

6:授予对快照文件夹共享的访问权限

 

设置共享并将网络路径放入向导的输入字段后,按“下一步”转到图7中所示的“分发数据库”表单。

 技术分享图片

 

7:分发数据库

这里指定分发数据库的名称以及它的数据和日志文件应该位于何处。保留缺省值,然后单击“下一步”前进到“发布服务器”窗口(图8)。

“发布者”窗口上,您准备潜在的发布者能够使用此分发服务器。我们将在同一个实例上安装发布程序,因此您可以将默认值和“下一步”留给最后一个问题(图9)。

 技术分享图片

 

8:准备发布者

 技术分享图片

 

9:向导操作

最后一个问题是,您是希望向导立即执行您的选择,还是希望向导创建稍后将手动执行的脚本。同样,保留默认设置,最后一次单击“下一步”。

现在,您将看到一个动作列表,如图10所示。单击“完成”开始该过程。

 技术分享图片

 

10:向导摘要

最后,图11所示的窗口给出了有关复制配置的进展和成功的信息。

 技术分享图片

 

11:执行状态

第一版

要创建发布,首先需要有一个包含要发布的表的数据库。执行SQL 脚本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:为发布创建测试数据库

现在可以设置发布了。

SSMS对象资源管理器中打开复制文件夹,然后右击“本地发布”。在下拉菜单中选择“新建发布”(图12)。

 技术分享图片

 

12:新发布

“新建发布向导”的欢迎页面如图13所示。

 技术分享图片

 

13:配置发布向导

单击“下一步”。

“发布数据库”框(图14)中,选择刚刚创建的数据库ReplA,然后单击“下一步”。出版类型”窗口(图15)允许您选择要使用的复制类型。选择“事务发布”,然后单击“下一步”。

 技术分享图片

 

14:选择发布数据库

 技术分享图片

 

15:发布类型

现在,您可以选择哪些文章应该成为该发布的一部分(图16)。选择表dbo.Test并再次单击“下一步”以转到“筛选表行”对话框(图17)。筛选器是一个高级主题,将在本楼梯的稍后级别进行介绍,所以现在只需单击“下一步”,而不需要在此表单上进行选择。

 技术分享图片

 

16:项目

 技术分享图片

 

17:筛选表行

接下来的三个窗口处理快照代理。在第一个窗口(图18)选择“立即创建快照”,然后单击“下一步”。在“代理安全性”窗口(图19)上,单击“安全设置”按钮,并在打开的表单上选择“在SQL Server代理服务帐户下运行”(图20)。

 技术分享图片

 

18:快照调度

 技术分享图片

 

19:代理安全性

 技术分享图片

 

20:选择一个账户

在表单上单击“确定”,然后在代理安全窗口上单击“下一步”。

这将显示“向导操作”表单(图21),供您选择“创建发布”。最后一次单击“下一步”将带您到摘要窗口(图22)。

 技术分享图片

 

21:向导操作

 技术分享图片

 

22:向导的总结

这里您需要为发布选择一个名称。在字段中写入“MyFirstPublication”,然后单击“完成”开始该过程。同样,最后一个窗口(图23)显示了流程完成时的进度信息和成功状态。

 技术分享图片

 

23:执行状态

第一次订阅

在大多数情况下,订阅服务器位于不同的机器上,但是在某些情况下,您希望订阅服务器位于相同的实例上。为了简化这个示例,我们还将停留在相同的实例上。使用脚本2中的代码:创建数据库ReplB

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

  

脚本2:创建目标数据库

现在我们转到SSMS对象资源管理器,右击“本地订阅”,并在下拉菜单中选择“新建订阅”(图24)。

 技术分享图片

 

24:选择新订阅

 “新订阅向导”(图25)欢迎您,并为您提供了另一个按下“下一步”按钮的机会。

 技术分享图片

 

25:新订阅向导

“发布”表单(图26)中,选择刚刚创建的发布,然后单击“下一步”。“分发代理位置”窗口(图27)允许您在推送和拉送订阅之间进行选择。保留默认值,然后转到“订阅者”窗口(图28)。

 技术分享图片

 

26:选择发布

 技术分享图片

 

27:订阅服务器

 技术分享图片

 

28:目标数据库

这里需要选择服务器并选择ReplB数据库。

下一个窗口允许您设置“分发代理安全性”(图29)。

 技术分享图片

 

29:安全分发代理

单击右边省略号按钮之后在页面选择“在SQLServer代理服务帐户下运行”这一形式(图30)。

 技术分享图片

 

30:选择一个账户

单击“确定”,然后单击“下一步”,就可以进入“同步计划”窗口(图31)。选择“连续运行”,然后转到“初始化订阅”窗口(图32)。保留默认值,以便立即初始化,然后“下一步”到“向导操作”表单(图33)。

 技术分享图片

 

31:同步计划

 技术分享图片

 

32:初始化

 技术分享图片

 

33:向导的行动

和前面一样,保留缺省值(创建订阅)并单击“下一步”将把您带到概要窗口(图34),其中列出将要执行的操作。单击“完成”以启动流程,并等待绿色成功标志出现在最终表单上(图35)。

 技术分享图片

 

34:向导总结

 技术分享图片

 

35:执行状态

成功!

脚本1ReplA中创建了dbo.Test表并将1000行插入其中。在将初始快照传输到订阅者之后,您将在ReplB中找到dbo.Test表,其中有1000行。安装完成后几分钟,可以运行脚本3来验证复制是否按预期将所有数据推送到订阅服务器。此脚本将ReplA.dbo.TestReplB.dbo.Test表连接在一起,以显示哪些行被正确复制。现在,您可以运行自己的进一步测试,您可以在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

  

 

脚本3:比较发布者和订阅者

总结

SQL Server实例上的数据库中被标记为要复制的发布者的对象称为.。文章被归类为发布。订阅者通过订阅更新文章中发生的更改。数据流经位于分发服务器上的分发数据库。发布者、分发者和订阅者可以是同一计算机上的相同实例,也可以是不同计算机上的独立实例。源数据库和目标数据库可以是相同的(如果发布者和订阅者实际上是相同的SQL Server实例),但是分发数据库必须是分开的。

本文是SQL Server复制楼梯的一部分

注册到我们的RSS提要,并获得通知,只要我们在楼梯上发布了一个新的水平!


推荐阅读
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在Eclipse中提升开发效率,推荐使用Google V8插件以增强Node.js的调试体验。安装方法有两种:一是通过Eclipse Marketplace搜索并安装;二是通过“Help”菜单中的“Install New Software”,在名称栏输入“googleV8”。此插件能够显著改善调试过程中的性能和响应速度,提高开发者的生产力。 ... [详细]
  • 在 Mac 上查看隐藏文件和文件夹的详细指南。通过终端命令,您可以轻松地显示或隐藏这些文件。具体步骤如下:输入 `defaults write com.apple.finder AppleShowAllFiles -bool true` 以显示所有隐藏文件,或使用 `defaults write com.apple.finder AppleShowAllFiles -bool false` 以重新隐藏它们。此方法适用于各种版本的 macOS,帮助用户更好地管理和访问系统文件。 ... [详细]
  • 本文详细解析了逻辑运算符“与”(&&)和“或”(||)在编程中的应用。通过具体示例,如 `[dehua@teacher~]$[$(id -u) -eq 0] && echo "You are root" || echo "You must be root"`,展示了如何利用这些运算符进行条件判断和命令执行。此外,文章还探讨了这些运算符在不同编程语言中的实现和最佳实践,帮助读者更好地理解和运用逻辑运算符。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践
    蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践 ... [详细]
  • 在 iOS 开发中,经常会遇到 `@(YES)`、`@[firstViewController]` 以及 `@{@a:@b}` 这样的语法糖。这些简化的写法分别用于初始化布尔值、数组和字典对象,能够显著提高代码的可读性和编写效率。例如,`@(YES)` 可以快速创建一个布尔值对象,`@[firstViewController]` 则用于创建包含单个元素的数组,而 `@{@a:@b}` 则用于创建键值对字典。理解这些语法糖的使用方法,有助于开发者更加高效地进行编码。 ... [详细]
  • 近日,我在处理一个复杂的前端问题时遇到了极大困扰。具体来说,我之前开发了一个功能丰富的纯jQuery代码的前端GridView控件,实现了多种功能和视觉效果,并在多个项目中表现良好。然而,最近在尝试应用 `border-box` 布局模式时,却遇到了意想不到的兼容性和性能问题。这提醒我们在条件尚未完全成熟的情况下,应谨慎使用 `border-box` 布局模式,以免引入不必要的复杂性和潜在的bug。 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 在数字图像处理中,Photoshop 的直方图是一个重要的工具,它能够精确地反映图像中不同亮度级别的分布情况。通过分析直方图,用户可以深入了解图像的曝光、对比度和色调范围,从而进行更精细的调整。直方图不仅模拟了物体表面反射光线的原理,还能帮助摄影师和设计师更好地掌握图像的明暗细节,优化视觉效果。 ... [详细]
  • NOIP2000的单词接龙问题与常见的成语接龙游戏有异曲同工之妙。题目要求在给定的一组单词中,从指定的起始字母开始,构建最长的“单词链”。每个单词在链中最多可出现两次。本文将详细解析该题目的解法,并分享学习过程中的心得体会。 ... [详细]
author-avatar
mobiledu2502908793
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有