복제된 데이터의 유효성 검사
트랜잭션 및 병합 복제를 사용하면 구독자의 데이터가 게시자의 데이터와 일치하는지 확인할 수 있습니다. 게시에 대한 특정 구독 또는 모든 구독에 대해 유효성 검사를 수행할 수 있습니다. 다음 유효성 검사 유형 중 하나를 지정합니다. 배포 에이전트 또는 병합 에이전트가 다음에 실행될 때 해당 유형에 따라 데이터의 유효성을 검사합니다.
- 행 개수만. 이 유형은 구독자에 있는 테이블의 행 개수가 게시자에 있는 테이블의 행 개수와 동일한지 여부의 유효성만 검사하고 행 내용 일치 여부의 유효성은 검사하지 않습니다. 행 개수 유효성 검사에서는 최소 수준의 데이터 문제 인식을 위한 검사만 수행됩니다.
- 행 개수와 이진 체크섬. 게시자 및 구독자에서 행 개수의 유효성을 검사할 뿐만 아니라 Microsoft SQL Server 2000 에서 제공되는 체크섬 알고리즘을 사용하여 모든 데이터의 체크섬을 계산합니다. 행 개수 검사가 실패하면 체크섬 검사가 수행되지 않습니다.
- 행 개수와 체크섬. 이 옵션은 더 이상 사용되지 않으며 Microsoft SQL Server 버전 7.0을 실행하는 구독자에서만 사용됩니다. 이 옵션의 실행 방식은 행 개수와 이진 체크섬의 실행 방식과 유사하지만 SQL Server 버전 7.0에서 사용할 수 있는 체크섬 알고리즘을 사용합니다. 자세한 내용은 이 항목의 "데이터 유효성 검사 작업 방식" 섹션을 참조하십시오.
구독자의 데이터와 게시자의 데이터가 일치하는지에 대한 유효성 검사 외에도 병합 복제는 각 구독자에 대해 데이터가 올바르게 분할되었는지에 대한 유효성을 검사하는 기능을 제공합니다. 자세한 내용은 병합 구독자의 파티션 정보 유효성 검사를 참조하십시오.
데이터의 유효성을 검사하려면
구독에 있는 모든 아티클의 유효성을 검사하려면 SQL Server Management Studio, 저장 프로시저 또는 RMO(복제 관리 개체)를 사용합니다. 스냅숏 게시와 트랜잭션 게시에 있는 개별 아티클의 유효성을 검사하려면 저장 프로시저를 사용해야 합니다.
- Microsoft SQL Server Management Studio: 방법: 구독자에서 데이터 유효성 검사(SQL Server Management Studio)
- 복제 Transact-SQL 프로그래밍: How to: Validate Data at the Subscriber (Replication Transact-SQL Programming)
- RMO(복제 관리 개체) 프로그래밍: How to: Validate Data at the Subscriber (RMO Programming)
데이터 유효성 검사 결과
유효성 검사가 완료되면 배포 에이전트 또는 병합 에이전트는 성공 여부에 대한 메시지를 기록합니다. 복제는 유효성이 확인되지 못한 행은 보고하지 않습니다. 이러한 메시지는 SQL Server Management Studio, 복제 모니터 및 복제 시스템 테이블에서 볼 수 있습니다. 위에 나열된 방법 항목에서 유효성 검사를 실행하고 결과를 확인하는 방법을 설명합니다.
유효성 검사 실패를 처리하려면 다음 사항을 살펴보십시오.
- 복제: 구독자가 데이터 유효성 검사에 실패했습니다라는 복제 경고를 구성하여 검사 실패에 대한 알림을 받도록 합니다. 자세한 내용은 방법: 미리 정의된 복제 경고 구성(SQL Server Management Studio)을 참조하십시오.
- 유효성 검사 실패가 응용 프로그램에 문제가 됩니까? 유효성 검사 실패가 문제가 되는 경우 수동으로 데이터를 업데이트하여 동기화하거나 구독을 다시 초기화합니다.
- tablediff 유틸리티를 사용하여 데이터를 업데이트할 수 있습니다. 이 유틸리티의 사용 방법은 How to: Compare Replicated Tables for Differences (Replication Programming)를 참조하십시오.
- 다시 초기화에 대한 자세한 내용은 구독 다시 초기화를 참조하십시오.
데이터 유효성 검사에 대한 고려 사항
데이터 유효성을 검사할 때 다음 사항을 고려하십시오.
- 데이터 유효성을 검사하기 전에 구독자에서 모든 업데이트 작업을 중지해야 합니다. 유효성 검사가 수행 중일 때는 게시자에서 작업을 중지할 필요가 없습니다.
- 큰 데이터 집합의 유효성을 검사할 때는 체크섬 및 이진 체크섬이 프로세서 리소스를 많이 요구할 수 있으므로 복제에 사용되는 서버에서 진행 중인 작업 수가 가장 적은 경우 유효성 검사가 수행되도록 예약해야 합니다.
- 복제는 테이블의 유효성만 검사하고 게시자의 스키마 전용 아티클(예: 저장 프로시저)이 구독자의 스키마 전용 아티클과 동일한지 여부의 유효성은 검사하지 않습니다.
- 게시된 테이블에는 이진 체크섬을 사용할 수 있습니다. 체크섬은 열 필터가 있는 테이블 또는 열을 삭제 또는 추가하는 ALTER TABLE 문으로 인해 열 오프셋이 다른 논리적 테이블 구조의 유효성을 검사할 수 없습니다.
- 체크섬에서는 text, ntext 또는 image 열의 데이터를 계산하지 않습니다.
- 구독자에서의 데이터 형식과 게시자에서의 데이터 형식이 다른 경우 이진 체크섬 또는 체크섬 유효성 검사가 실패할 수 있습니다. 구독을 수동으로 초기화하고 구독자에서 다른 데이터 형식을 사용하는 경우나 아티클에 대해 다음 스키마 개체를 사용하는 경우 이런 오류가 발생할 수 있습니다.
- 기본 데이터 형식에 대한 사용자 정의 유형 매핑(스키마 옵션 0x20)
- ntext에 대한 xml 매핑(스키마 옵션 0x10000000)
- 이전 버전의 SQL Server 에서 지원되는 데이터 형식에 대한 nvarchar(max) 및 varbinary(max) 매핑(스키마 옵션 0x20000000)
스키마 옵션에 대한 자세한 내용은 데이터 및 데이터베이스 개체 게시를 참조하십시오.
- 트랜잭션 복제의 변환 가능한 구독에서는 이진 체크섬 및 체크섬 유효성 검사가 지원되지 않습니다.
- 비-SQL Server(Non-SQL Server) 구독자로 복제된 데이터에 대해서는 유효성 검사가 지원되지 않습니다.
데이터 유효성 검사 작업 방식
SQL Server 는 게시자에서 행 개수 또는 체크섬을 계산한 다음 그 값을 구독자에서 계산된 행 개수 또는 체크섬과 비교하여 데이터의 유효성을 검사합니다. 전체 게시 테이블과 전체 구독 테이블에 대해 각각 한 번씩 계산되지만 text, ntext 또는 image 열의 데이터는 계산되지 않습니다.
계산이 수행되는 동안 행 개수 또는 체크섬이 실행될 테이블에 공유 잠금이 임시로 지정되지만 대부분 몇 초 내에 계산이 신속히 완료되고 공유 잠금이 제거됩니다.
이진 체크섬을 사용할 때는 데이터 페이지의 실제 행에 대한 CRC 대신 열 단위의 32비트 중복 검사(CRC)가 수행됩니다. 따라서 테이블의 열이 데이터 페이지에서 실제로 임의의 순서로 배열될 수 있지만, 해당 행에 대해 동일한 CRC로 계산됩니다. 이진 체크섬 유효성 검사는 게시에 행 또는 열 필터가 있을 때 사용할 수 있습니다. SQL Server 버전 7.0을 실행하는 구독자는 SQL Server 버전 7.0에서 릴리스된 체크섬 알고리즘을 사용해야 합니다. 이 알고리즘은 SQL Server 2000 이후 버전에서 생성된 CRC 값과 다른 CRC 값을 생성합니다. SQL Server 버전 7.0에서 릴리스된 체크섬 루틴은 열 필터가 있는 테이블 또는 열을 삭제 또는 추가하는 ALTER TABLE 문으로 인해 열 오프셋이 다른 논리적 테이블 구조의 유효성을 검사할 수 없습니다.