대규모 데이터베이스 환경에서는 스냅샷을 생성하지 않고 백업 파일로 구독을 초기화하는 방식으로 트랜잭션 복제를 설정하는 것이 효율적입니다. 이 글에서는 그 상세한 절차를 단계별로 살펴보겠습니다.
소개
매우 큰 규모의 SQL Server 데이터베이스에 트랜잭션 복제(Transaction Replication)를 설정하는 것은 결코 쉬운 작업이 아닙니다. 일반적으로는 스냅샷 생성에 소요되는 시간과 스냅샷 폴더에 필요한 디스크 용량을 충분히 고려하지 않은 상태로 복제를 구성하는 경우가 많습니다.
초기 스냅샷 생성과 구독자(Subscriber) 재초기화에 따르는 긴 대기 시간을 피하고 싶다면, 이 글에서 소개하는 SQL 데이터베이스 백업 기반의 구독 초기화 방법이 훌륭한 대안이 됩니다.
설정 절차 개요
트랜잭션 복제를 설정하려면 먼저 배포자(Distributor)를 구성해야 합니다. 이 실습에서는 배포자가 이미 구성되어 있다고 가정합니다. 배포자 구성 방법은 아래 Microsoft 공식 문서를 참고하세요.
게시 및 배포 구성 가이드(Microsoft Docs)
전체 프로세스 요약
- 게시(Publication) 생성
- 게시 속성 수정
- 게시자(Publisher) 데이터베이스 백업
- 구독자(Subscriber) 데이터베이스에 백업 복원
- T-SQL로 구독 생성 (GUI에서는 백업 기반 초기화를 지원하지 않음)
실습 시나리오 구성 정보
- 게시자 + 배포자: Node1
- 구독자: Node2
- 게시자 데이터베이스: ABC_Pub
- 구독자 데이터베이스: ABC_Sub
- 게시 이름: ABC_Pub_Bkp
- 구독 이름: ABC_Sub_Bkp
1단계: 복제할 데이터베이스를 선택하여 게시 만들기
게시자 데이터베이스로 ABC_Pub을 선택합니다.
2단계: 게시 유형과 복제에 참여할 테이블 선택
게시 유형을 지정한 후, 복제에 포함할 아티클(Articles, 테이블 등)을 선택합니다.
3단계: 스냅샷 관련 옵션은 비워 두고 진행
이번 시나리오에서는 스냅샷 대신 데이터베이스 백업 파일을 사용하므로, 해당 옵션은 모두 비워 둔 채 다음으로 넘어갑니다.
이렇게 하면 게시 ABC_Pub_Bkp가 생성됩니다.
4단계: '백업 파일에서 초기화 허용' 옵션 활성화
T-SQL 사용 시:
USE ABC_Pub;
GO
EXEC sp_changepublication
@publication = N'ABC_Pub_Bkp',
@property = N'allow_initialize_from_backup',
@value = N'true';
GO
GUI 사용 시:
게시 속성(Publication Properties)에서 [Subscription Options]를 선택한 후 "Allow initialization from backup files"(백업 파일에서 초기화 허용) 옵션을 True로 변경하고 확인을 클릭해 변경 사항을 저장합니다.
5단계: 배포 정리(Distribution Cleanup) 작업 비활성화
SQL Server 에이전트의 'Distribution cleanup' 작업을 마우스 오른쪽 버튼으로 클릭한 후 [사용 안 함(Disable)]을 선택합니다.
주의: 다음 단계에서 백업을 수행하기 전에 반드시 이 작업을 비활성화해야 합니다. 그렇지 않으면 오류가 발생할 수 있습니다.
6단계: 게시자에서 데이터베이스 백업 수행
게시자 데이터베이스 ABC_Pub의 전체 백업(Full Backup)을 수행합니다.
7단계: 구독자 서버에 백업 복원
생성된 백업 파일을 구독자 서버(Node2)의 ABC_Sub 데이터베이스로 복원합니다.
8단계: sp_addsubscription 실행
게시 데이터베이스에서 아래와 같이 매개변수를 지정하여 sp_addsubscription을 실행합니다. 핵심은 @sync_type을 'initialize with backup'으로 지정하고 백업 장치 정보를 전달하는 것입니다.
USE ABC_Pub;
GO
EXEC sp_addsubscription
@publication = N'ABC_Pub_Bkp',
@subscriber = N'Node2',
@destination_db = N'ABC_Sub',
@sync_type = N'initialize with backup',
@backupdevicetype = N'Disk',
@backupdevicename = N'C:\Backup\ABC_Pub.bak';
GO
EXEC sp_addpushsubscription_agent
@publication = N'ABC_Pub_Bkp',
@subscriber = N'Node2',
@subscriber_db = N'ABC_Sub';
GO
9단계: 배포 정리 작업 다시 활성화
앞선 모든 단계가 완료되면 이전에 비활성화했던 Distribution cleanup 작업을 다시 활성화합니다.
10단계: 복제 상태 확인
SSMS에서 [복제 → 복제 모니터(Replication Monitor)] 메뉴를 통해 복제 상태를 확인합니다.
백업 파일을 사용해 초기화했기 때문에 전체 과정에서 스냅샷 에이전트가 전혀 생성되지 않았으며, 성능 지표 역시 'Excellent(우수)' 상태로 표시되는 것을 확인할 수 있습니다.
결론
데이터베이스 백업 파일을 통한 초기화는 대규모 데이터베이스를 동기화할 때 발생하는 수많은 문제를 해결해 주지만, 그 자체로 몇 가지 새로운 과제를 만들기도 합니다. 다행히 이러한 문제들은 사전에 충분히 계획하면 해결할 수 있으며, 이 글이 복제 구성 과정을 단순화하는 데 도움이 되기를 바랍니다.
궁금한 점이나 의견이 있다면 피드백 탭을 통해 남겨 주세요. 언제든지 함께 논의할 준비가 되어 있습니다.