发布订阅概述

最近更新时间:2024-09-05 19:18:21

我的收藏

简介

腾讯云数据库 SQL Server 支持 Microsoft SQL Server 原生的发布订阅复制功能,用户可在 云数据库 SQL Server 控制台 上进行自助创建、变更、删除发布和订阅服务器,满足用户业务的数据复制和同步需求。
注意:
云数据库 SQL Server 单节点(原基础版)不支持发布订阅。

基本概念

SQL Server 使用出版业术语表示复制拓扑中的组件,其中包括发布服务器、分发服务器、订阅服务器、发布、项目和订阅。可借助杂志的概念来帮助理解 Microsoft SQL Server 复制:
杂志出版商(发布服务器)生产一种或多种刊物(发布)
刊物(发布)包含文章(项目)
出版商(发布服务器)可以直接发行杂志,也可以使用发行商(分发服务器)
订阅者(订阅服务器)接收订阅的刊物(发布)

基础架构

“复制拓扑” 定义了服务器和数据副本间的关系,并阐明了决定数据如何在服务器之间流动的逻辑。 有若干复制进程(称为“代理” )负责在发布服务器和订阅服务器之间复制和移动数据。 下图为复制中所涉及的组件和进程。


发布服务器

发布服务器是一种数据库实例,它通过复制向其他位置提供数据。发布服务器可以有一个或多个发布,每个发布定义一组要复制的具有逻辑关系的对象和数据。

分发服务器

分发服务器也是一种数据库实例,它起着存储区的作用,用于复制与一个或多个发布服务器相关联的特定数据。每个发布服务器都与分发服务器中的单个数据库(称作分发数据库)相关联。
分发数据库可存储复制状态数据和有关发布的元数据,并且在某些情况下为从发布服务器向订阅服务器移动的数据起排队的作用。
在很多情况下,一个数据库服务器实例充当发布服务器和分发服务器两个角色,这称为“本地分发服务器” 。当发布服务器和分发服务器按各自的数据库服务器实例配置时,把分发服务器称为“远程分发服务器” 。

订阅服务器

订阅服务器是接收复制数据的数据库实例。订阅服务器可以接收来自多个发布服务器发布的数据。根据所选的复制类型,订阅服务器还可以将数据更改传递回发布服务器或者将数据重新发布到其他订阅服务器。

项目

项目用于标识发布中包含的数据库对象,一次发布可以包含不同类型的项目。

发布

发布是一个数据库中的一个或多个项目的集合。将多个项目分组成一个发布,使得更便于指定一组作为一个单元复制的、具有逻辑关系的数据库对象和数据。

订阅

订阅是把发布副本传递到订阅服务器的请求。订阅定义将接收的发布和接收的时间、地点。

功能说明

云数据库 SQL Server 发布订阅默认采用事务复制方式。 事务复制通常从发布数据库对象和数据的快照开始。创建初始快照后,接着在发布服务器上所做的数据更改和架构修改通常在修改发生时(几乎实时)便传递给订阅服务器。 数据更改将按照其在发布服务器上发生的顺序和事务边界应用于订阅服务器,因此,在发布内部可以保证事务的一致性。 事务复制通常用于服务器到服务器环境中,在以下各种情况下适合采用事务复制:
希望发生增量更改时将其传播到订阅服务器。
从发布服务器上发生更改,至更改到达订阅服务器,应用程序需要这两者之间的滞后时间较短。
应用程序需要访问中间数据状态。例如,如果某一行更改了五次,事务复制将允许应用程序响应每次更改(如,激发触发器),而不只是响应该行最终的数据更改。
发布服务器有大量的插入、更新和删除活动。
云数据库 SQL Server 发布订阅配置“远程分发服务器”,保证发布服务器故障切换后,自动恢复发布订阅链路,对订阅服务器无感知。但订阅服务器故障后,链路需要手动修复。

功能限制

仅支持发布实例与订阅实例均为腾讯云数据库 SQL Server 的场景。
只读实例无法作为发布服务器,也无法作为订阅服务器。
发布实例与订阅实例必须属于同一版本,而且在相同地域(可跨可用区)。
无主键的数据表无法被订阅,可通过如下代码检查需要发布库中是否存在无主键的表。
use dbname
select name from sys.sysobjects where xtype='U' and id not in(select parent_obj from sys.sysobjects where xtype='PK')
订阅实例与发布实例存在同名数据库时,该库无法被订阅。
创建发布订阅链路后,链路中的数据库被删除,该发布订阅链路也将被删除。
发布实例或订阅实例一方被销毁,发布订阅链路也将被删除。