복제 구독자 및 Always On 가용성 그룹(SQL Server)

적용 대상:SQL Server

복제 구독자인 데이터베이스를 포함하는 Always On 가용성 그룹(AG)이 장애 조치(failover)되면 복제 구독이 실패할 수 있습니다. 트랜잭션 복제 밀어넣기 구독자의 경우 AG 수신기 이름을 사용하여 구독이 생성되었다면 장애 조치(failover) 후에 배포 에이전트가 자동으로 계속 복제합니다. 트랜잭션 복제 당겨받기 구독자의 경우 AG 수신기 이름을 사용하여 구독이 생성되었고 원래 구독 서버가 실행 중인 경우 장애 조치(failover) 후에 배포 에이전트가 자동으로 계속 복제합니다. 이는 배포 에이전트 작업이 원래 구독자(AG의 주 복제본)에서만 만들어지기 때문입니다. 병합 구독자의 경우 복제 관리자가 구독을 다시 만들어 구독자를 수동으로 다시 구성해야 합니다.

지원 대상

SQL Server 복제는 게시자의 자동 장애 조치(failover)와 트랜잭션 구독자의 자동 장애 조치(failover)를 지원합니다. 병합 구독자는 AG에 속할 수 있지만, 장애 조치(Failover) 후 새 구독자를 구성하려면 수동 작업이 필요합니다. AG는 WebSync 및 SQL Server Compact 시나리오와 결합할 수 없습니다.

가용성 그룹에 트랜잭션 구독 만들기

트랜잭션 복제의 경우, 다음 단계를 사용하여 구독자 AG를 구성하고 장애 조치(failover)합니다.

  1. 구독을 만들기 전에 해당 AG에 구독자 데이터베이스를 추가합니다.

  2. 구독자의 AG 수신기를 연결된 서버로 AG의 모든 노드에 추가합니다. 이 단계를 수행하면 모든 잠재적 장애 조치(failover) 파트너가 이를 인식하고 수신기에 연결할 수 있게 됩니다.

  3. 트랜잭션 복제 밀어넣기 구독 만들기 섹션의 스크립트를 사용하여 구독자의 AG 수신기 이름으로 구독을 만듭니다. 장애 조치(failover) 후 수신기 이름은 항상 유효하지만, 구독자의 실제 서버 이름은 새 주 노드가 된 실제 노드에 따라 달라집니다.

    참고 항목

    구독은 Transact-SQL 스크립트를 사용하여 만들어야 하며 Management Studio를 사용해서 만들 수 없습니다.

  4. 끌어오기 구독을 만들려면

    1. 트랜잭션 복제 끌어오기 구독 만들기 섹션의 샘플 스크립트를 사용하여 구독자의 AG 수신기 이름으로 구독을 만듭니다.

    2. 장애 조치(failover) 후, sp_addpullsubscription_agent 저장 프로시저를 사용하여 새 주 복제본에 배포 에이전트 작업을 만듭니다.

AG에서 구독 데이터베이스를 사용하여 끌어오기 구독을 만들 때, 장애 조치(failover) 후 이전 주 복제본에서 배포 에이전트 작업을 사용하지 않도록 설정하고 새 주 복제본에서 이 작업을 사용하도록 설정하는 것이 좋습니다.

트랜잭션 복제 밀어넣기 구독 만들기

-- commands to execute at the publisher, in the publisher database:
USE [<publisher database name>];
GO

EXEC sp_addsubscription @publication = N'<publication name>',
    @subscriber = N'<AG listener name>',
    @destination_db = N'<subscriber database name>',
    @subscription_type = N'Push',
    @sync_type = N'automatic',
    @article = N'all',
    @update_mode = N'read only',
    @subscriber_type = 0;
GO
  
EXEC sp_addpushsubscription_agent @publication = N'<publication name>',
    @subscriber = N'<AG listener name>',
    @subscriber_db = N'<subscriber database name>',
    @job_login = NULL,
    @job_password = NULL,
    @subscriber_security_mode = 1;
GO

트랜잭션 복제 끌어오기 구독 만들기

-- commands to execute at the subscriber, in the subscriber database:
USE [<subscriber database name>];
GO

EXEC sp_addpullsubscription @publisher = N'<publisher name>',
    @publisher_db = N'<publisher database name>',
    @publication = N'<publication name>',
    @subscription_type = N'pull';
GO

EXEC sp_addpullsubscription_agent @publisher = N'<publisher name>',
    @subscriber = N'<AG listener name>',
    @distributor = N'<distributor AG listener name>', -- this parameter should only be used if the distribution database is part of an AG.
    @publisher_db = N'<publisher database name>',
    @publication = N'<publication name>',
    @job_login = NULL,
    @job_password = NULL,
    @subscriber_security_mode = 1;
GO

참고 항목

AG에 속한 구독자에 대해 sp_addpullsubscription_agent를 실행하는 경우 저장 프로시저에 AG 수신기 이름으로 @Subscriber 매개 변수 값을 전달해야 합니다. SQL Server 2016(13.x) 및 이전 버전을 실행하거나 CU 16 이전 SQL Server 2017(14.x)을 실행하는 경우 저장 프로시저는 AG 수신기 이름을 참조하지 않습니다. 명령이 실행되는 구독자 서버 이름으로 만들어집니다. 이 문제를 해결하려면 배포 에이전트 작업@Subscriber 매개 변수를 AG 수신기 이름 값으로 수동으로 업데이트합니다.

구독자의 가용성 그룹이 장애 조치(failover)된 후 병합 에이전트 다시 시작

병합 복제의 경우 복제 관리자가 다음 단계에 따라 수동으로 구독자를 다시 구성해야 합니다.

  1. 구독자에 대한 이전 구독을 제거하려면 sp_subscription_cleanup을 실행합니다. 새 주 복제본(이전 보조 복제본)에서 이 작업을 수행합니다.

  2. 새 스냅샷을 시작으로, 새 구독을 만들어 구독을 다시 만듭니다.

참고 항목

현재 프로세스는 병합 복제 구독자에게 불편합니다. 하지만 병합 복제의 기본 시나리오는 구독자에 대해 AG를 사용하지 않는 연결이 끊긴 사용자(데스크톱, 랩톱, 핸드셋 장치)입니다.

참고 항목