데이터베이스 미러링 및 데이터베이스 간 트랜잭션

업데이트: 2006년 12월 12일

데이터베이스 미러링은 데이터베이스 간 트랜잭션 또는 분산 트랜잭션에서 지원되지 않습니다. 이는 다음과 같은 이유로 인해 트랜잭션 원자성/무결성을 보장할 수 없기 때문입니다.

  • 데이터베이스 간 트랜잭션의 경우: 장애 조치(failover) 후 미러된 데이터베이스는 다른 서버 인스턴스에 있습니다. 이는 일반적으로 미러되지 않은 데이터베이스의 별도의 데이터베이스에 있습니다. 두 데이터베이스가 동일한 두 파트너 사이에서 미러된 경우에도 두 데이터베이스가 동시에 장애 조치를 실행한다고 보장할 수 없습니다.
  • 분산 트랜잭션의 경우: 장애 조치 후 새 주 서버는 동일한 리소스 ID를 사용하는 이전 주 서버의 DTC(Distributed Transaction Coordinator)에 연결할 수 없습니다. 따라서 새 주 서버는 해당 트랜잭션 상태를 가져올 수 없습니다.

다음 예에서는 논리적 불일치가 발생하는 방법을 보여 줍니다. 이 예에서 응용 프로그램은 데이터베이스 간 트랜잭션을 사용하여 두 행의 데이터를 삽입합니다. 한 행은 미러된 데이터베이스 A의 테이블에 삽입되고 다른 행은 데이터베이스 B의 테이블에 삽입됩니다. 데이터베이스 A는 자동 장애 조치 있는 보호 우선 모드로 미러됩니다. 트랜잭션이 커밋되는 동안 데이터베이스 A를 사용할 수 없게 되고 미러링 세션이 자동으로 데이터베이스 A의 미러로 장애 조치됩니다.

장애 조치 후에 데이터베이스 B에서는 데이터베이스 간 트랜잭션이 성공적으로 커밋될 수 있지만 장애 조치된 데이터베이스에서는 커밋되지 않습니다. 데이터베이스 A의 원래 주 서버가 실패하기 전에 데이터베이스 간 트랜잭션 로그를 미러 서버로 보내지 않은 경우 이런 문제가 발생합니다. 장애 조치 후에 새로운 주 서버에는 해당 트랜잭션이 없습니다. 데이터베이스 B에 삽입한 데이터는 그대로 유지되고 데이터베이스 A에 삽입한 데이터는 손실되었으므로 데이터베이스 A와 B가 일치하지 않습니다.

MS DTC 트랜잭션을 사용하는 동안 이와 유사한 시나리오가 발생할 수 있습니다. 예를 들어 장애 조치 후에 새로운 주 서버가 MS DTC에 연결합니다. 그러나 MS DTC는 새로운 주 서버를 알지 못하며 다른 데이터베이스에서 커밋된 것으로 간주되는 "커밋 준비 중"인 모든 트랜잭션을 종료합니다.

참고 항목

개념

분산 트랜잭션(데이터베이스 엔진)
MS DTC 분산 트랜잭션

관련 자료

데이터베이스 미러링

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 12월 12일

변경된 내용
  • 데이터베이스 미러링이 데이터베이스 간 트랜잭션 또는 분산 트랜잭션에서 지원되지 않는다는 사실과 그 이유에 대한 설명을 수정했습니다.