데이터베이스 미러링 및 복제(SQL Server)

적용 대상:SQL Server

복제와 함께 데이터베이스 미러링을 사용하여 SQL Server에서 게시 데이터베이스의 가용성을 개선할 수 있습니다. 데이터터베이스 미러링에는 일반적으로 서로 다른 컴퓨터에 있는 두 개의 단일 데이터베이스 복사본이 사용됩니다. 현재 클라이언트는 특정 시점에 데이터베이스 복사본을 하나만 사용할 수 있습니다. 이 복사본을 주 데이터베이스라고 합니다. 주 데이터베이스에 대한 클라이언트의 업데이트가 미러 데이터베이스라고 하는 데이터베이스의 다른 복사본에 적용됩니다. 미러링에는 주 데이터베이스에서 수행된 모든 삽입, 업데이트 또는 삭제의 트랜잭션 로그를 미러 데이터베이스에 적용하는 작업이 포함됩니다.

미러에 대한 복제 장애 조치(Failover)는 게시 데이터베이스에서 완전히 지원되지만 구독 데이터베이스에서는 지원이 제한적으로 제공됩니다. 데이터베이스 미러링은 배포 데이터베이스는 지원하지 않습니다. 복제를 구성하지 않고 배포 데이터베이스 또는 구독 데이터베이스를 복구하는 방법에 대한 자세한 내용은 복제된 데이터베이스 백업 및 복원을 참조하세요.

참고 항목

장애 조치 이후에는 미러 서버가 주 서버가 됩니다. 이 항목에서 "주" 및 "미러"는 항상 원래 주와 미러를 말합니다.

데이터베이스 미러링에서 복제를 사용하기 위한 요구 사항 및 고려 사항

데이터베이스 미러링과 함께 복제를 사용할 때는 다음과 같은 요구 사항 및 고려 사항에 유의하세요.

  • 주 서버와 미러 서버는 배포자를 공유해야 합니다. 게시자에 계획하지 않은 장애 조치(failover)가 있는 경우 더 큰 내결함성을 제공하는 원격 배포자인 것이 좋습니다.

  • 복제에는 읽기 전용 구독자 또는 큐에 지정된 업데이트 구독자가 포함된 병합 복제 및 트랜잭션 복제에 대한 게시 데이터베이스 미러링이 지원됩니다. 즉시 업데이트하는 구독자, Oracle 게시자, 피어 투 피어 토폴로지의 게시자 및 다시 게시하는 것은 지원되지 않습니다.

  • 데이터베이스 외부에 있는 메타데이터 및 개체(예: 로그인, 작업, 연결된 서버 등)는 미러 서버에 복사되지 않습니다. 미러에 메타데이터 및 개체가 필요한 경우 이를 수동으로 복사해야 합니다. 자세한 내용은 역할 전환 후 로그인 및 작업 관리(SQL Server)를 참조하세요.

데이터베이스 미러링을 사용하여 복제 구성

복제 및 데이터베이스 미러링 구성에는 다섯 단계가 포함됩니다. 각 단계에 대해서는 다음 구역에서 자세하게 설명합니다.

  1. 게시자를 구성합니다.

  2. 데이터베이스 미러링을 구성합니다.

  3. 주 서버와 동일한 배포자를 사용하도록 미러 서버를 구성합니다.

  4. 장애 조치(failover)에 대한 복제 에이전트를 구성합니다.

  5. 복제 모니터에 주 서버와 미러 서버를 추가합니다.

1단계와 2단계는 반대 순서로 수행할 수도 있습니다.

게시 데이터베이스에 대한 데이터베이스 미러링을 구성하려면

  1. 게시자를 구성합니다.

    1. 원격 배포자를 사용하는 것이 좋습니다. 배포 구성에 대한 자세한 내용은 배포 구성을 참조하세요.

    2. 스냅샷용 데이터베이스와 트랜잭션 게시 및/또는 병합 게시를 설정할 수 있습니다. 둘 이상의 게시 유형을 포함할 미러된 데이터베이스의 경우 sp_replicationdboption을 사용하여 동일한 노드에서 두 유형 모두에 대해 데이터베이스를 사용하도록 설정해야 합니다. 예를 들어 주 서버에서 다음 저장 프로시저 호출을 실행할 수 있습니다.

      exec sp_replicationdboption @dbname='<PublicationDatabase>', @optname='publish', @value=true;  
      exec sp_replicationdboption @dbname='<PublicationDatabase>', @optname='mergepublish', @value=true;  
      

      게시를 만드는 방법은 데이터 및 데이터베이스 개체 게시를 참조하세요.

  2. 데이터베이스 미러링을 구성합니다. 자세한 내용은 Windows 인증을 사용하여 데이터베이스 미러링 세션 구성(SQL Server Management Studio)데이터베이스 미러링 설정(SQL Server)을 참조하세요.

  3. 미러 서버에 대한 배포를 구성합니다. 미러 이름을 게시자로 지정하고 주 서버가 사용하는 것과 동일한 배포자 및 스냅샷 폴더를 지정합니다. 예를 들어 저장 프로시저로 복제를 구성하는 경우 배포자에서 sp_adddistpublisher 를 실행한 다음 미러에서 sp_adddistributor 를 실행합니다. sp_adddistpublisher의 경우 다음과 같이 합니다.

    • @publisher 매개 변수의 값을 미러 서버 네트워크 이름으로 설정합니다.

    • @working_directory 매개 변수의 값을 주 서버가 사용하는 스냅샷 폴더로 설정합니다.

  4. –PublisherFailoverPartner 에이전트 매개 변수에 대한 미러 서버 이름을 지정합니다. 이 에이전트 매개 변수는 다음 에이전트가 장애 조치(failover) 후 미러 서버를 식별하는 데 필요합니다.

    • 스냅샷 에이전트(모든 게시용)

    • 로그 판독기 에이전트(모든 트랜잭션 게시용)

    • 큐 판독기 에이전트(지연 업데이트 구독을 지원하는 트랜잭션 게시용)

    • 병합 에이전트(병합 구독용)

    • SQL Server 복제 수신기(replisapi.dll: 웹 동기화를 사용하여 동기화된 병합 구독용)

    • SQL 병합 ActiveX 컨트롤(컨트롤과 동기화된 병합 구독용)

    배포 에이전트 및 배포 ActiveX 컨트롤은 게시자에 연결되지 않기 때문에 이 매개 변수가 없습니다.

    에이전트 매개 변수 변경 내용은 다음에 에이전트가 시작될 때 적용됩니다. 에이전트가 지속적으로 실행되는 경우 에이전트를 중지하고 다시 시작해야 합니다. 매개 변수는 에이전트 프로필 및 명령 프롬프트에서 지정할 수 있습니다. 자세한 내용은 다음을 참조하세요.

    에이전트 프로필에 –PublisherFailoverPartner를 추가한 다음, 프로필에 미러 이름을 지정하는 것이 좋습니다. 예를 들어 저장 프로시저를 사용하여 복제본를 구성하려는 경우 다음을 실행하세요.

    -- Execute sp_help_agent_profile in the context of the distribution database to get the list of profiles.  
    -- Select the profile id of the profile that needs to be updated from the result set.  
    -- In the agent_type column returned by sp_help_agent_profile:   
    -- 1 = Snapshot Agent; 2 = Log Reader Agent; 3 = Distribution Agent; 4 = Merge Agent; 9 = Queue Reader Agent.  
    
    exec sp_help_agent_profile;  
    
    -- Setting the -PublisherFailoverPartner parameter in the default Snapshot Agent profile (profile 1).  
    -- Execute sp_add_agent_parameter in the context of the distribution database.  
    exec sp_add_agent_parameter @profile_id = 1, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'<Failover Partner Name>';  
    
    -- Setting the -PublisherFailoverPartner parameter in the default Merge Agent profile (profile 6).  
    -- Execute sp_add_agent_parameter in the context of the distribution database.  
    exec sp_add_agent_parameter @profile_id = 6, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'<Failover Partner Name>';  
    
  5. 복제 모니터에 주 서버와 미러 서버를 추가합니다. 자세한 내용은 복제 모니터링에서 게시자 추가 및 제거를 참조하세요.

미러된 게시 데이터베이스 유지 관리

미러된 게시 데이터베이스를 유지 관리하는 것은 기본적으로 미러되지 않은 데이터베이스를 유지 관리하는 것과 동일하며 다음 사항을 고려합니다.

  • 관리 및 모니터링은 활성 서버에서 수행되어야 합니다. SQL Server Management Studio에서 게시는 현재 서버에 대해서만 로컬 게시 폴더 아래에 표시됩니다. 예를 들어 미러 서버에 장애 조치(failover)하는 경우 게시는 미러 서버에 표시되고 더 이상 주 서버에 표시되지 않습니다. 데이터베이스가 미러 서버로 장애 조치(failover)된 경우에는 Management Studio 와 복제 모니터링을 수동으로 새로 고쳐서 변경 내용을 적용해야 할 수 있습니다.

  • 복제 모니터링은 주 서버와 미러 서버 모두에 대한 개체 트리에 게시자 노드를 표시합니다. 주 서버가 활성 서버이면 게시 정보가 복제 모니터의 주 노드 아래에만 표시됩니다.

    미러 서버가 활성 서버인 경우에는 다음과 같습니다.

    • 에이전트에 오류가 있는 경우 오류는 미러 노드가 아닌 주 노드에만 표시됩니다.

    • 주 서버를 사용할 수 없는 경우 주 노드 및 미러 노드는 동일한 게시 목록을 표시합니다. 미러 노드 아래의 게시에서 모니터링을 수행해야 합니다.

  • 저장 프로시저 또는 RMO(복제 관리 개체)를 사용하여 미러 서버에서 복제를 관리할 때 게시자 이름을 지정하는 경우 데이터베이스에서 복제를 사용하도록 설정된 인스턴스의 이름을 지정해야 합니다. 올바른 이름을 확인하려면 publishingservername함수를 사용하십시오.

    게시 데이터베이스가 미러된 경우 미러된 데이터베이스에 저장된 복제 메타데이터는 주 데이터베이스에 저장된 메타데이터와 동일합니다. 따라서 주 서버에서 복제를 사용하도록 설정된 게시 데이터베이스의 경우 미러 서버의 시스템 테이블에 저장된 게시자 인스턴스 이름은 미러 서버가 아닌 주 서버의 이름입니다. 이는 게시 데이터베이스가 미러 서버에 장애 조치(failover)하는 경우 복제 구성 및 유지 관리에 영향을 줍니다. 예를 들어 장애 조치(failover) 후에 미러 서버에서 저장 프로시저로 복제를 구성할 때 주 서버에서 사용하도록 설정된 게시 데이터베이스에 끌어오기 구독을 추가하려면, sp_addpullsubscription 또는 sp_addmergepullsubscription@publisher 매개 변수에 대해 미러 서버 이름보다는 주 서버의 이름을 지정해야 합니다.

    미러 서버로 장애 조치(failover)된 후 미러 서버에 게시 데이터베이스를 설정하면 시스템 테이블에 저장된 게시자 인스턴스 이름이 미러 서버의 이름이며, 이 경우 @publisher 매개 변수에 대해 미러 서버의 이름을 사용하게 됩니다.

    참고 항목

    sp_addpublication과 같은 일부 경우, @publisher 매개 변수는 SQL Server 이외 게시자에 대해서만 지원되며, 이 경우 SQL Server 데이터베이스 미러링과는 관련이 없습니다.

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

미러링이 제거된 경우의 복제 동작

게시된 데이터베이스에서 미러링이 제거된 경우에는 다음 문제에 주의하십시오.

  • 주 서버에서 게시 데이터베이스가 더 이상 미러되지 않는 경우에는 원래의 주 서버에 대해 변경되지 않은 상태로 복제가 계속 작동합니다.

  • 게시 데이터베이스가 주 서버에서 미러 서버로 장애 조치(failover)하고 미러링 관계가 나중에 비활성화되거나 제거되면 복제 에이전트는 미러 서버에 대해 작동하지 않습니다. 주 서버가 영구적으로 손실되면 게시자로 지정된 미러 서버를 사용하여 복제를 사용하지 않도록 설정한 다음 다시 구성합니다.

  • 데이터베이스 미러링을 완전히 제거된 경우 미러 데이터베이스는 복구 상태이며 작동하려면 복원해야 합니다. 복제와 관련하여 복구된 데이터베이스의 동작은 KEEP_REPLICATION 옵션이 지정되었는지 여부에 따라 달라집니다. 이 옵션은 복원 작업에서 게시된 데이터베이스를 해당 데이터베이스가 만들어진 서버 외의 다른 서버로 복원할 경우 복제 설정을 보존하도록 지정합니다. 다른 게시 데이터베이스를 사용할 수 없는 경우에만 KEEP_REPLICATION 옵션을 사용합니다. 다른 게시 데이터베이스가 그대로 유지되고 복제 중인 경우 이 옵션은 지원되지 않습니다. KEEP_REPLICATION에 대한 자세한 내용은 RESTORE(Transact-SQL)를 참조하세요.

로그 판독기 에이전트 동작

다음 표에서는 데이터베이스 미러링의 다양한 운영 모드에 대한 로그 판독기 에이전트 동작에 대해 설명합니다.

운영 모드 미러 서버를 사용할 수 없는 경우 로그 판독기 에이전트 동작
자동 장애 조치 있는 보호 우선 모드 미러 서버를 사용할 수 없는 경우 로그 판독기 에이전트는 명령을 배포 데이터베이스에 전달합니다. 미러 서버가 다시 온라인 상태가 되고 주 서버의 모든 트랜잭션이 포함되기 전에는 주 서버가 미러 서버로 장애 조치될 수 없습니다.
성능 우선 모드 미러 서버를 사용할 수 없는 경우 주 데이터베이스가 노출된 상태(즉, 미러되지 않은 상태)로 실행됩니다. 하지만 로그 판독기 에이전트는 미러 서버에 저장된 트랜잭션만 복제합니다. 서비스가 강제되고 미러 서버가 주 서버의 역할을 수행하는 경우 로그 판독기 에이전트는 미러 서버에 따라 작동되며 새로운 트랜잭션을 가져오기 시작합니다.

미러 서버가 주 서버에 뒤처지면 복제 지연 시간이 증가합니다.
자동 장애 조치(Failover)를 지원하지 않는 보호 우선 모드 커밋된 모든 트랜잭션이 미러 서버의 디스크에 기록되는 것을 보장합니다. 로그 판독기 에이전트는 미러 서버에 저장된 트랜잭션만 복제합니다. 미러 서버를 사용할 수 없는 경우 주 서버는 데이터베이스에 대한 더 이상의 작동을 허용하지 않기 때문에 로그 에이전트에는 복제할 트랜잭션이 없게 됩니다.

참고 항목

SQL Server 복제
로그 전달 및 복제(SQL Server)