管理对等拓扑(复制 Transact-SQL 编程)

适用于:SQL Server

管理对等拓扑类似于管理典型的事务复制拓扑,但有许多需要特别注意的地方。 管理对等拓扑的主要区别在于,有些更改需要让系统“停止” 。 “停止”系统,需要停止所有节点上已发布表的操作,并确保每个节点都已收到来自所有其他节点的所有更改。 有关详细信息,请参阅停止复制拓扑(复制 Transact-SQL 编程)

注意

在对等拓扑中,分发服务器使用的 SQL Server 版本不能低于请求订阅服务器的版本。

向现有配置添加项目

  1. 停止系统。

  2. 停止拓扑中每个节点上的分发代理。 有关详细信息,请参阅复制代理可执行文件概念启动和停止复制代理 (SQL Server Management Studio)

  3. 执行 CREATE TABLE 语句,在拓扑中每个节点上添加新表。

  4. 通过使用 bcp 实用工具在所有节点上以手动方式为新表大容量复制数据。

  5. 执行 sp_addarticle ,在拓扑中的每个节点上创建新项目。 有关详细信息,请参阅 定义项目

    注意

    执行 sp_addarticle 之后,复制会将此项目自动添加到拓扑中的订阅。

  6. 重新启动拓扑中每个节点上的分发代理。

对发布数据库进行架构更改

  1. 停止系统。

  2. 执行数据定义语言 (DDL) 语句来修改已发布表的架构。 有关支持的架构更改的详细信息,请参阅对发布数据库进行架构更改

  3. 恢复已发布表中的操作之前,请再次停止系统。 这将确保在复制任何新的数据更改前所有节点已收到架构更改。

示例

以下示例演示如何将新的表项目添加到具有两个节点的现有对等复制拓扑中。

-- Create the new table at both nodes.
CREATE TABLE AdventureWorks2022.dbo.ProductTest (column1 int, Column2 int);
CREATE TABLE AdventureWorks2022Replica.dbo.ProductTest (column1 int, Column2 int);
GO
REM Bulk insert data into both the publication and subscription databases.
REM The BCP format depends on the snapshot format (native or character).
REM Execute at the command prompt.

bcp AdventureWorks2022..ProductTest in NewTable.bcp -T -SMYPUBLISHER n/c
bcp AdventureWorks2022Replica..ProductTest in NewTable.bcp -T -SMYPUBLISHER n/c
--- Add the article to the publication.
DECLARE @publication AS sysname;
DECLARE @newtable AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @newtable = N'ProductTest';

USE AdventureWorks2022;

EXEC sp_addarticle 
  @publication = @publication,
  @article = @newtable,
  @source_object = @newtable,
  @destination_table = @newtable,
  @force_invalidate_snapshot = 0;
GO