다음을 통해 공유


데이터베이스 미러링 세션

데이터베이스 미러링은 데이터베이스 미러링 세션의 컨텍스트 내에서 발생합니다. 이 항목에서는 사용자가 데이터베이스 미러링의 주 역할, 미러 역할 및 미러링 모니터 역할, 운영 모드, 역할 전환에 익숙하다고 가정합니다. 자세한 내용은 데이터베이스 미러링 개요을 참조하십시오.

미러 데이터베이스가 준비되고 서버 인스턴스가 구성되면 데이터베이스 소유자는 데이터베이스 미러링을 시작할 수 있습니다. 미러링이 시작되면 각 파트너는 해당 데이터베이스와 다른 파트너 및 미러링 모니터(있는 경우)에 대한 데이터베이스의 상태 정보를 유지 관리하기 시작합니다. 이 상태 정보는 서버 인스턴스가 데이터베이스 미러링 세션이라는 관계를 유지 관리하는 데 필요합니다. 데이터베이스 미러링 세션 동안 서버 인스턴스는 서로를 모니터링합니다. 상태 정보는 데이터베이스 소유자가 세션을 중지할 때까지 유지 관리됩니다. 자세한 내용은 미러링 상태데이터베이스 미러링 모니터링을 참조하십시오.

데이터베이스 미러링 세션을 시작할 때 미러 서버는 미러 데이터베이스에서 가장 최근에 적용된 트랜잭션 로그의 LSN(로그 시퀀스 번호)을 식별하고 주 서버에 모든 후속 트랜잭션(있는 경우)에 대한 트랜잭션 로그를 요청합니다. 이에 대한 응답으로 주 서버는 미리 데이터베이스로 복원되었거나 미러 서버로 전송된 마지막 로그 이후 누적된 모든 활성 로그 레코드를 미러 서버로 보냅니다. 주 데이터베이스의 로그 디스크에 누적된 보내지 않은 로그를 Send Queue라고 합니다.

미러 서버는 들어오는 로그를 즉시 디스크에 쓰고 미러 데이터베이스에 해당 로그가 적용될 때까지 보관합니다. 미러 디스크에서 대기 중인 로그를 Redo Queue라고 합니다. Redo Queue에서 대기 중인 복원되지 않은 로그의 양은 미러 데이터베이스로 장애 조치(Failover)하는 데 필요한 시간을 나타냅니다. 자세한 내용은 역할 전환 중 서비스 중단 예측을 참조하십시오.

주 서버는 클라이언트와 클라이언트 연결이 주 데이터베이스를 계속 사용할 수 있도록 합니다. 미러링이 시작된 후 클라이언트가 주 데이터베이스를 업데이트할 때마다 주 서버는 트랜잭션을 주 데이터베이스의 로그에 쓰는 동시에 해당 로그 레코드를 미러 서버로 보냅니다. 그러면 미러 서버가 즉시 이 로그 레코드를 Redo Queue의 마지막 레코드로 디스크에 씁니다.

백그라운드에서 미러 서버는 가장 오래된 로그 레코드부터 시작하여 로그를 가능한 한 빨리 미러 데이터베이스에서 레코드 단위로 다시 실행합니다. 로그 다시 실행은 가장 오래된 레코드부터 시작하여 지연된 로그 레코드를 미러 데이터베이스에 순서대로 적용하는 작업을 포함합니다. 각 로그 레코드가 한 번만 다시 실행됩니다. 미러 서버에서 로그를 다시 실행함에 따라 미러 데이터베이스가 계속 롤포워드됩니다. 주 서버가 주 데이터베이스의 로그를 자르거나 축소할 때 미러 서버도 로그 스트림의 같은 지점에서 로그를 축소합니다.

일반적으로 다시 실행을 사용하면 미러 데이터베이스가 빨리 주 데이터베이스와 동기화됩니다. 미러 데이터베이스가 주 데이터베이스와 완전히 동기화되는지의 여부는 세션의 운영 모드에 따라 결정됩니다. 동기 보호 우선 모드에서 주 서버는 새 트랜잭션이 미러 서버의 로그 디스크에 기록될 때까지 트랜잭션을 기다려서 확인합니다. 누적된 로그 레코드가 미러 서버로 전송되면 미러 데이터베이스가 주 데이터베이스와 동기화됩니다.

세션 중에 주 서버에서 모든 로그 레코드를 즉시 보낼 수 없는 경우 보내지 않은 로그 레코드가 Send Queue에 누적됩니다. 동기 보호 우선 모드에서 보내지 않은 새 로그는 동기화 후에 미러링이 일시 중지되거나 일시 중단된 경우에만 누적됩니다. 반면 비동기 성능 우선 모드에서는 미러링이 일시 중지되거나 일시 중단된 경우는 물론 미러 서버가 미러링 중에 뒤쳐질 때마다 보내지 않은 로그가 누적됩니다. 보내지 않은 로그의 양은 주 서버가 실패할 경우 손실될 수 있는 데이터를 나타냅니다.

[!참고]

다시 실행이 실패하면 미러 서버는 데이터베이스를 SUSPENDED 상태로 만들어 세션을 일시 중지합니다. 세션을 다시 시작하려면 데이터베이스 소유자가 실패 원인을 해결해야 합니다.

동시 세션

지정된 서버 인스턴스는 같은 서버 인스턴스 또는 다른 서버 인스턴스에 있는 여러 개의 동시 데이터베이스 미러링 세션(미러된 데이터베이스당 한 번)에 참여할 수 있습니다. 모든 데이터베이스 미러링 세션에서 서버 인스턴스가 파트너나 미러링 모니터 서버로만 사용되는 경우가 많습니다. 그러나 각 세션은 다른 세션과 독립적이므로 서버 인스턴스가 일부 세션에서는 파트너 역할을 하고 다른 세션에서는 미러링 모니터 서버 역할을 할 수 있습니다. 예를 들어 3개 서버 인스턴스(SSInstance_1, SSInstance_2 및 SSInstance_3)에서의 다음 4개 세션을 고려합니다. 각 서버 인스턴스가 일부 세션에서는 파트너 역할을 하고 다른 세션에서는 미러링 모니터 서버 역할을 합니다.

서버 인스턴스

데이터베이스 A에 대한 세션

데이터베이스 B에 대한 세션

데이터베이스 C에 대한 세션

데이터베이스 D에 대한 세션

SSInstance_1

미러링 모니터

파트너

파트너

파트너

SSInstance_2

파트너

미러링 모니터

파트너

파트너

SSInstance_3

파트너

파트너

미러링 모니터

미러링 모니터

다음 그림에서는 두 미러링 세션에서 함께 파트너로 참여하는 두 서버 인스턴스를 보여 줍니다. 한 세션은 Db_1이라는 데이터베이스에 대한 세션이고 다른 세션은 Db_2라는 데이터베이스에 대한 세션입니다.

2개의 동시 세션에 있는 두 서버 인스턴스

각 데이터베이스는 서로 독립적입니다. 예를 들어 서버 인스턴스는 초기에 두 데이터베이스의 미러 서버일 수 있습니다. 두 데이터베이스 중 하나가 장애 조치를 수행할 경우 서버 인스턴스는 장애 조치를 수행한 데이터베이스의 주 서버가 되는 한편 다른 데이터베이스에 대해서는 계속 미러 서버 역할을 수행합니다.

또 다른 예로 서버 인스턴스가 자동 장애 조치 있는 보호 우선 모드에서 실행 중인 둘 이상의 데이터베이스에 대해 주 서버가 된다고 가정합니다. 서버 인스턴스가 실패하면 모든 데이터베이스는 해당하는 각 미러 데이터베이스에 대해 자동으로 장애 조치(Failover)를 수행합니다.

서버 인스턴스가 파트너 및 미러링 모니터 두 가지 모두로 작동하도록 설정하는 경우 데이터베이스 미러링 끝점이 두 역할을 모두 지원해야 합니다. 자세한 내용은 데이터베이스 미러링 끝점을 참조하십시오. 또한 리소스 충돌을 줄이기 위해 시스템에 충분한 리소스가 있어야 합니다.

[!참고]

미러된 데이터베이스는 서로 독립적이므로 여러 데이터베이스에 대한 장애 조치를 하나의 그룹으로 처리할 수 없습니다.

데이터베이스 미러링 세션에 대해 생성되는 스레드

서버 인스턴스가 데이터베이스 미러링 세션에 대해 만드는 스레드의 종류는 서버 인스턴스가 수행하고 있는 미러링 역할에 따라 부분적으로 달라집니다. 지정된 세션에는 다음 스레드 중 일부 또는 전부가 포함됩니다.

  • 데이터베이스 미러링 통신을 위한 하나의 전역 스레드. 이 스레드는 Service Broker에 의해 시작됩니다.

  • 서버 인스턴스가 미러링 파트너 역할을 하는 경우(주 서버이든 미러 서버이든 관계없음):

    • 미러된 데이터베이스당 이벤트 처리용 스레드 하나

    • 이벤트 스레드 차단 방지를 위해 미러된 데이터베이스당 비동기 태스크(예: 로그 전송 또는 로그 작성)용 스레드 하나

  • 인스턴스가 미러 서버 역할을 수행할 때마다:

    • 대기 중인 로그 제출, 페이지 미리 읽기 수행, 잠금 다시 획득 등을 위한 다시 실행 관리자 스레드 하나

    • SQL Server Standard의 경우 미러 데이터베이스당 다시 실행 스레드 하나, SQL Server Enterprise의 경우 CPU 4개마다 미러 데이터베이스당 다시 실행 스레드 하나. 이러한 스레드는 실제 로그 다시 실행 작업을 수행합니다.

  • 인스턴스가 미러링 모니터 역할을 수행하는 경우:

    • 인스턴스가 미러링 모니터 역할을 수행하고 있는 모든 미러링 세션에 대한 미러링 모니터 메시지를 처리하기 위한 전역 스레드 하나

데이터베이스 미러링 세션의 필수 구성 요소

미러링 세션을 시작하려면 먼저 데이터베이스 소유자 또는 시스템 관리자가 미러 데이터베이스를 만들고 끝점과 로그인을 설정해야 하며 경우에 따라서는 인증서를 만들고 설정해야 합니다. 자세한 내용은 데이터베이스 미러링 설정을 참조하십시오.

미러 데이터베이스를 만들려면 최소한 주 데이터베이스의 전체 백업과 후속 로그 백업 하나가 필요하며 WITH NORECOVERY를 사용하여 두 백업을 모두 미러 서버 인스턴스로 복원해야 합니다. 또한 미러링을 시작하려면 필수 로그 백업 후에 추가 로그 백업이 수행된 경우 추가 로그 백업도 모두 수동으로 적용해야 합니다(항상 WITH NORECOVERY 사용). 최신 로그 백업을 적용한 후 미러링을 시작할 수 있습니다. 자세한 내용은 미러 데이터베이스에서 미러링 준비를 참조하십시오.

세션을 일시 중지할 경우 주 서버의 트랜잭션 로그에 미치는 영향

데이터베이스 소유자는 언제든지 세션을 일시 중지할 수 있습니다. 일시 중지는 미러링을 제거하는 동안 세션 상태를 유지합니다. 세션이 일시 중지되면 주 서버에서 새 로그 레코드를 미러 서버로 보내지 않습니다. 이러한 레코드는 모두 활성 상태로 유지되며 주 데이터베이스의 트랜잭션 로그에 누적됩니다. 데이터베이스 미러링 세션이 일시 중지된 동안에는 트랜잭션 로그를 자를 수 없습니다. 따라서 데이터베이스 미러링 세션을 너무 오래 일시 중지하면 로그가 가득 찰 수 있습니다.

자세한 내용은 데이터베이스 미러링 일시 중지 및 재개를 참조하십시오.

클라이언트 연결

데이터베이스 미러링 세션에 대한 클라이언트 연결 지원은 SQL Server용 Microsoft .NET Data Provider에서 제공합니다. 자세한 내용은 미러된 데이터베이스에 클라이언트 연결을 참조하십시오.