分发/订阅模式实现SqlServer主从同步

在文章开始之前,我们先了解一下几个关键的概念:

分发服务器
分发服务器是负责存储在同步过程中所用复制信息的服务器。可以比喻成报刊发行商。 分发数据库
分发数据库用于存储发布数据库所做的更改。它还可以存储快照和合并发布的历史信息。存在于系统数据库中,默认为destribution. 发布服务器
使服务器能够成为发布服务器后使用此分发服务器。它通过复制向其他位置提供数据。可以比喻成报刊出版商,实际生产报刊的地方。 发布数据库
包含要发布的数据或对象的数据库,即主库。 订阅服务器
从库(slave节点)所在的数据服务器。可以比喻成阅读报刊的人

环境准备

1.SqlServer2008R2数据库

2.启动数据库服务器SQL Server 代理 (MSSQLSERVER)服务

配置分发

分发服务器可以和发布服务器是同一台服务器,也可以单独指定分发服务器。本文以同一台服务器为例。

1) 选择当前服务器作为分发服务器

2)启动SqlServer代理

3)配置快照文件夹

快照是可以存储主库数据架构和初始数据,也可以存储主库某一段时间内数据库发生的变化。

4)配置分发数据库

分发数据库以数据库文件的形式存储主库发布的数据变化。

新建发布

1)选择发布数据库

2)选择发布类型

SqlServer数据库提供了以下四种发布类型:

快照发布
发布服务器按预定的时间间隔向订阅服务器发送已发布数据的快照。
可以理解为发布数据库将一段时间间隔内的数据变化打包到数据文件中,一次性提交给订阅服务器。适用于数据量小,允许数据延迟的主从数据库同步。 事务发布
在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器。
创建了初始快照后,接着在发布服务器上所做的数据更改和数据结构更改通常在修改后同步传递给订阅服务器,数据更改将按照其在发布服务器上的事务顺序应用于订阅服务器,保证了发布内的事务一致性。
事务发布能够将发布数据变化的信息及时传递给订阅服务,并在短时间内完成。数据近似于同步更新,适用于对数据实时性要求较高的场景。 具有可更新订阅的事务发布
在 SQL Server 订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器。来自订阅服务器的事务被应用于发布服务器。
在事务发布的基础上,支持订阅服务器向发布服务器提交更新。 合并发布
在订阅服务器收到已发布数据的初始快照后,发布服务器和订阅服务器可以独立更新已发布数据。更改会定期合并。Microsoft SQL Server Compact Edition 只能订阅合并发布。

3)选择要发布的数据库对象,可以是表,也可是某个字段

4)自定义数据过滤条件

5)快照代理

快照代理运行于分发服务器上,用于连接发布服务器,每个发布服务器都有专属于自己的一个快照代理。其主要作用是:将发布数据库的数据架构和初始数据同步到分发数据库中;存储快照文件并记录历史同步信息。

对于事务性发布,还存在日志读取器代理:该代理与事务性复制一起使用,运行于分发服务器上并与发布服务器连接。其主要作用是:将发布服务器上数据库事务日志中标记为复制的事务移至分发数据库中。

6)配置代理账户,用于连接发布服务器

新建订阅

1)选择订阅的发布

2)配置订阅模式

推送订阅

分发服务器接收到分发服务器变化的数据之后,主动像订阅服务器推送。(推荐)

请求订阅

订阅服务器主动向分发服务器订阅变化的数据。如果选择请求订阅,那么订阅服务器需要能够访问分发服务器存储的快照文件夹位置。

分发代理

分发代理与快照复制和事务性复制一起使用。其主要作用是:将发布数据库初始快照发送到订阅服务器,并将分发数据库中保存的数据库事务移至订阅服务器。分发代理既可以运行于分发服务器(推送订阅模式),也可运行于订阅服务器(请求订阅模式)

3)配置订阅服务器和从库

4)配置订阅服务器代理账户

5)配置同步计划模式

6)初始化发布数据库数据和架构

以上步骤就完成了分发服务器、发布服务器和订阅服务器的配置。

同步过程(事务性复制):

1.发布服务器选择关联对应的分发服务器,快照代理将发布数据库数据架构和初始化数据存储到分发服务器上

2.当发布数据库数据变动时,日志读取器代理会将变更的事务日志记录到分发服务器指定的分发数据库文件中(日志文件和数据文件、.MDF—存储数据,.LDF—存储数据更新)

3.分发代理将分发数据库中的初始信息和变更信息更新到订阅服务器。

最新文章

  1. HOLOLENS的DEVICE POTAL连接和安装
  2. 随机抽奖 --java
  3. ios推送
  4. 同一个服务器部署多个tomcat
  5. 集合上的动态规划---最优配对问题(推荐:*****) // uva 10911
  6. Android裁剪固定大小头像的功能
  7. 【Unity3D】生成工程报错解决—UnityEditor.HostView:OnGUI() Error building Player: Couldn't build player because of unsupported data on target platform.
  8. 【LIC】O(nlogn)解法
  9. .NET程序编译原理
  10. 理解Java(StringBuffer和StringBuilder)
  11. shell之变量替换:临时替换
  12. dojo.create\dojo.place\dojo.empty\dojo.destroy\dojo.body
  13. [Android文档翻译]设备兼容性
  14. Android中Activity全局共享方法AppContext
  15. Mammoth官方文档翻译
  16. join()的用法
  17. CentOS在线安装RabbitMQ3.7
  18. BOM简单知识
  19. Python2.x与3.x版本区别
  20. noj最长公共子序列

热门文章

  1. 追洞小组 | 实战CVE-2020-7471漏洞
  2. P4847 银河英雄传说V2 题解(Splay)
  3. 想了很久,一道Microsoft的笔试题目 —— Reversing Linked List
  4. 数据库SQL查询作业
  5. Reverse 高校网络信息安全运维挑战赛
  6. Git代码版本控制流程
  7. 浅谈意图识别各种实现&数学原理
  8. OOP第一次博客作业
  9. 亲测有效JS中9种数组去重方法
  10. 问题笔记 - element表格 操作状态值