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

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

向现有配置添加项目

  1. 停止系统。

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

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

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

  5. 执行 sp_addarticle,在拓扑中的每个节点上创建新项目。 有关详细信息,请参阅如何定义项目(复制 Transact-SQL 编程)

    注意注意

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

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

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

  1. 停止系统。

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

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

示例

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

-- Create the new table at both nodes.
CREATE TABLE AdventureWorks2008R2.dbo.ProductTest (column1 int, Column2 int);
CREATE TABLE AdventureWorks2008R2Replica.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 AdventureWorks2008R2..ProductTest in NewTable.bcp �T �SMYPUBLISHER n/c
bcp AdventureWorks2008R2Replica..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 AdventureWorks2008R2

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