다음을 통해 공유


피어 투 피어 토폴로지 관리(복제 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