Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

TechBlog

[MSSQL/SQL Server] 트랜잭션 복제 생성 본문

DB

[MSSQL/SQL Server] 트랜잭션 복제 생성

jiazzang 2025. 2. 1. 21:59

트랜잭션 복제 생성 시 스크립트를 확인해보자.

 

1. 게시 구성

1) 게시 생성하기

① 게시자에서 sp_addpublication 실행

② 게시자에서 sp_addpublication_snapshot 실행

③ sp_addarticle로 아티클 추가

④ 스냅샷 에이전트를 실행하여 게시에 대한 초기 스냅샷 생성

 

2) 매개변수 설명

① sp_addpublication: 게시 추가

  • @pubilcation → 게시 이름
  • @status
    • active → 활성화 : 구독자가 게시 데이터를 즉시 사용
    • inactive → 비활성화 : 게시가 처음 작성될 때 구독자가 게시 데이터 사용 불가
  • @allow_push → 밀어넣기 구독 생성 가능 여부
  • @allow_pull → 끌어오기 구독 생성 가능 여부
  • @sync_method → 동기화 방법, 게시된 데이터를 구독 서버로 초기화하기 위한 스냅샷 생성 방식 지정
  • @immediate_sync
    • True (1) → 스냅샷 에이전트가 즉시 실행되어, 아티클에 대한 스냅샷이 생성됨
    • Fales (0) → 스냅샷이 자동으로 생성되지 않음

sp_addpublication_snapshot: 스냅샷 생성

  • @pubilcation → 게시 이름
  • Windows 인증 시
    • @job_login, @job_password 값 지정
  • SQL Server 인증 시
    • @publisher_security_mode 값 0 지정
    • @publisher_login, @publisher_password 값 지정

③ sp_addarticle: 아티클 추가

  • @pubilcation → 게시 이름
  • @article → 아티클의 이름
  • @source_object → 게시되는 개체

 

3) 스크립트

-- 1. 게시 추가
exec sp_addpublication
    @publication = N'AdventureWorks'    -- 게시 이름
,   @allow_push = N'true'
,   @allow_pull = N'true'
,   @allow_anonymous = N'true'
,   @status = N'active'
,   @immediate_sync = N'true'
-- 2. 스냅샷 생성 주기 설정
exec sp_addpublication_snapshot
    @publication = N'AdventureWorks'    -- 게시 이름
,   @frequency_type = 1                 -- 최초 한번 실행
,   @publisher_security_mode = 1
-- 3. 아티클 추가
exec sp_addarticle
    @publication = N'AdventureWorks'
,   @article = N'Customer'          	-- 아티클 이름
,   @source_object = N'Customer'    	-- 게시되는 개체
,   @destination_table = N'Customer'

 

게시를 추가하면, 다음과 같이 게시 서버에 AdventureWorks라는 게시가 생성된다.

 

2. 구독 추가

1) 구독 추가하기

① 게시자에서 sp_addsubscription 실행

② 게시자에서 sp_addpushsubscription_agent 실행

 

2) 매개변수 설명

sp_addsubscription: 구독 추가

  • @pubilcation → 게시 이름
  • @subscriber → 구독자의 이름 (구독 서버명)
  • @destination_db →  구독의 데이터베이스명
  • @subscription_type → 구독 방식 (push/pull)
  • @sync_type → 구독 동기화 유형
    • automatic (기본값, 구독 초기화 O)
    • replication support only(구독 초기화 X)
  • @article → 구독 대상
    • all → 게시 대상 전체

sp_addpushsubscription_agent: 구독을 위한 배포 에이전트 작업 추가

  • @pubilcation → 게시 이름
  • @subscriber → 구독자의 이름
  • @subscriber_db → 복제된 데이터를 추가할 대상 데이터베이스명
  • Windows 인증 시
    • @job_login, @job_password 값 지정
  • SQL Server 인증 시
    • @subscriber_security_mode 값 0 지정
    • @subscriber_login, @subscriber_password 값 지정

3) 스크립트

-- 1. 구독 추가
exec sp_addsubscription
    @publication = N'AdventureWorks'    -- 게시 이름
,   @subscriber = N''			-- 구독자의 이름
,   @destination_db = N'REPLDB'         -- 구독의 데이터베이스명
,   @subscription_type = N'Push'        -- 구독 방식 (밀어넣기)
,   @sync_type = N'automatic'           -- 구독 동기화 유형
,   @article = N'all'                   -- 구독 대상
,   @update_mode = N'read only'         -- 트랜잭션 동기화

-- 2. 구독을 위한 배포 에이전트 작업 추가
exec sp_addpushsubscription_agent
    @publication = N'AdventureWorks'
,   @subscriber = N''
,   @subscriber_db = N'REPLDB'
,   @subscriber_security_mode = 1

 

구독 추가 후, 구독 서버에 Customer 테이블이 복제되었다. 

 

게시DB와 구독DB의 데이터를 비교해보면, 게시DB에 따라 구독DB에 Customer 테이블이 동일하게 생성되었음을 확인할 수 있다.

게시DB(좌), 구독DB(우)