이전 블로그에서는 데이터베이스 백업을 활용하여 대용량 데이터베이스의 복제를 초기화하는 방법을 소개했습니다. 이번 글에서는 백업을 통해 구성된 기존 SQL Server 트랜잭션 복제 환경에서 새 아티클(articles)을 추가하고 구독자를 재초기화하는 방법을 단계별로 자세히 살펴보겠습니다.
개요
일반적으로 새 아티클을 게시(publication)에 추가하거나 구독자를 재초기화할 때는 스냅숏 에이전트(Snapshot Agent)를 사용하는 것이 일반적입니다. 그러나 이번 시나리오에서는 이미 데이터베이스 백업을 사용해 트랜잭션 복제가 구성되어 있는 상태이므로, 스냅숏 없이 작업을 진행하는 방법을 알아봅니다.
이 글에서 다룰 두 가지 시나리오는 다음과 같습니다.
- 백업으로 초기화된 기존 게시에 새 아티클 추가하기
- 백업으로 이미 초기화된 구독자 재초기화하기
시나리오 1: 백업으로 초기화된 게시에 새 아티클 추가하기
이 시나리오의 복제 환경은 다음과 같이 백업 파일을 사용해 이미 구성되어 있습니다.
- 게시자 + 배포자(Publisher + Distributor): Node1
- 구독자(Subscriber): Node2
- 게시자 데이터베이스: ABC_Pub
- 구독자 데이터베이스: ABC_Sub
- 게시(Publication): ABC_Pub_Bkp
- 구독(Subscription): ABC_Sub_Bkp
- 아티클(Articles): Cars, Bikes
기존 게시에 새 아티클을 추가하려면 게시자와 구독자 간에 데이터를 수동으로 동기화한 후, 새 아티클을 게시에 등록하는 방식으로 진행합니다.
작업 절차 요약
- 가져오기/내보내기(import/export) 방식 등 대중적인 방법을 사용해 새 아티클의 데이터를 게시자에서 구독자로 동기화합니다.
- 로그 판독기(Log Reader) 에이전트와 배포(Distributor) 에이전트 작업을 중지합니다.
- GUI를 사용해 새 아티클을 게시에 추가하고 구성을 완료합니다.
- 로그 판독기 및 배포 에이전트 작업을 활성화하고 시작합니다.
- 게시자에 새 데이터를 삽입합니다.
- 구독자에서 데이터를 검증합니다.
1단계: 가져오기/내보내기 방식으로 새 아티클 데이터 동기화
기존 복제에는 두 개의 아티클(Cars, Bikes)이 있으며, 여기에 게시자 데이터베이스에 두 개의 새 테이블(Country, Customer)을 생성한 후 복제에 추가할 예정입니다.
먼저 게시자 데이터베이스에 두 개의 새 테이블을 만들고 각 테이블에 몇 개의 행을 삽입합니다. 그다음 두 테이블의 CREATE 정의를 스크립트로 생성하여 구독자 데이터베이스에서 실행합니다.
테이블 구조가 준비되면 가져오기/내보내기 마법사를 사용해 게시자와 구독자 간 데이터를 동기화합니다.
게시자 데이터베이스를 마우스 오른쪽 버튼으로 클릭 → [데이터 내보내기(Export Data)] 선택 → 마법사의 안내에 따라 필요한 정보를 입력합니다.
- 원본 서버 선택: 원본으로 게시자 서버(Node1)와 데이터베이스(ABC_Pub)를 지정합니다.
- 대상 서버 선택: 다음 단계에서 대상으로 구독자 서버(Node2)와 데이터베이스(ABC_Sub)를 지정합니다.
- 테이블 선택: 데이터를 전송할 테이블 이름을 선택하고 [다음]을 클릭합니다.
- 내보내기 완료: 마법사를 마치면 내보내기가 성공적으로 완료됩니다.
데이터 검증: 게시자와 구독자 간에 데이터가 정상적으로 동기화된 것을 확인할 수 있습니다.
2단계: 로그 판독기 및 배포 에이전트 작업 중지
아티클 관련 작업을 수행하기 전에는 복제 에이전트를 중지하는 것이 가장 권장되는 모범 사례입니다. SQL Server 에이전트에서 로그 판독기 에이전트와 배포 에이전트 작업을 중지합니다.
3단계: GUI를 사용해 새 아티클을 게시에 추가
복제 폴더에서 해당 게시를 마우스 오른쪽 버튼으로 클릭하고 [속성(Properties)]을 선택합니다. [아티클(Articles)] 페이지로 이동한 후 [목록에 선택된 아티클만 표시(Show only checked articles in the list)] 옵션의 체크를 해제합니다. 그런 다음 [게시할 개체(Objects to publish)] 목록에서 두 개의 새 아티클(예제에서는 Country와 Customer)을 선택하고 [확인]을 클릭해 구성을 마칩니다.
4단계: 로그 판독기 및 배포 에이전트 작업 활성화 후 시작
에이전트를 활성화하고 시작하면 로그 판독기 에이전트가 새로 추가된 레코드를 캡처하고, 배포 에이전트가 이를 구독자에게 복제합니다. 다음 단계에서 데이터를 검증하게 됩니다.
5단계: 게시자에 새 데이터 삽입
이제 게시자의 두 테이블에 각각 5개의 신규 레코드를 추가로 삽입합니다.
6단계: 구독자에서 데이터 검증
데이터를 검증해 보면 두 테이블 모두 새 레코드 5개가 추가되어 총 10개 행이 되었으며, 동일한 데이터가 구독자로 복제된 것을 확인할 수 있습니다.
복제 상태 확인: 복제 모니터(Replication Monitor)에서 복제 상태가 정상임을 확인합니다.
시나리오 2: 백업으로 초기화된 구독자 재초기화하기
두 번째 시나리오는 복제 동기화 문제를 해결할 다른 방법이 없을 때 최후의 수단으로 사용되는 구독자 재초기화입니다. 백업을 통해 초기화된 복제 환경에서 구독자를 재초기화하는 절차는 다음과 같습니다.
- 로그 판독기, 배포 에이전트 및 배포 정리(Distributor Cleanup) 작업을 중지합니다.
- 게시자 데이터베이스의 전체 백업을 수행하고 트랜잭션 로그(T-Log) 백업 작업을 비활성화합니다.
- REPLACE 옵션으로 구독자 데이터베이스를 복원합니다.
- 데이터를 검증합니다.
- sp_addsubscription을 실행합니다.
- 로그 판독기 및 배포 작업을 활성화하고, 게시자에 새 레코드를 삽입한 후 구독자에서 데이터를 검증합니다.
1단계: 로그 판독기 및 배포 에이전트 작업 중지
아티클 관련 작업을 수행하기 전에 복제 에이전트를 중지하는 것이 가장 권장되는 모범 사례입니다.
2단계: 게시자 데이터베이스 전체 백업 및 T-Log 백업 작업 비활성화
게시자 서버에서 ABC_Pub 데이터베이스의 전체 백업을 수행하고, 트랜잭션 로그 백업 작업이 있다면 이를 비활성화합니다. 이는 복원 시점 이후의 로그 체인 관리를 위해 중요한 단계입니다.
3단계: REPLACE 옵션으로 구독자 데이터베이스 복원
REPLACE 옵션을 사용해 구독자 데이터베이스(ABC_Sub)를 복원합니다. WITH REPLACE 옵션을 사용하면 기존 구독자 데이터베이스를 게시자의 최신 전체 백업으로 덮어써 양쪽 데이터베이스를 동일한 상태로 맞출 수 있습니다.
4단계: 게시자와 구독자 간 데이터 검증
데이터 검증 결과, Cars와 Bikes 테이블은 각각 5개의 레코드를, Country와 Customer 테이블은 각각 10개의 레코드를 가지고 있으며 게시자와 구독자가 일치함을 확인할 수 있습니다.
5단계: sp_addsubscription 실행
이제 필요한 매개변수와 함께 다음 저장 프로시저를 실행하여 구독자를 재초기화합니다. sp_addsubscription은 구독을 다시 설정하고 배포 에이전트가 올바른 위치부터 변경 내용을 적용하도록 합니다.
6단계: 에이전트 작업 활성화, 새 레코드 삽입 및 데이터 검증
복제 에이전트 작업을 활성화하고 시작합니다.
복제 중인 두 테이블에 각각 5개의 레코드를 추가로 삽입합니다.
구독자 데이터베이스에서 데이터를 검증합니다.
검증 결과, 새로 추가된 5개의 레코드가 구독자로 정상 복제되었으며, 이제 모든 테이블이 각각 10개의 레코드를 가지고 있습니다.
복제 상태 점검: 복제 모니터에서 복제가 정상적으로 동작하는지 최종 확인합니다.
결론
이번 글에서는 백업으로 초기화된 SQL Server 트랜잭션 복제 환경에서 새 아티클을 추가하는 방법과, 이미 백업으로 초기화된 구독자를 재초기화하는 두 가지 시나리오를 살펴보았습니다. 스냅숏 에이전트를 사용하지 않고도 백업과 수동 데이터 동기화만으로 복제 환경을 유연하게 관리할 수 있으므로, 대용량 데이터베이스 환경에서 특히 유용하게 활용할 수 있습니다.
피드백 탭을 통해 의견을 남기거나 질문을 보내실 수 있으며, 언제든지 저희와 대화를 시작하실 수 있습니다.