다음을 통해 공유


복제된 데이터 유효성 검사

적용 대상: SQL Server Azure SQL 데이터베이스

이 항목에서는 SQL Server Management Studio, Transact-SQL 또는 RMO(복제 관리 개체)를 사용하여 SQL Server에서 구독자의 데이터에 대한 유효성을 검사하는 방법에 대해 설명합니다.

트랜잭션 및 병합 복제를 사용하면 구독자의 데이터가 게시자의 데이터와 일치하는지 확인할 수 있습니다. 게시에 대한 특정 구독 또는 모든 구독에 대해 유효성 검사를 수행할 수 있습니다. 다음 유효성 검사 유형 중 하나를 지정하면 다음에 실행될 때 배포 에이전트 또는 병합 에이전트 데이터의 유효성을 검사합니다.

  • 행 개수만. 이렇게 하면 구독자의 테이블에 게시자의 테이블과 동일한 수의 행이 있는지 여부를 확인하지만 행 내용이 일치하는지는 검사하지 않습니다. 행 개수 유효성 검사는 데이터 문제를 인식할 수 있는 간단한 유효성 검사 방법을 제공합니다.
  • 행 개수 확인 및 이진 체크섬. 게시자 및 구독자에서 행 개수를 확인하고 체크섬 알고리즘을 사용하여 모든 데이터의 체크섬을 계산합니다. 행 개수 확인에 실패하면 체크섬이 수행되지 않습니다.

구독자의 데이터와 게시자의 데이터가 일치하는지에 대한 유효성 검사 외에도 병합 복제는 각 구독자에 대해 데이터가 올바르게 분할되었는지에 대한 유효성을 검사하는 기능을 제공합니다. 자세한 내용은 병합 구독자에 대한 파티션 정보 유효성 검사를 참조하세요.

참고 항목

Azure SQL Managed Instance는 스냅샷 및 트랜잭션 복제를 위한 게시자, 배포자 및 구독자일 수 있습니다. Azure SQL Database의 데이터베이스는 스냅샷과 트랜잭션 복제를 위한 밀어넣기 구독자만 될 수 있습니다. 자세한 내용은 Azure SQL 데이터베이스Azure SQL Managed Instance를 사용하는 트랜잭션 복제를 참조하세요.

데이터 유효성 검사 작동 방식

SQL Server는 게시자에서 행 개수 또는 체크섬을 계산한 다음 해당 값을 구독자에서 계산된 행 개수 또는 체크섬과 비교하여 데이터의 유효성을 검사합니다. 전체 게시 테이블과 전체 구독 테이블에 대해 각각 하나의 값이 계산되지만 text, ntext 이미지 열의 데이터는 계산에 포함되지 않습니다.

계산이 수행되는 동안 행 개수 또는 체크섬이 실행되는 테이블에 공유 잠금이 일시적으로 배치되지만 계산은 신속하게 완료되고 공유 잠금은 일반적으로 몇 초 만에 제거됩니다.

이진 체크섬을 사용하는 경우 32비트 CRC(중복 검사)는 데이터 페이지의 실제 행에 있는 CRC가 아닌 열 단위로 발생합니다. 이렇게 하면 테이블이 있는 열이 데이터 페이지에서 물리적으로 순서대로 유지되지만 행에 대해 동일한 CRC로 계산할 수 있습니다. 게시에 행 또는 열 필터가 있는 경우 이진 체크섬 유효성 검사를 사용할 수 있습니다.

데이터의 유효성 검사 절차는 세 부분으로 구성됩니다.

  1. 단일 구독 또는 게시에 대한 모든 구독이 유효성 검사를 위해 표시됩니다. Microsoft SQL Server Management Studio의 로컬 게시 폴더로컬 구독 폴더에서 사용할 수 있는 구독 유효성 검사, 구독 유효성 검사모든 구독 유효성 검사 대화 상자에서 유효성을 검사할 구독을 표시합니다. 모든 구독 탭, 구독 조사 목록 탭 및 복제 모니터의 게시 노드에서 구독을 표시할 수도 있습니다. 복제 모니터를 시작하는 방법은 복제 모니터 시작을 참조하세요.

  2. 구독의 유효성은 배포 에이전트(트랜잭션 복제의 경우) 또는 병합 에이전트(병합 복제의 경우)에 의해 동기화될 때 검사됩니다. 배포 에이전트는 일반적으로 계속 실행되므로 유효성 검사가 바로 수행됩니다. 병합 에이전트는 일반적으로 요청 시 실행되므로 에이전트를 실행한 다음 유효성 검사가 수행됩니다.

  3. 유효성 검사 결과는 다음 메뉴에서 확인할 수 있습니다.

    • 트랜잭션 복제용 배포자-구독자 기록 탭 및 병합 복제용 동기화 기록 탭의 복제 모니터 내 세부 정보 창
    • Management Studio의 동기화 상태 보기 대화 상자

고려 사항 및 제한 사항

데이터의 유효성을 검사할 때 다음 문제를 고려하세요.

  • 데이터의 유효성을 검사하기 전에 구독자에서 모든 업데이트 작업을 중지해야 합니다(유효성 검사가 수행되는 경우 게시자에서 작업을 중지할 필요는 없음).
  • 큰 데이터 집합의 유효성을 검사할 때는 체크섬 및 이진 체크섬이 프로세서 리소스를 많이 요구할 수 있으므로 복제에 사용되는 서버에서 진행 중인 작업 수가 가장 적은 경우 유효성 검사가 수행되도록 예약해야 합니다.
  • 복제는 테이블만 유효성을 검사합니다. 게시자 및 구독자에서 스키마 전용 문서(예: 저장 프로시저)가 동일한지 여부를 확인하지 않습니다.
  • 이진 체크섬은 게시된 테이블과 함께 사용될 수 있습니다. 체크섬은 열 필터가 있는 테이블 또는 열 오프셋이 다른 논리 테이블 구조의 유효성을 검사할 수 없습니다(열을 삭제하거나 추가하는 ALTER TABLE 문으로 인해).
  • 복제 유효성 검사에서는 checksumbinary_checksum 함수를 사용합니다. 해당 동작에 대한 자세한 내용은 CHECKSUM(Transact-SQL)BINARY_CHECKSUM(Transact-SQL)을 참조하세요.
  • 구독자에서 데이터 형식이 게시자와 다른 경우 이진 체크섬 또는 체크섬을 사용하여 유효성 검사를 수행하면 오류를 잘못 보고할 수 있습니다. 다음 중 하나를 수행하면 이러한 결과가 발생합니다.
    • 이전 버전의 SQL Server에 대한 데이터 형식을 매핑하도록 스키마 옵션을 명시적으로 설정한 경우
    • 병합 게시의 게시 호환성 수준을 이전 버전의 SQL Server로 설정하고 게시된 테이블에는 이 버전에 매핑해야 하는 하나 이상의 데이터 형식이 포함되어 있는 경우
    • 구독을 수동으로 초기화하고 구독자에서 다른 데이터 형식을 사용하는 경우
  • 트랜잭션 복제를 위해 변환 가능한 구독에는 이진 체크섬 및 체크섬 유효성 검사가 지원되지 않습니다.
  • SQL Server 이외 구독자에 복제된 데이터에 대해서는 유효성 검사가 지원되지 않습니다.
  • 복제 모니터의 절차는 복제 모니터에서 끌어오기 구독을 동기화할 수 없기 때문에 밀어넣기 구독에만 사용됩니다. 그러나 구독을 유효성 검사용으로 표시하고 복제 모니터에서 끌어오기 구독에 대한 유효성 검사 결과를 볼 수 있습니다.
  • 유효성 검사 결과는 유효성 검사의 성공 여부를 나타내지만 오류가 발생한 경우 유효성 검사에 실패한 행은 지정하지 않습니다. 게시자와 구독자에서 데이터를 비교하려면 tablediff 유틸리티를 사용하세요. 복제된 데이터와 함께 이 유틸리티를 사용하는 방법에 대한 자세한 내용은 복제된 테이블의 차이점 비교(복제 프로그래밍)를 참조하세요.

데이터 유효성 검사 결과

유효성 검사가 완료되면 배포 에이전트 또는 병합 에이전트 성공 또는 실패와 관련된 메시지를 기록합니다(복제는 실패한 행을 보고하지 않음). 이러한 메시지는 SQL Server Management Studio, 복제 모니터 및 복제 시스템 테이블에서 볼 수 있습니다. 위에 나열된 방법 주제는 유효성 검사를 실행하고 결과를 보는 방법을 보여 줍니다.

유효성 검사 실패를 처리하려면 다음 사항을 살펴보십시오.

트랜잭션 복제의 문서

SQL Server Management Studio 사용

  1. SQL Server Management Studio에서 게시자에 연결한 다음 해당 서버 노드를 확장합니다.
  2. 복제 폴더를 확장한 다음 로컬 게시 폴더를 확장합니다.
  3. 구독 유효성을 검사할 게시를 마우스 오른쪽 단추로 클릭한 다음 구독 유효성 검사를 클릭합니다.
  4. 구독 유효성 검사 대화 상자에서 유효성 검사를 할 구독을 선택합니다.
    • 모든 SQL Server 구독의 유효성 검사를 선택합니다.
    • 다음 구독 유효성 검사를 선택한 다음 하나 이상의 구독을 선택합니다.
  5. 수행할 유효성 검사 유형(행 개수 또는 행 개수 및 체크섬)을 지정하려면 유효성 검사 옵션을 클릭한 다음 구독 유효성 검사 옵션 대화 상자에서 옵션을 지정합니다.
  6. 확인을 선택합니다.
  7. 복제 모니터 또는 동기화 상태 보기 대화 상자에서 유효성 검사 결과를 봅니다. 구독별 결과를 보는 방법:
    1. 게시를 확장하고 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 상태 보기를 클릭합니다.
    2. 에이전트가 실행되고 있지 않으면 동기화 상태 보기 대화 상자에서 시작을 클릭합니다. 대화 상자에서는 유효성 검사와 관련된 정보 메시지를 보여 줍니다.
      유효성 검사와 관련된 메시지가 나타나지 않는 경우 에이전트가 이미 이어서 나타나는 메시지를 로깅한 것입니다. 이 경우 복제 모니터에서 유효성 검사 결과를 확인합니다. 자세한 내용은 이 주제에서 복제 모니터 방법을 참조하세요.

Transact-SQL 사용

모든 문서

  1. 게시 데이터베이스의 게시자에서 sp_publication_validation(Transact-SQL)을 실행합니다. @publication 및 다음 중 하나를 @rowcount_only의 값으로 지정합니다.

    • 1 - 행 개수 확인만(기본값)
    • 2 - 행 개수 확인 및 이진 체크섬

    참고 항목

    sp_publication_validation(Transact-SQL)을 실행하면 게시의 각 아티클에 대해 sp_article_validation(Transact-SQL)이 실행됩니다. sp_publication_validation(Transact-SQL)을 성공적으로 실행하려면 게시된 기본 테이블의 모든 열에 대한 SELECT 권한이 있어야 합니다.

  2. (옵션) 배포 에이전트가 이미 실행 중이지 않은 경우 각 구독의 배포 에이전트를 시작합니다. 자세한 내용은 끌어오기 구독 동기화밀어넣기 구독 동기화를 참조하세요.

  3. 유효성 검사 결과에 대한 에이전트 출력을 확인합니다.

단일 아티클

  1. 게시 데이터베이스의 게시자에서 sp_article_validation(Transact-SQL)를 실행합니다. @publication, @article에 대한 이름 및 다음 중 하나를 @rowcount_only의 값으로 지정합니다.

    • 1 - 행 개수 확인만(기본값)
    • 2 - 행 개수 확인 및 이진 체크섬

    참고 항목

    sp_article_validation(Transact-SQL)을 성공적으로 실행하려면 게시된 기본 테이블의 모든 열에 대한 SELECT 권한이 있어야 합니다.

  2. (옵션) 배포 에이전트가 이미 실행 중이지 않은 경우 각 구독의 배포 에이전트를 시작합니다. 자세한 내용은 끌어오기 구독 동기화밀어넣기 구독 동기화를 참조하세요.

  3. 유효성 검사 결과에 대한 에이전트 출력을 확인합니다.

단일 구독자

  1. 게시 데이터베이스의 게시자에서 BEGIN TRANSACTION(Transact-SQL)을 사용하여 명시적 트랜잭션을 엽니다.

  2. 게시 데이터베이스의 게시자에서 sp_marksubscriptionvalidation(Transact-SQL)을 실행합니다. @publication에 게시, @subscriber에 구독자 이름, @destination_db에 구독 데이터베이스 이름을 지정합니다.

  3. (옵션) 유효성을 검사할 각 구독에 대해 2단계를 반복합니다.

  4. 게시 데이터베이스의 게시자에서 sp_article_validation(Transact-SQL)를 실행합니다. @publication, @article에 대한 이름 및 다음 중 하나를 @rowcount_only의 값으로 지정합니다.

    • 1 - 행 개수 확인만(기본값)
    • 2 - 행 개수 확인 및 이진 체크섬

    참고 항목

    sp_article_validation(Transact-SQL)을 성공적으로 실행하려면 게시된 기본 테이블의 모든 열에 대한 SELECT 권한이 있어야 합니다.

  5. 게시 데이터베이스의 게시자에서 COMMIT TRANSACTION(Transact-SQL)을 사용하여 트랜잭션을 커밋합니다.

  6. (옵션) 유효성을 검사할 각 아티클에 대해 1~5단계를 반복합니다.

  7. (옵션) 배포 에이전트를 아직 실행하지 않은 경우 배포 에이전트를 시작합니다. 자세한 내용은 끌어오기 구독 동기화밀어넣기 구독 동기화를 참조하세요.

  8. 유효성 검사 결과에 대한 에이전트 출력을 확인합니다. 자세한 내용은 Validate Data at the Subscriber을 참조하세요.

트랜잭션 게시에 대한 모든 밀어넣기 구독

복제 모니터 사용하기

  1. 복제 모니터에서 왼쪽 창의 게시자 그룹을 확장한 다음 게시자를 확장합니다.

  2. 구독 유효성을 검사할 게시를 마우스 오른쪽 단추로 클릭한 다음 구독 유효성 검사를 클릭합니다.

  3. 구독 유효성 검사 대화 상자에서 유효성 검사를 할 구독을 선택합니다.

    • 모든 SQL Server 구독의 유효성 검사를 선택합니다.
    • 다음 구독 유효성 검사를 선택한 다음 하나 이상의 구독을 선택합니다.
  4. 수행할 유효성 검사 유형(행 개수 또는 행 개수 및 체크섬)을 지정하려면 유효성 검사 옵션을 클릭한 다음 구독 유효성 검사 옵션 대화 상자에서 옵션을 지정합니다.

  5. 확인을 선택합니다.

  6. 모든 구독 탭을 클릭합니다.

  7. 다음과 같이 유효성 검사 결과를 확인하세요. 밀어넣기 구독별 결과를 보는 방법:

    1. 에이전트가 실행되고 있지 않으면 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 시작을 클릭합니다.
    2. 구독을 마우스 오른쪽 단추로 클릭한 다음 세부 정보 보기를 클릭합니다.
    3. 선택한 세션의 동작 텍스트 영역에 있는 배포자에서 구독자로의 연결 기록 탭의 정보를 확인합니다.

병합 게시에 대한 단일 구독의 경우

SQL Server Management Studio 사용

  1. SQL Server Management Studio에서 게시자에 연결한 다음 해당 서버 노드를 확장합니다.

  2. 복제 폴더를 확장한 다음 로컬 게시 폴더를 확장합니다.

  3. 구독 유효성을 검사할 게시를 확장한 다음 구독에서 마우스 오른쪽 단추를 클릭하고 구독 유효성 검사를 클릭합니다.

  4. 구독 유효성 검사 대화 상자에서 이 구독 유효성 검사를 선택합니다.

  5. 수행할 유효성 검사 유형(행 개수 또는 행 개수 및 체크섬)을 지정하려면 옵션을 클릭한 다음 구독 유효성 검사 옵션 대화 상자에서 옵션을 지정합니다.

  6. 확인을 선택합니다.

  7. 복제 모니터 또는 동기화 상태 보기 대화 상자에서 유효성 검사 결과를 봅니다.

    1. 게시를 확장하고 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 상태 보기를 클릭합니다.
    2. 에이전트가 실행되고 있지 않으면 동기화 상태 보기 대화 상자에서 시작을 클릭합니다. 대화 상자에서는 유효성 검사와 관련된 정보 메시지를 보여 줍니다.

    유효성 검사와 관련된 메시지가 나타나지 않는 경우 에이전트가 이미 이어서 나타나는 메시지를 로깅한 것입니다. 이 경우 복제 모니터에서 유효성 검사 결과를 확인합니다. 자세한 내용은 이 주제에서 복제 모니터 방법을 참조하세요.

병합 게시에 대한 모든 구독의 경우

SQL Server Management Studio 사용

  1. SQL Server Management Studio에서 게시자에 연결한 다음 해당 서버 노드를 확장합니다.

  2. 복제 폴더를 확장한 다음 로컬 게시 폴더를 확장합니다.

  3. 구독 유효성을 검사할 게시를 마우스 오른쪽 단추로 클릭한 다음 모든 구독 유효성 검사를 클릭합니다.

  4. 모든 구독 유효성 검사 대화 상자에서 수행할 유효성 검사 유형(행 개수 또는 행 개수 및 체크섬)을 지정합니다.

  5. 확인을 선택합니다.

  6. 복제 모니터 또는 동기화 상태 보기 대화 상자에서 유효성 검사 결과를 봅니다. 구독별 결과를 보는 방법:

    1. 게시를 확장하고 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 상태 보기를 클릭합니다.
    2. 에이전트가 실행되고 있지 않으면 동기화 상태 보기 대화 상자에서 시작을 클릭합니다. 대화 상자에서는 유효성 검사와 관련된 정보 메시지를 보여 줍니다.

    유효성 검사와 관련된 메시지가 나타나지 않는 경우 에이전트가 이미 이어서 나타나는 메시지를 로깅한 것입니다. 이 경우 복제 모니터에서 유효성 검사 결과를 확인합니다. 자세한 내용은 이 주제에서 복제 모니터 방법을 참조하세요.

병합 게시에 대한 단일 밀어넣기 구독의 경우

복제 모니터 사용하기

  1. 복제 모니터에서 왼쪽 창의 게시자 그룹을 확장한 다음 게시자를 확장하고 게시를 클릭합니다.
  2. 모든 구독 탭을 클릭합니다.
  3. 구독 유효성을 검사할 구독을 마우스 오른쪽 단추로 클릭한 다음 구독 유효성 검사를 클릭합니다.
  4. 구독 유효성 검사 대화 상자에서 이 구독 유효성 검사를 선택합니다.
  5. 수행할 유효성 검사 유형(행 개수 또는 행 개수 및 체크섬)을 지정하려면 옵션을 클릭한 다음 구독 유효성 검사 옵션 대화 상자에서 옵션을 지정합니다.
  6. 확인을 선택합니다.
  7. 모든 구독 탭을 클릭합니다.
  8. 다음과 같이 유효성 검사 결과를 확인하세요.
    1. 에이전트가 실행되고 있지 않으면 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 시작을 클릭합니다.
    2. 구독을 마우스 오른쪽 단추로 클릭한 다음 세부 정보 보기를 클릭합니다.
    3. 선택한 세션에 대한 마지막 메시지 텍스트 영역에 있는 동기화 기록 탭의 정보를 확인합니다.

Transact-SQL 사용

  1. 게시 데이터베이스의 게시자에서 sp_validatemergesubscription(Transact-SQL)를 실행합니다. @publication, @subscriber에 구독자 이름, @subscriber_db에 구독 데이터베이스 이름, 다음 중 하나를 @level의 값으로 지정합니다.

    • 1 - 행 개수 확인 전용 유효성 검사
    • 3 - 행 개수 확인 이진 체크섬 유효성 검사

    이렇게 하면 선택한 구독이 유효성 검사 대상으로 표시됩니다.

  2. 각 구독에 대해 병합 에이전트를 시작합니다. 자세한 내용은 끌어오기 구독 동기화밀어넣기 구독 동기화를 참조하세요.

  3. 유효성 검사 결과에 대한 에이전트 출력을 확인합니다.

  4. 유효성을 검사할 각 구독에 대해 1~3단계를 반복합니다.

참고 항목

복제 병합 에이전트 실행할 때 -Validate 매개 변수를 지정하여 동기화가 끝날 때 병합 게시에 대한 구독의 유효성을 검사할 수도 있습니다.

병합 게시에 대한 모든 밀어넣기 구독의 경우

복제 모니터 사용하기

  1. 복제 모니터에서 왼쪽 창의 게시자 그룹을 확장한 다음 게시자를 확장합니다.
  2. 구독 유효성을 검사할 게시를 마우스 오른쪽 단추로 클릭한 다음 모든 구독 유효성 검사를 클릭합니다.
  3. 모든 구독 유효성 검사 대화 상자에서 수행할 유효성 검사 유형(행 개수 또는 행 개수 및 체크섬)을 지정합니다.
  4. 확인을 선택합니다.
  5. 모든 구독 탭을 클릭합니다.
  6. 다음과 같이 유효성 검사 결과를 확인하세요. 밀어넣기 구독별 결과를 보는 방법:
    1. 에이전트가 실행되고 있지 않으면 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 시작을 클릭합니다.
    2. 구독을 마우스 오른쪽 단추로 클릭한 다음 세부 정보 보기를 클릭합니다.
    3. 선택한 세션에 대한 마지막 메시지 텍스트 영역에 있는 동기화 기록 탭의 정보를 확인합니다.

Transact-SQL 사용

  1. 게시 데이터베이스의 게시자에서 sp_validatemergepublication(Transact-SQL)을 실행합니다. @publication 및 다음 중 하나를 @level의 값으로 지정합니다.

    • 1 - 행 개수 확인 전용 유효성 검사
    • 3 - 행 개수 확인 이진 체크섬 유효성 검사

    이렇게 하면 모든 구독이 유효성 검사 대상으로 표시됩니다.

  2. 각 구독에 대해 병합 에이전트를 시작합니다. 자세한 내용은 끌어오기 구독 동기화밀어넣기 구독 동기화를 참조하세요.

  3. 유효성 검사 결과에 대한 에이전트 출력을 확인합니다. 자세한 내용은 Validate Data at the Subscriber을 참조하세요.

병합 에이전트 매개 변수를 사용하여 데이터 유효성 검사

  1. 명령 프롬프트에서 다음 방법 중 하나를 사용하여 구독자(끌어오기 구독) 또는 배포자(밀어넣기 구독)에서 병합 에이전트를 시작합니다.

    • -Validate 매개 변수에 대한 1(행 개수) 또는 3(행 개수 및 이진 체크섬)값을 지정합니다.
    • -ProfileName 매개 변수에 대한 행 개수 유효성 검사 또는 행 개수 및 체크섬 유효성 검사를 지정합니다.

    자세한 내용은 끌어오기 구독 동기화 또는 밀어넣기 구독 동기화를 참조하세요.

RMO(복제 관리 개체) 사용

복제를 사용하면 RMO(복제 관리 개체)를 사용하여 구독자의 데이터가 게시자의 데이터와 일치하는지 프로그래밍 방식으로 유효성을 검사할 수 있습니다. 사용하는 개체는 복제 토폴로지의 유형에 따라 달라집니다. 트랜잭션 복제를 수행하려면 게시에 대한 모든 구독의 유효성 검사가 필요합니다.

참고 항목

코드 예제는 이 섹션의 뒷부분에 나오는 예제(RMO)를 참조하세요.

트랜잭션 게시의 모든 아티클에 대해 데이터 유효성을 검사하려면

  1. ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.

  2. TransPublication 클래스의 인스턴스를 만듭니다. 게시에 대한 NameDatabaseName 속성을 설정합니다. ConnectionContext 속성을 1단계에서 만든 연결에 설정합니다.

  3. LoadProperties 메서드를 호출하여 개체의 나머지 속성을 얻습니다. 이 메서드가 false를 반환하는 경우 2단계에서 게시 속성이 올바르게 정의되지 않았거나 게시가 존재하지 않는 것입니다.

  4. ValidatePublication 메서드를 호출합니다. 다음을 전달합니다.

    그러면 유효성 검사를 위한 문서가 표시됩니다.

  5. 배포 에이전트를 아직 실행하지 않은 경우 배포 에이전트를 시작하여 각 구독을 동기화합니다. 자세한 내용은 밀어넣기 구독 동기화 또는 끌어오기 구독 동기화를 참조하세요. 유효성 검사 작업의 결과는 에이전트 기록에 기록됩니다. 자세한 내용은 복제 모니터링을 참조하세요.

병합 게시에 대한 모든 구독의 데이터 유효성을 검사하려면

  1. ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.

  2. MergePublication 클래스의 인스턴스를 만듭니다. 게시에 대한 NameDatabaseName 속성을 설정합니다. ConnectionContext 속성을 1단계에서 만든 연결에 설정합니다.

  3. LoadProperties 메서드를 호출하여 개체의 나머지 속성을 얻습니다. 이 메서드가 false를 반환하는 경우 2단계에서 게시 속성이 올바르게 정의되지 않았거나 게시가 존재하지 않는 것입니다.

  4. ValidatePublication 메서드를 호출합니다. 원하는 ValidationOption을(를) 전달합니다.

  5. 각 구독에 대한 병합 에이전트 실행하여 유효성 검사를 시작하거나 예약된 다음 에이전트가 실행될 때까지 기다립니다. 자세한 내용은 끌어오기 구독 동기화밀어넣기 구독 동기화를 참조하세요. 유효성 검사 작업의 결과는 복제 모니터를 사용하여 보는 에이전트 기록에 기록됩니다. 자세한 내용은 복제 모니터링을 참조하세요.

병합 게시에 대한 단일 구독의 데이터 유효성을 검사하려면

  1. ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.

  2. MergePublication 클래스의 인스턴스를 만듭니다. 게시에 대한 NameDatabaseName 속성을 설정합니다. ConnectionContext 속성을 1단계에서 만든 연결에 설정합니다.

  3. LoadProperties 메서드를 호출하여 개체의 나머지 속성을 얻습니다. 이 메서드가 false를 반환하는 경우 2단계에서 게시 속성이 올바르게 정의되지 않았거나 게시가 존재하지 않는 것입니다.

  4. ValidateSubscription 메서드를 호출합니다. 구독자 이름, 유효성을 검사할 구독 데이터베이스 및 원하는 ValidationOption을 전달합니다.

  5. 구독에 대한 병합 에이전트 실행하여 유효성 검사를 시작하거나 예약된 다음 에이전트가 실행될 때까지 기다립니다. 자세한 내용은 끌어오기 구독 동기화밀어넣기 구독 동기화를 참조하세요. 유효성 검사 작업의 결과는 복제 모니터를 사용하여 보는 에이전트 기록에 기록됩니다. 자세한 내용은 복제 모니터링을 참조하세요.

예제(RMO)

이 예제에서는 트랜잭션 게시에 대한 모든 구독을 대상으로 행 개수를 확인하도록 표시합니다.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";

TransPublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new TransPublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    // If we can't get the properties for this publication, 
    // throw an application exception.
    if (publication.LoadProperties())
    {
        // Initiate validataion for all subscriptions to this publication.
        publication.ValidatePublication(ValidationOption.RowCountOnly,
            ValidationMethod.ConditionalFast, false);

        // If not already running, start the Distribution Agent at each 
        // Subscriber to synchronize and validate the subscriptions.
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(
        "Subscription validation could not be initiated.", ex);
}
finally
{
    conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2022"

Dim publication As TransPublication

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Set the required properties for the publication.
    publication = New TransPublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' If we can't get the properties for this publication, 
    ' throw an application exception.
    If publication.LoadProperties() Then

        ' Initiate validataion for all subscriptions to this publication.
        publication.ValidatePublication(ValidationOption.RowCountOnly, _
         ValidationMethod.ConditionalFast, False)

        ' If not already running, start the Distribution Agent at each 
        ' Subscriber to synchronize and validate the subscriptions.
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException( _
     "Subscription validation could not be initiated.", ex)
Finally
    conn.Disconnect()
End Try

이 예제에서는 병합 게시에 대한 특정 구독을 대상으로 행 개수를 확인하도록 표시합니다.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2022";
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2022Replica";

MergePublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for the publication.
    publication = new MergePublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;


    // If we can't get the properties for this merge publication, then throw an application exception.
    if (publication.LoadProperties())
    {
        // Initiate validation of the specified subscription.
        publication.ValidateSubscription(subscriberName,
            subscriptionDbName, ValidationOption.RowCountOnly);
        
        // Start the Merge Agent to synchronize and validate the subscription.
    }
    else
    {
        throw new ApplicationException(String.Format(
            "Settings could not be retrieved for the publication. " +
            "Ensure that the publication {0} exists on {1}.",
            publicationName, publisherName));
    }
}
catch (Exception ex)
{
    // Do error handling here.
    throw new ApplicationException(String.Format(
        "The subscription at {0} to the {1} publication could not " +
        "be validated.", subscriberName, publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2022"
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2022Replica"

Dim publication As MergePublication

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Set the required properties for the publication.
    publication = New MergePublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' If we can't get the properties for this merge publication, then throw an application exception.
    If publication.LoadProperties() Then
        ' Initiate validation of the specified subscription.
        publication.ValidateSubscription(subscriberName, _
         subscriptionDbName, ValidationOption.RowCountOnly)

        ' Start the Merge Agent to synchronize and validate the subscription.
    Else
        Throw New ApplicationException(String.Format( _
         "Settings could not be retrieved for the publication. " + _
         "Ensure that the publication {0} exists on {1}.", _
         publicationName, publisherName))
    End If
Catch ex As Exception
    ' Do error handling here.
    Throw New ApplicationException(String.Format( _
     "The subscription at {0} to the {1} publication could not " + _
     "be validated.", subscriberName, publicationName), ex)
Finally
    conn.Disconnect()
End Try

참고 항목

복제 관리에 대한 모범 사례