Always On 가용성 그룹의 일환으로 복제된 게시자 데이터베이스 관리

적용 대상:SQL Server

이 항목에서는 Always On 가용성 그룹을 사용할 경우 게시 데이터베이스 유지 관리와 관련하여 특별히 고려해야 할 사항에 대해 설명합니다.

가용성 그룹에 게시된 데이터베이스 관리

Always On 게시 데이터베이스를 관리하는 것은 기본적으로 표준 게시 데이터베이스 유지 관리와 동일하며 다음 사항을 고려합니다:

  • 관리는 주 복제본 호스트에서 이뤄져야 합니다. SQL Server 관리 Studio에서 게시는 주 복제본(replica) 호스트 및 읽기 가능한 보조 복제본(replica) 대한 로컬 게시 폴더 아래에 표시됩니다. 읽을 수 없는 보조 복제본이 주 복제본으로 승격된 경우 장애 조치(failover) 후 수동으로 관리 Studio 를 새로 고쳐 변경 내용을 반영해야 합니다.

  • 복제 모니터는 항상 원래 게시자에서 게시 정보를 표시합니다. 그러나 원래 게시자를 서버로 추가하면 어떤 복제본에서든지 복제 모니터에서 이 정보를 볼 수 있습니다.

  • 게시자 이름 지정 등을 위해 저장 프로시저나 RMO(복제 관리 개체)를 사용할 때 현재 주 복제본에서 복제를 관리할 때 복제용으로 설정된 데이터베이스(원래 게시자)에서 인스턴스 이름을 지정해야 합니다. 올바른 이름을 확인하려면 PUBLISHINGSERVERNAME 함수를 사용하십시오. 게시 데이터베이스를 가용성 그룹에 조인할 때 보조 데이터베이스 복제본에 저장된 복제 메타데이터가 주 데이터베이스 복제본의 복제 메타데이터와 동일해집니다. 따라서 주 서버에서 복제용으로 설정된 게시 데이터베이스의 경우 보조 서버에서 시스템 테이블에 저장된 게시자 인스턴스 이름은 보조 서버가 아닌 주 서버의 이름입니다. 이는 게시 데이터베이스가 보조 데이터베이스로 장애 조치하는 경우 복제 구성 및 유지 관리에 영향을 끼칩니다. 예를 들어, 장애 조치 후에 보조 서버에서 저장 프로시저를 사용하여 복제를 구성하는 경우, 다른 복제본에서 사용하도록 설정된 게시 데이터베이스에 대한 끌어오기 구독을 설정하려면 현재 게시자가 아닌 원래 게시자의 이름을 sp_addpullsubscription 또는 sp_addmergepullsubscription@publisher 매개 변수로 지정해야 합니다. 그러나 장애 조치(failover) 후 게시 데이터베이스를 사용하도록 설정하면 시스템 테이블에 저장된 게시자 인스턴스 이름은 현재 주 호스트의 이름입니다. 이 경우 @publisher 매개 변수에 대해 현재 주 복제본의 호스트 이름을 사용합니다.

    참고 항목

    sp_addpublication 같은 일부 프로시저의 경우 @publisher 매개 변수는 SQL Server 인스턴스 이외 게시자에 대해서만 지원되며, 이 경우 SQL Server Always On과는 관련이 없습니다.

  • 장애 조치 후 Management Studio 에서 구독을 동기화하기 위해서는 구독자에서 끌어오기 구독을 동기화하고 활성 게시자에서 밀어넣기 구독을 동기화합니다.

가용성 그룹에서 게시된 데이터베이스 제거

게시된 데이터베이스가 가용성 그룹에서 제거되거나 게시된 멤버 데이터베이스가 있는 가용성 그룹이 삭제되는 경우 다음 문제를 고려해 주세요.

  • 원래 게시자의 게시 데이터베이스가 가용성 그룹 주 복제본에서 제거된 경우 게시자/데이터베이스 쌍에 대한 리디렉션을 제거하기 위하여 @redirected_publisher 매개 변수 값을 지정하지 않고 sp_redirect_publisher를 실행해야 합니다.

    EXEC sys.sp_redirect_publisher   
        @original_publisher = 'MyPublisher',  
        @published_database = 'MyPublishedDB';  
    

    데이터베이스는 주 데이터베이스의 복구 상태로 유지되므로 복원해야 합니다. 이렇게 하면 원래 게시자에 대해 복제가 변함 없이 작동합니다.

  • 게시 데이터베이스를 원래 게시자에서 복제본으로 장애 조치하며 데이터베이스를 가용성 그룹 주 복제본에서 제거할 경우 sp_redirect_publisher 저장 프로시저를 실행하여 원래 게시자를 명시적으로 새 게시자로 리디렉션합니다. 데이터베이스는 복구 중인 상태로 유지되기 때문에 복원해야 합니다. 이렇게 하면 가용성 그룹에서와 마찬가지로 복제가 작동하게 됩니다.

    EXEC sys.sp_redirect_publisher   
        @original_publisher = 'MyPublisher',  
        @published_database = 'MyPublishedDB',  
        @redirected_publisher = 'MyNewPublisher';  
    

    서버에 더 이상 액세스할 수 없더라도 원래 게시자의 원격 서버를 배포자에서 제거하지 마세요. 게시 메타데이터 쿼리를 충족하려면 배포자에서 원래 게시자에 대한 서버 메타데이터가 필요합니다.

  • 가용성 그룹 전체를 제거할 경우 복제된 멤버 데이터베이스와 관련된 동작은 게시된 데이터베이스를 가용성 그룹에서 제거할 때와 동일합니다. 데이터베이스가 복원되고 리디렉션이 수정되고 바로 마지막 주 복제본부터 복제를 다시 시작할 수 있습니다. 데이터베이스가 원래 게시자에게 복원된 경우 리디렉션을 제거해야 합니다. 데이터베이스가 다른 호스트에서 복원되는 경우 명시적으로 리디렉션은 새 호스트로 전달되어야 합니다.

    참고 항목

    게시된 멤버 데이터베이스가 있는 가용성 그룹을 제거하거나 게시된 데이터베이스를 가용성 그룹에서 제거하게 되면 게시된 데이터베이스의 모든 복사본이 복구 상태로 남게 됩니다. 데이터베이스를 복원하면 각각이 게시된 데이터베이스로 표시됩니다. 하나의 복사본만이 게시 메타데이터를 유지해야 합니다. 게시된 데이터베이스 복사본에 대해 복제를 비활성화하려면 먼저 모든 구독 및 게시를 데이터베이스에서 제거합니다.

    sp_dropsubscription 을 실행하여 게시 구독을 제거합니다. @ignore_distributor 매개 변수를 1로 설정하여 배포자의 활성 게시 데이터베이스에 관한 메타데이터를 유지합니다.

    USE MyDBName;  
    GO  
    
    EXEC sys.sp_dropsubscription   
        @subscriber = 'MySubscriber',  
        @publication = 'MyPublication',  
        @article = 'all',  
        @ignore_distributor = 1;  
    

    sp_droppublication 을 실행하여 모든 게시를 제거합니다. 다시 @ignore_distributor 매개 변수를 1로 설정하여 배포자의 활성 게시 데이터베이스에 대한 메타데이터를 유지합니다.

    EXEC sys.sp_droppublication   
        @publication = 'MyPublication',  
        @ignore_distributor = 1;  
    

    sp_replicationdboption을 실행하여 데이터베이스에 대한 복제를 사용하지 않도록 설정합니다.

    EXEC sys.sp_replicationdboption  
        @dbname = 'MyDBName',  
        @optname = 'publish',  
        @value = 'false';  
    

    이때 게시된 데이터베이스의 복사본을 유지하거나 삭제할 수 있습니다.

원래 게시자 제거

Always On 가용성 그룹에서 원래 게시자를 제거하려는 경우(이전 서버 대체, OS 업그레이드 등)가 있을 수 있습니다. 가용성 그룹에서 게시자를 제거하려면 이 섹션의 단계를 수행해 보세요.

N1, N2 및 D1 서버가 있다고 가정해 보세요. 여기에서 N1 및 N2는 가용성 그룹 AG1의 주 및 보조 복제본(replica) N1은 트랜잭션 게시의 원래 게시자이고 D1은 배포자입니다. 원래 게시자 N1을 새 게시자 N3으로 대체하려고 합니다.

게시자를 제거하려면 다음 단계를 따라 해 보세요:

  1. 노드 N3에 SQL Server를 설치하고 구성합니다. SQL Server버전은 원래 게시자와 동일해야 합니다.
  2. 배포자 서버 D1에서 sp_adddistpublisher를 사용하여 N3을 게시자로 추가합니다.
  3. D1을 배포자로 구성하고 여 N3을 게시자로 구성합니다.
  4. N3을 가용성 그룹 AG1에 복제본으로 추가합니다.
  5. N3 복제본에서 게시용 푸시 구독자가 연결된 서버로 표시되는지 확인합니다. sp_addlinkedserver 또는 SQL Server Management Studio 중 하나를 사용합니다.
  6. N3이 동기화되면 N3을 주 복제본으로 하여 가용성 그룹을 장애 조치(failover)합니다.
  7. 가용성 그룹 AG1에서 N1을 제거합니다.

다음 사항을 고려해 보세요:

  • 서버에 더 이상 액세스할 수 없더라도 원래 게시자의 원격 서버(이 경우 N1)를 제거하거나 배포자에서 연결된 메타데이터를 제거하지 말아 주세요. 게시 메타데이터 쿼리를 충족하려면 배포자에 원래 게시자의 서버 메타데이터가 필요합니다. 이 메타데이터가 없으면 복제가 실패합니다.
  • SQL Server 2014의 경우 원래 게시자가 제거되면 복제 모니터에서 복제를 관리하기 위해 원래 게시자 이름을 사용할 수 없습니다. 복제 모니터에서 새 복제본을 게시자로 등록하려고 하면 연결된 메타데이터가 없으므로 정보가 표시되지 않습니다. 이러한 시나리오에서 복제를 관리하기 위해 SSMS(SQL Server Management Studio)에서 개별 게시 및 구독을 마우스 오른쪽 단추로 클릭해야 합니다.
  • SQL Server 2016 SP2-CU3, SQL Server 2017 CU6 이상의 경우 복제 모니터에 가용성 그룹 게시자의 수신기를 등록하고 SQL Server Management Studio 버전 17.7 이상을 사용하여 복제를 관리합니다.

관련 작업

참고 항목

Always On 가용성 그룹에 대한 필수 조건, 제한 사항 및 권장 사항(SQL Server)
Always On 가용성 그룹 개요(SQL Server)
Always On 가용성 그룹: 상호 운용성(SQL Server)
SQL Server 복제