SQL Server 复制

2025年3月17日 | 阅读 8 分钟

SQL Server 中的复制是一种将数据和数据库对象从一个数据库复制并分发到另一个数据库,以及同步数据库以确保数据一致性和完整性的技术。与其他复制技术复制整个数据库不同,此技术复制数据库的选定部分,例如表和视图。它允许同时在不同位置使用数据的多个副本。它还用于持续复制和同步数据,或者可以安排在预定义的时间间隔内运行。

复制的优点

以下是使用 SQL Server 复制的主要好处

  • 它减少了锁定冲突,并提高了多个用户在不同位置工作时的性能。
  • 与其他数据库相比,它易于维护并提高了可用性。
  • 它使网站能够自主运行。每个站点都可以制定自己的规则和程序来处理其自己的数据副本。
  • 它有助于将数据拉近用户。

SQL Server 复制体系结构

SQL Server 中的复制技术基于“发布和订阅”的概念。下图有助于理解复制体系结构中的每个实体或组件。

SQL Server Replication

文章

它是复制技术的基本单元,包括表、视图、函数和存储过程。可以使用筛选器选项垂直或水平缩放。在某些限制或局限性下,可以对同一对象创建多个文章。

我们可以使用新建发布向导来浏览文章。此向导允许我们查看文章的属性并根据需要设置权限。我们还可以在创建发布时设置属性,但这些只是只读权限。

如果我们想在创建发布后更改其属性,我们必须生成新的复制快照。如果发布包含一个或多个订阅,修改将需要独立地重新初始化所有订阅。

我们可以使用以下 SQL 语句列出所有已发布的文章

如果我们想在已发布的数据库的事务复制或合并复制中获取文章详细信息,我们需要执行以下 SQL 语句。

如果我们想在已列出的发布服务器中获取文章信息,请使用以下 SQL 语句。

出版

它是一个在发布服务器上存在的数据库的文章的逻辑集合。发布允许我们在更高层次上定义和配置文章属性,以便属性可以继承到组中的所有文章。它表示数据库的最终实体集。文章独立分发很重要。

发布服务器数据库

它是一个包含已标识为复制文章的对象列表的数据库。它可以有一个或多个发布,其中每个发布服务器创建许多内部复制存储过程来定义数据传播方法。

出版商

它表示复制开始并将数据提供给配置为在复制过程中使用的其他服务器的源数据库。

分销商

它是与一个或多个发布服务器关联的复制数据的存储库。有时,分发服务器同时充当发布服务器和分发服务器。在 SQL Server 复制的上下文中,这称为“本地分发服务器”,其中单个服务器实例同时运行发布服务器和分发服务器。当分发服务器分布在不同的服务器上时,这称为“远程分发服务器”。每个发布服务器都与一个分发数据库和一个分发服务器相关联。

它还标识和存储复制状态数据和发布元数据。它有时充当从发布服务器到订阅服务器的数据的队列。它还根据复制类型通知订阅了某个发布的订阅服务器文章已更改。

分发数据库

文章详细信息、复制元数据和数据都存储在此数据库中。分发服务器应至少有一个分发数据库,在某些情况下,可能拥有多个数据库。我们确保由单个发布服务器定义的所有发布都使用相同的数据库进行分发。

我们可以使用以下语句检查服务器是否为分发服务器

以下命令检查是否安装了分发数据库。

以下命令检查此分发服务器是否被发布服务器使用:

以下命令用于获取分发服务器和分发数据库的属性。

订阅服务器

订阅服务器是从发布服务器接收复制数据的数据库实例。每个订阅服务器可以接收来自一个或多个发布服务器和发布的数据。当只有一个订阅服务器时,实现单订阅服务器模型。当许多订阅服务器连接到一个发布服务器时,实现多订阅服务器技术。根据复制设计和模型,订阅服务器也可以将数据修改发送回发布服务器或将数据重新发布给其他订阅服务器。

订阅

“订阅”一词指的是请求将某个发布的副本发送到订阅服务器。订阅指定必须获取的发布数据,以及在哪里以及何时交付。我们可以将订阅分为两种:推送和拉取。

  • 推送订阅:分发服务器直接将更新数据发送到订阅服务器。无需订阅服务器的请求。
  • 拉取订阅:订阅服务器定期检查分发服务器是否有新修改。如果可用,它会在订阅数据库本身中更新数据。

订阅数据库

它指的是 SQL Server 复制技术中的目标数据库。

复制代理

代理是用于执行与数据相关的任务的预定义独立程序和事件集。默认情况下,它们配置为在 SQL Server Agent 下作为计划作业执行。我们也可以从命令行或通过应用程序使用复制管理对象 (RMO) 来启动它。我们使用复制监视器和 SQL Server Management Studio 来监视和管理复制代理。

我们可以将复制代理分为五种类型,如下图所示。

SQL Server Replication

快照代理

它是一个可执行程序,有助于创建包含架构、已发布文章、快照文件、记录和数据库对象的快照文件。它用于所有类型的复制技术,因为它为发布和订阅数据库的初始数据同步提供了所需的数据集。数据通常保存在快照文件夹中,同步的作业保存在分发数据库中。

分发代理

它仅用于事务复制和快照复制。初始复制快照通过此代理应用于订阅数据库,并在将数据更新应用于订阅数据库之前,在分发数据库中跟踪和记录数据更新。分发服务器可以使用它来推送订阅,订阅服务器也可以使用它来拉取订阅。

日志读取代理

它仅与事务复制结合使用,该复制将事务从发布数据库事务日志移动到分发数据库。每个数据库都有自己的日志读取代理,它运行在分发服务器上,并可以与发布服务器通信。

合并代理

它与合并复制模型一起使用。默认情况下,它将订阅服务器的修改上传到发布服务器,然后将发布服务器的更新下载到订阅服务器。它与每个订阅相关联,与发布服务器和订阅服务器通信以保持它们最新。对于推送订阅,它在分发服务器上运行;对于拉取订阅,它在订阅服务器上运行。在这种情况下,同步是双向的。一组支持整个过程的触发器会处理数据冲突。

队列读取代理

事务复制使用此代理以及排队更新选项。队列读取代理始终在分发服务器上运行,如果订阅服务器上有任何更改,它会将这些更改传输到发布服务器。对于授权的分发数据库,只有一个队列读取代理实例来处理所有发布和发布服务器。

复制类型

SQL Server 将复制技术分为三种主要类型,如下图所示。

SQL Server Replication

快照复制

快照复制用于精确复制和分发数据库快照创建时的数据。当数据不经常修改,或者数据库副本比主数据库旧一点没关系,或者在短时间内进行大量更改时,可以使用此复制类型。此方法不记录更改。

例如,假设一家单一产品公司每年更改一次或两次其商品价格。在这种情况下,强烈建议在此场景中复制整个数据快照。

SQL Server Replication

快照复制如何工作?

我们可以通过以下几点来理解快照复制的工作原理。

  • 快照代理负责维护分发服务器和发布服务器之间的链接,并通过设置锁在快照文件夹中创建新快照。
  • 接下来,它们为每个文章写入表架构的副本。
  • 它将数据从已发布的表复制,并将数据以.bcp 文件的形式发布到快照文件夹。最后,它附加行并释放对已发布表的锁。

简而言之,快照复制就像它的名字所暗示的那样。在这里,发布服务器拍摄整个数据库的快照并与订阅服务器共享。我们在以下两种主要场景中使用它:

  1. 它用于不经常更改的数据库。
  2. 它作为建立系统复制的基线,未来的更新通过合并复制或事务复制进行传播。

事务复制

它为频繁更改的数据库提供了更灵活的解决方案。复制代理会监视发布服务器的数据库更改,并将这些更改发送到订阅服务器。这些传输可以安排为定期或按固定间隔进行。这使其比快照复制更复杂。在事务复制过程开始时,快照会被应用到订阅服务器,然后当主数据库中的数据更改后,数据会从主数据库持续发送到数据库副本。单向复制通常与事务复制一起使用。

SQL Server Replication

合并复制

它是一种双向复制,用于服务器到客户端环境,用于在无法持续连接的多个数据库服务器上同步数据。建立连接后,合并复制代理会检测修改并更改数据库进行同步并更新其状态。它与事务复制类似,但在此情况下,发布服务器和订阅服务器单独修改数据库。如果修改存在任何冲突,代理将使用预定义的冲突解决过程检查相应的数据。它很少使用,因为它是所有复制类型中最复杂的。

SQL Server Replication
下一主题SQL Server 事务