TechBlog
[MSSQL/SQL Server] 트랜잭션 복제 생성 본문
트랜잭션 복제 생성 시 스크립트를 확인해보자.
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' 카테고리의 다른 글
[MSSQL/SQL Server] 복제(Replication) (0) | 2025.02.01 |
---|---|
[MSSQL/SQL Server] 파라미터 스니핑(Parameter Sniffing) (0) | 2024.12.01 |
[MSSQL/SQL Server] JOIN 종류 (0) | 2024.05.25 |
[MSSQL/SQL Server] 물리적 JOIN 방식 (0) | 2024.05.19 |
[MSSQL/SQL Server] 동적 쿼리 (0) | 2024.03.24 |