대량 삽입 또는 BCP 문을 실행하려고 할 때 어설션 오류 SQL Server

이 문서는 또는 BCP 작업을 실행 BULK INSERT 하려고 할 때 발생하는 문제를 resolve 데 도움이 됩니다.

원래 제품 버전: SQL Server 2008 R2 Enterprise, SQL Server 2008 Enterprise
원래 KB 번호: 2700641

증상

다음과 같은 경우를 생각해볼 수 있습니다.

  • 서버 A 및 서버 B는 Microsoft SQL Server 2008 또는 SQL Server 2008 R2를 실행합니다.

  • 서버 A와 서버 B 간에 데이터베이스 미러링을 설정합니다.

  • 주 데이터베이스에서 BULK INSERT 또는 BCP 문을 실행합니다.

    참고

    기본적으로 CHECK_CONSTRAINTS 옵션은 또는 BCP 문을 실행할 때 꺼짐으로 BULK INSERT 설정됩니다.

  • 데이터베이스 미러링이 중단되고 데이터베이스 미러링 세션이 SUSPENDED 상태로 들어갑니다.

이 시나리오에서는 미러 서버에서 어설션이 발생합니다. 따라서 미니 덤프 파일은 SQL Server 로그 폴더에 만들어집니다. 또한 미러 서버의 SQL Server 오류 로그에 다음 오류가 표시됩니다.

참고

이 문제를 resolve 데이터베이스 미러링을 다시 초기화해야 합니다.

원인

이 문제는 주 데이터베이스의 트랜잭션 로그에 있는 잠금 호환성 정보가 미러 서버로 전송되지 않기 때문에 발생합니다.

해결 방법

이 문제를 해결하려면 옵션을 사용하여 주 데이터베이스에서 또는 BCP 문을 실행 BULK INSERT 합니다CHECK_CONSTRAINTS.

참고

CHECK_CONSTRAINTS 옵션을 사용하면 성능이 저하됩니다. 그러나 미러 서버의 잠금 어설션은 발생하지 않습니다.

추가 정보

BULK INSERT 또는 BCP 작업 중에 자식 트랜잭션이 옵션을 해제합니다CHECK_CONSTRAINTS. 이 자식 트랜잭션은 부모 트랜잭션 잠금과 호환되는 잠금을 사용합니다. 호환성 정보는 주 데이터베이스의 트랜잭션 로그에 저장됩니다. 따라서 주 데이터베이스에 자식 트랜잭션 잠금 요청이 부여됩니다.

그러나 이 호환성 정보는 미러 서버로 전송되지 않습니다. 따라서 자식 트랜잭션 잠금 요청은 미러 서버의 부모 트랜잭션 잠금과 호환되지 않습니다. 이 시나리오는 미러 서버에서 어설션을 발생합니다.