구독자에서 데이터 유효성 검사Validate Data at the Subscriber

이 항목에서는 SQL Server 2017SQL Server 2017 , SQL Server Management StudioSQL Server Management Studio또는 RMO(복제 관리 개체)를 사용하여 Transact-SQLTransact-SQL에서 구독자의 데이터에 대한 유효성을 검사하는 방법에 대해 설명합니다.This topic describes how to validate data at the Subscriber in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or Replication Management Objects (RMO).

데이터 유효성 검사 프로세스는 세 부분으로 구성되어 있습니다.Validating data is a three-part process:

  1. 게시에 대한 단일 구독이나 모든 구독을 유효성 검사용으로 표시 할 수 있습니다.A single subscription or all subscriptions to a publication are marked for validation. MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio로컬 게시 폴더와 로컬 구독 폴더에서 사용할 수 있는 구독 유효성 검사, 구독 유효성 검사모든 구독 유효성 검사 대화 상자에서 유효성을 검사할 구독을 표시합니다.Mark subscriptions for validation in the Validate Subscription, Validate Subscriptions, and Validate All Subscriptions dialog boxes, which are available from the Local Publications folder and the Local Subscriptions folder in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio. 또한 모든 구독 탭, 구독 조사 목록 탭 및 복제 모니터의 게시 노드에서 구독을 표시할 수 있습니다.You can also mark subscriptions from the All Subscriptions tab, the Subscription Watch List tab, and the publications node in Replication Monitor. 복제 모니터를 시작하는 방법은 복제 모니터 시작을 참조하세요.For information about starting Replication Monitor, see Start the Replication Monitor.

  2. 구독은 배포 에이전트(트랜잭션 복제의 경우)나 병합 에이전트(병합 복제의 경우)에 의해 다음 번에 동기화될 때 유효성이 검사됩니다.A subscription is validated the next time it is synchronized by the Distribution Agent (for transactional replication) or the Merge Agent (for merge replication). 배포 에이전트는 일반적으로 계속 실행되므로 유효성 검사가 바로 수행됩니다. 병합 에이전트는 일반적으로 요청 시 실행되므로 에이전트를 실행한 다음 유효성 검사가 수행됩니다.The Distribution Agent typically runs continuously, in which case validation occurs immediately; the Merge Agent typically runs on demand, in which case validation occurs after you run the agent.

  3. 다음 위치에서 유효성 검사 결과를 확인합니다.View the validation results:

    • 복제 모니터의 세부 정보 창의 배포자에서 구독자로의 연결 기록 탭(트랜잭션 복제의 경우) 및 동기화 기록 탭(병합 복제의 경우)In the detail windows in Replication Monitor: on the Distributor to Subscriber History tab for transactional replication and the Synchronization History tab for merge replication.

    • 동기화 상태 보기 Management StudioManagement Studio대화 상자In the View Synchronization Status dialog box in Management StudioManagement Studio.

    항목 내용In This Topic

시작하기 전 주의 사항 Before You Begin

제한 사항 Limitations and Restrictions

  • 복제 모니터에서 끌어오기 구독은 동기화할 수 없으므로 복제 모니터의 프로시저는 밀어넣기 구독에 대해서만 사용할 수 있습니다.The procedures for Replication Monitor are for push subscriptions only because pull subscriptions cannot be synchronized in Replication Monitor. 그러나 구독을 유효성 검사용으로 표시하고 복제 모니터에서 끌어오기 구독에 대한 유효성 검사 결과를 볼 수 있습니다.However, you can mark a subscription for validation and view validation results for pull subscriptions in Replication Monitor.

  • 유효성 검사 결과는 유효성 검사의 성공 여부를 나타내지만 실패한 경우 유효성 검사에 실패한 행은 표시하지 않습니다.The validation results indicate whether validation succeeded or failed, but do not specify which rows failed validation if a failure occurred. 게시자와 구독자에서 데이터를 비교하려면 tablediff Utility를 사용합니다.To compare data at the Publisher and Subscriber, use the tablediff Utility. 이 유틸리티를 복제된 데이터와 함께 사용하는 방법은 복제된 테이블의 차이점 비교(복제 프로그래밍)를 참조하세요.For more information about using this utility with replicated data, see Compare Replicated Tables for Differences (Replication Programming).

SQL Server Management Studio 사용 Using SQL Server Management Studio

트랜잭션 게시에 대한 구독의 데이터 유효성을 검사하려면(Management Studio)To validate data for subscriptions to a transactional publication (Management Studio)

  1. SQL Server Management StudioSQL Server Management Studio에서 게시자에 연결한 다음 해당 서버 노드를 확장합니다.Connect to the Publisher in SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. 복제 폴더를 확장한 다음 로컬 게시 폴더를 확장합니다.Expand the Replication folder, and then expand the Local Publications folder.

  3. 구독 유효성을 검사할 게시를 마우스 오른쪽 단추로 클릭한 다음 구독 유효성 검사를 클릭합니다.Right-click the publication for which you want to validate subscriptions, and then click Validate Subscriptions.

  4. 구독 유효성 검사 대화 상자에서 유효성을 검사할 구독을 선택합니다.In the Validate Subscriptions dialog box, select which subscriptions to validate:

    • 모든 SQL Server 구독 유효성 검사를 선택합니다.Select Validate all SQL Server subscriptions.

    • 다음 구독 유효성 검사를 선택한 다음 하나 이상의 구독을 선택합니다.Select Validate the following subscriptions, and then select one or more subscriptions.

  5. 수행할 유효성 검사 유형(행 개수 또는 행 개수 및 체크섬)을 지정하려면 유효성 검사 옵션을 클릭한 다음 구독 유효성 검사 옵션 대화 상자에서 옵션을 지정합니다.To specify the type of validation to perform (row count, or row count and checksum) click Validation Options, and then specify options in the Subscription Validation Options dialog box.

  6. 확인을 클릭합니다.Click OK.

  7. 복제 모니터 또는 동기화 상태 보기 대화 상자에서 유효성 검사 결과를 확인합니다.View validation results in Replication Monitor or the View Synchronization Status dialog box. 다음과 같이 각 구독에 대한 작업을 수행하세요.For each subscription:

    1. 게시를 확장하고 해당 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 상태 보기를 클릭합니다.Expand the publication, right-click the subscription, and then click View Synchronization Status.

    2. 에이전트가 실행되고 있지 않은 경우 동기화 상태 보기 대화 상자에서 시작 을 클릭합니다.If the agent is not running click Start in the View Synchronization Status dialog box. 대화 상자에서는 유효성 검사와 관련된 정보 메시지를 보여 줍니다.The dialog box will display informational messages regarding validation.

      유효성 검사와 관련된 메시지가 나타나지 않는 경우 에이전트가 이미 이어서 나타나는 메시지를 로깅한 것입니다.If you do not see any messages regarding validation, the agent has already logged a subsequent message. 이 경우 복제 모니터에서 유효성 검사 결과를 확인합니다.In this case, view the validation results in Replication Monitor. 자세한 내용은 이 항목의 복제 모니터 사용 방법을 참조하세요.For more information, see the Replication Monitor how to procedures in this topic.

병합 게시에 대한 단일 구독의 데이터 유효성을 검사하려면(Management Studio)To validate data for a single subscription to a merge publication (Management Studio)

  1. SQL Server Management StudioSQL Server Management Studio에서 게시자에 연결한 다음 해당 서버 노드를 확장합니다.Connect to the Publisher in SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. 복제 폴더를 확장한 다음 로컬 게시 폴더를 확장합니다.Expand the Replication folder, and then expand the Local Publications folder.

  3. 구독 유효성을 검사할 게시를 확장하고 구독을 마우스 오른쪽 단추로 클릭한 다음 구독 유효성 검사를 클릭합니다.Expand the publication for which you want to validate subscriptions, right-click the subscription, and then click Validate Subscription.

  4. 구독 유효성 검사 대화 상자에서 이 구독 유효성 검사를 선택합니다.In the Validate Subscription dialog box, select Validate this subscription.

  5. 수행할 유효성 검사 유형(행 개수 또는 행 개수 및 체크섬)을 지정하려면 옵션을 클릭한 다음 구독 유효성 검사 옵션 대화 상자에서 옵션을 지정합니다.To specify the type of validation to perform (row count, or row count and checksum) click Options, and then specify options in the Subscription Validation Options dialog box.

  6. 확인을 클릭합니다.Click OK.

  7. 다음과 같이 복제 모니터 또는 동기화 상태 보기 대화 상자에서 유효성 검사 결과를 확인하세요.View validation results in Replication Monitor or the View Synchronization Status dialog box:

    1. 게시를 확장하고 해당 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 상태 보기를 클릭합니다.Expand the publication, right-click the subscription, and then click View Synchronization Status.

    2. 에이전트가 실행되고 있지 않은 경우 동기화 상태 보기 대화 상자에서 시작 을 클릭합니다.If the agent is not running, click Start in the View Synchronization Status dialog box. 대화 상자에서는 유효성 검사와 관련된 정보 메시지를 보여 줍니다.The dialog box will display informational messages regarding validation.

      유효성 검사와 관련된 메시지가 나타나지 않는 경우 에이전트가 이미 이어서 나타나는 메시지를 로깅한 것입니다.If you do not see any messages regarding validation, the agent has already logged a subsequent message. 이 경우 복제 모니터에서 유효성 검사 결과를 확인합니다.In this case, view the validation results in Replication Monitor. 자세한 내용은 이 항목의 복제 모니터 사용 방법을 참조하세요.For more information, see the Replication Monitor how to procedures in this topic.

병합 게시에 대한 모든 구독의 데이터 유효성을 검사하려면(Management Studio)To validate data for all subscriptions to a merge publication (Management Studio)

  1. SQL Server Management StudioSQL Server Management Studio에서 게시자에 연결한 다음 해당 서버 노드를 확장합니다.Connect to the Publisher in SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. 복제 폴더를 확장한 다음 로컬 게시 폴더를 확장합니다.Expand the Replication folder, and then expand the Local Publications folder.

  3. 구독 유효성을 검사할 게시를 마우스 오른쪽 단추로 클릭한 다음 모든 구독 유효성 검사를 클릭합니다.Right-click the publication for which you want to validate subscriptions, and then click Validate All Subscriptions.

  4. 모든 구독 유효성 검사 대화 상자에서 수행할 유효성 검사 유형(행 개수 또는 행 개수 및 체크섬)을 지정합니다.In the Validate All Subscriptions dialog box, specify the type of validation to perform (row count, or row count and checksum).

  5. 확인을 클릭합니다.Click OK.

  6. 복제 모니터 또는 동기화 상태 보기 대화 상자에서 유효성 검사 결과를 확인합니다.View validation results in Replication Monitor or the View Synchronization Status dialog box. 다음과 같이 각 구독에 대한 작업을 수행하세요.For each subscription:

    1. 게시를 확장하고 해당 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 상태 보기를 클릭합니다.Expand the publication, right-click the subscription, and then click View Synchronization Status.

    2. 에이전트가 실행되고 있지 않은 경우 동기화 상태 보기 대화 상자에서 시작 을 클릭합니다.If the agent is not running, click Start in the View Synchronization Status dialog box. 대화 상자에서는 유효성 검사와 관련된 정보 메시지를 보여 줍니다.The dialog box will display informational messages regarding validation.

      유효성 검사와 관련된 메시지가 나타나지 않는 경우 에이전트가 이미 이어서 나타나는 메시지를 로깅한 것입니다.If you do not see any messages regarding validation, the agent has already logged a subsequent message. 이 경우 복제 모니터에서 유효성 검사 결과를 확인합니다.In this case, view the validation results in Replication Monitor. 자세한 내용은 이 항목의 복제 모니터 사용 방법을 참조하세요.For more information, see the Replication Monitor how to procedures in this topic.

트랜잭션 게시에 대한 모든 밀어넣기 구독의 데이터 유효성을 검사하려면(복제 모니터)To validate data for all push subscriptions to a transactional publication (Replication Monitor)

  1. 복제 모니터에서 왼쪽 창의 게시자 그룹을 확장한 다음 게시자를 확장합니다.In Replication Monitor, expand a Publisher group in the left pane, and then expand a Publisher.

  2. 구독 유효성을 검사할 게시를 마우스 오른쪽 단추로 클릭한 다음 구독 유효성 검사를 클릭합니다.Right-click the publication for which you want to validate subscriptions, and then click Validate Subscriptions.

  3. 구독 유효성 검사 대화 상자에서 유효성을 검사할 구독을 선택합니다.In the Validate Subscriptions dialog box, select which subscriptions to validate:

    • 모든 SQL Server 구독 유효성 검사를 선택합니다.Select Validate all SQL Server subscriptions.

    • 다음 구독 유효성 검사를 선택한 다음 하나 이상의 구독을 선택합니다.Select Validate the following subscriptions, and then select one or more subscriptions.

  4. 수행할 유효성 검사 유형(행 개수 또는 행 개수 및 체크섬)을 지정하려면 유효성 검사 옵션을 클릭한 다음 구독 유효성 검사 옵션 대화 상자에서 옵션을 지정합니다.To specify the type of validation to perform (row count, or row count and checksum) click Validation Options, and then specify options in the Subscription Validation Options dialog box.

  5. 확인을 클릭합니다.Click OK.

  6. 모든 구독 탭을 클릭합니다.Click the All Subscriptions tab.

  7. 유효성 검사 결과를 확인합니다.View validation results. 다음과 같이 각 밀어넣기 구독에 대한 작업을 수행하세요.For each push subscription:

    1. 에이전트가 실행되고 있지 않은 경우 해당 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 시작을 클릭합니다.If the agent is not running, right-click the subscription, and then click Start Synchronizing.

    2. 해당 구독을 마우스 오른쪽 단추로 클릭한 다음 자세히 보기를 클릭합니다.Right-click the subscription, and then click View Details.

    3. 선택한 세션의 동작 텍스트 영역에 있는 배포자에서 구독자로의 연결 기록 탭의 정보를 확인합니다.View information on the Distributor to Subscriber History tab in the Actions in the selected session text area.

병합 게시에 대한 단일 밀어넣기 구독의 데이터 유효성을 검사하려면(복제 모니터)To validate data for a single push subscription to a merge publication (Replication Monitor)

  1. 복제 모니터에서 왼쪽 창의 게시자 그룹을 확장하고 해당 게시자를 확장한 다음 해당 게시를 클릭합니다.In Replication Monitor, expand a Publisher group in the left pane, expand a Publisher, and then click a publication.

  2. 모든 구독 탭을 클릭합니다.Click the All Subscriptions tab.

  3. 유효성을 검사할 구독을 마우스 오른쪽 단추로 클릭한 다음 구독 유효성 검사를 클릭합니다.Right-click the subscription you want to validate, and then click Validate Subscription.

  4. 구독 유효성 검사 대화 상자에서 이 구독 유효성 검사를 선택합니다.In the Validate Subscription dialog box, select Validate this subscription.

  5. 수행할 유효성 검사 유형(행 개수 또는 행 개수 및 체크섬)을 지정하려면 옵션을 클릭한 다음 구독 유효성 검사 옵션 대화 상자에서 옵션을 지정합니다.To specify the type of validation to perform (row count, or row count and checksum) click Options, and then specify options in the Subscription Validation Options dialog box.

  6. 확인을 클릭합니다.Click OK.

  7. 모든 구독 탭을 클릭합니다.Click the All Subscriptions tab.

  8. 다음과 같이 유효성 검사 결과를 확인하세요.View validation results:

    1. 에이전트가 실행되고 있지 않은 경우 해당 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 시작을 클릭합니다.If the agent is not running, right-click the subscription, and then click Start Synchronizing.

    2. 해당 구독을 마우스 오른쪽 단추로 클릭한 다음 자세히 보기를 클릭합니다.Right-click the subscription, and then click View Details.

    3. 선택한 세션에 대한 마지막 메시지 텍스트 영역에 있는 동기화 기록 탭의 정보를 확인합니다.View information on the Synchronization History tab in the Last message of the selected session text area.

병합 게시에 대한 모든 밀어넣기 구독의 데이터 유효성을 검사하려면(복제 모니터)To validate data for all push subscriptions to a merge publication (Replication Monitor)

  1. 복제 모니터에서 왼쪽 창의 게시자 그룹을 확장한 다음 게시자를 확장합니다.In Replication Monitor, expand a Publisher group in the left pane, and then expand a Publisher.

  2. 구독 유효성을 검사할 게시를 마우스 오른쪽 단추로 클릭한 다음 모든 구독 유효성 검사를 클릭합니다.Right-click the publication for which you want to validate subscriptions, and then click Validate All Subscriptions.

  3. 모든 구독 유효성 검사 대화 상자에서 수행할 유효성 검사 유형(행 개수 또는 행 개수 및 체크섬)을 지정합니다.In the Validate All Subscriptions dialog box, specify the type of validation to perform (row count, or row count and checksum).

  4. 확인을 클릭합니다.Click OK.

  5. 모든 구독 탭을 클릭합니다.Click the All Subscriptions tab.

  6. 유효성 검사 결과를 확인합니다.View validation results. 다음과 같이 각 밀어넣기 구독에 대한 작업을 수행하세요.For each push subscription:

    1. 에이전트가 실행되고 있지 않은 경우 해당 구독을 마우스 오른쪽 단추로 클릭한 다음 동기화 시작을 클릭합니다.If the agent is not running, right-click the subscription, and then click Start Synchronizing.

    2. 해당 구독을 마우스 오른쪽 단추로 클릭한 다음 자세히 보기를 클릭합니다.Right-click the subscription, and then click View Details.

    3. 선택한 세션에 대한 마지막 메시지 텍스트 영역에 있는 동기화 기록 탭의 정보를 확인합니다.View information on the Synchronization History tab in the Last message of the selected session text area.

Transact-SQL 사용 Using Transact-SQL

트랜잭션 게시의 모든 아티클에 대해 데이터 유효성을 검사하려면To validate data for all articles in a transactional publication

  1. 게시 데이터베이스의 게시자에서 sp_publication_validation(Transact-SQL)을 실행합니다.At the Publisher on the publication database, execute sp_publication_validation (Transact-SQL). @publication를 지정하고 @rowcount_only에 다음 값 중 하나를 지정합니다.Specify @publication and one of the following values for @rowcount_only:

    • 1 - 행 개수의 유효성만 검사합니다(기본값).1 - rowcount check only (the default)

    • 2 - 행 개수 및 이진 체크섬의 유효성을 검사합니다.2 - rowcount and binary checksum.

    참고

    sp_publication_validation(Transact-SQL)을 실행하면 게시의 각 아티클에 대해 sp_article_validation(Transact-SQL)이 실행됩니다.When you execute sp_publication_validation (Transact-SQL), sp_article_validation (Transact-SQL) is executed for each article in the publication. sp_publication_validation(Transact-SQL)을 올바르게 실행하려면 게시된 기본 테이블의 모든 열에 대해 SELECT 권한이 있어야 합니다.To successfully execute sp_publication_validation (Transact-SQL), you must have SELECT permissions on all columns in the published base tables.

  2. (옵션) 각 구독에 대해 배포 에이전트를 아직 실행하지 않은 경우 배포 에이전트를 시작합니다.(Optional) Start the Distribution Agent for each subscription if it is not already running. 자세한 내용은 Synchronize a Pull SubscriptionSynchronize a Push Subscription를 참조하세요.For more information, see Synchronize a Pull Subscription and Synchronize a Push Subscription.

  3. 유효성 검사의 결과에 대한 에이전트 출력을 확인합니다.Check the agent output for the result of the validation. 자세한 내용은 복제된 데이터의 유효성 검사를 참조하세요.For more information, see Validate Replicated Data.

트랜잭션 게시의 단일 아티클에 대한 데이터 유효성을 검사하려면To validate data for a single article in a transactional publication

  1. 게시 데이터베이스의 게시자에서 sp_article_validation(Transact-SQL)을 실행합니다.At the Publisher on the publication database, execute sp_article_validation (Transact-SQL). @publication@article에 아티클 이름을 지정하고, @rowcount_only에 다음 값 중 하나를 지정합니다.Specify @publication, the name of the article for @article, and one of the following values for @rowcount_only:

    • 1 - 행 개수의 유효성만 검사합니다(기본값).1 - Rowcount check only (the default)

    • 2 - 행 개수 및 이진 체크섬의 유효성을 검사합니다.2 - Rowcount and binary checksum.

    참고

    sp_article_validation(Transact-SQL)을 올바르게 실행하려면 게시된 기본 테이블의 모든 열에 대해 SELECT 권한이 있어야 합니다.To successfully execute sp_article_validation (Transact-SQL), you must have SELECT permissions on all columns in the published base table.

  2. (옵션) 각 구독에 대해 배포 에이전트를 아직 실행하지 않은 경우 배포 에이전트를 시작합니다.(Optional) Start the Distribution Agent for each subscription if it is not already running. 자세한 내용은 Synchronize a Pull SubscriptionSynchronize a Push Subscription를 참조하세요.For more information, see Synchronize a Pull Subscription and Synchronize a Push Subscription.

  3. 유효성 검사의 결과에 대한 에이전트 출력을 확인합니다.Check the agent output for the result of the validation. 자세한 내용은 복제된 데이터의 유효성 검사를 참조하세요.For more information, see Validate Replicated Data.

트랜잭션 게시에 대한 단일 구독자의 데이터 유효성을 검사하려면To validate data for a single subscriber to a transactional publication

  1. 게시 데이터베이스의 게시자에서 BEGIN TRANSACTION(Transact-SQL)을 사용하여 명시적 트랜잭션을 엽니다.At the Publisher on the publication database, open an explicit transaction using BEGIN TRANSACTION (Transact-SQL).

  2. 게시 데이터베이스의 게시자에서 sp_marksubscriptionvalidation(Transact-SQL)을 실행합니다.At the Publisher on the publication database, execute sp_marksubscriptionvalidation (Transact-SQL). @publication에 게시를 지정하고 @subscriber에 구독자 이름을 지정한 후 @destination_db에 구독 데이터베이스 이름을 지정합니다.Specify the publication for @publication, the name of the Subscriber for @subscriber, and the name of the subscription database for @destination_db.

  3. (옵션) 유효성을 검사할 각 구독에 대해 2단계를 반복합니다.(Optional) Repeat step 2 for each subscription being validated.

  4. 게시 데이터베이스의 게시자에서 sp_article_validation(Transact-SQL)을 실행합니다.At the Publisher on the publication database, execute sp_article_validation (Transact-SQL). @publication@article에 아티클 이름을 지정하고, @rowcount_only에 다음 값 중 하나를 지정합니다.Specify @publication, the name of the article for @article, and one of the following values for @rowcount_only:

    • 1 - 행 개수의 유효성만 검사합니다(기본값).1 - Rowcount check only (the default)

    • 2 - 행 개수 및 이진 체크섬의 유효성을 검사합니다.2 - Rowcount and binary checksum.

    참고

    sp_article_validation(Transact-SQL)을 올바르게 실행하려면 게시된 기본 테이블의 모든 열에 대해 SELECT 권한이 있어야 합니다.To successfully execute sp_article_validation (Transact-SQL), you must have SELECT permissions on all columns in the published base table.

  5. 게시 데이터베이스의 게시자에서 COMMIT TRANSACTION(Transact-SQL)을 사용하여 명시적 트랜잭션을 엽니다.At the Publisher on the publication database, commit the transaction using COMMIT TRANSACTION (Transact-SQL).

  6. (옵션) 유효성을 검사할 각 아티클에 대해 1~5단계를 반복합니다.(Optional) Repeat steps 1 through 5 for each article being validated.

  7. (옵션) 배포 에이전트를 아직 실행하지 않은 경우 배포 에이전트를 시작합니다.(Optional) Start the Distribution Agent if it is not already running. 자세한 내용은 Synchronize a Pull SubscriptionSynchronize a Push Subscription를 참조하세요.For more information, see Synchronize a Pull Subscription and Synchronize a Push Subscription.

  8. 유효성 검사의 결과에 대한 에이전트 출력을 확인합니다.Check the agent output for the result of the validation. 자세한 내용은 Validate Data at the Subscriber을 참조하세요.For more information, see Validate Data at the Subscriber.

병합 게시에 대한 모든 구독의 데이터 유효성을 검사하려면To validate data in all subscriptions to a merge publication

  1. 게시 데이터베이스의 게시자에서 sp_validatemergepublication(Transact-SQL)을 실행합니다.At the Publisher on the publication database, execute sp_validatemergepublication (Transact-SQL). @publication를 지정하고 @level에 다음 값 중 하나를 지정합니다.Specify @publication and one of the following values for @level:

    • 1 - 행 개수의 유효성만 검사합니다.1 - Rowcount-only validation.

    • 3 - 행 개수 및 이진 체크섬의 유효성을 검사합니다.3 - Rowcount binary checksum validation.

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

  2. 각 구독에 대해 병합 에이전트를 시작합니다.Start the merge agent for each subscription. 자세한 내용은 Synchronize a Pull SubscriptionSynchronize a Push Subscription를 참조하세요.For more information, see Synchronize a Pull Subscription and Synchronize a Push Subscription.

  3. 유효성 검사의 결과에 대한 에이전트 출력을 확인합니다.Check the agent output for the result of the validation. 자세한 내용은 Validate Data at the Subscriber을 참조하세요.For more information, see Validate Data at the Subscriber.

병합 게시에 대한 선택한 구독의 데이터 유효성을 검사하려면To validate data in selected subscriptions to a merge publication

  1. 게시 데이터베이스의 게시자에서 sp_validatemergesubscription(Transact-SQL)을 실행합니다.At the Publisher on the publication database, execute sp_validatemergesubscription (Transact-SQL). @publication을 지정하고 @subscriber에 구독자 이름을 지정하고 @subscriber_db에 구독 데이터베이스 이름을 지정한 후 @level에 다음 값 중 하나를 지정합니다.Specify @publication, the name of the Subscriber for @subscriber, the name of the subscription database for @subscriber_db, and one of the following values for @level:

    • 1 - 행 개수의 유효성만 검사합니다.1 - Rowcount-only validation.

    • 3 - 행 개수 및 이진 체크섬의 유효성을 검사합니다.3 - Rowcount binary checksum validation.

      이렇게 하면 선택한 구독이 유효성 검사 대상으로 표시됩니다.This marks the selected subscription for validation.

  2. 각 구독에 대해 병합 에이전트를 시작합니다.Start the merge agent for each subscription. 자세한 내용은 Synchronize a Pull SubscriptionSynchronize a Push Subscription를 참조하세요.For more information, see Synchronize a Pull Subscription and Synchronize a Push Subscription.

  3. 유효성 검사의 결과에 대한 에이전트 출력을 확인합니다.Check the agent output for the result of the validation.

  4. 유효성을 검사할 각 구독에 대해 1~3단계를 반복합니다.Repeat steps 1 through 3 for each subscription being validated.

참고

Replication Merge Agent 를 실행할 때 -Validate매개 변수를 지정하여 동기화가 끝날 때 병합 게시에 대한 구독의 유효성을 검사할 수도 있습니다.A subscription to a merge publication can also be validated at the end of a synchronization by specifying the -Validate parameter when running the Replication Merge Agent.

병합 에이전트 매개 변수를 사용하여 구독의 데이터 유효성을 검사하려면To validate data in a subscription using Merge Agent parameters

  1. 명령 프롬프트에서 다음 방법 중 하나를 사용하여 구독자(끌어오기 구독) 또는 배포자(밀어넣기 구독)에서 병합 에이전트를 시작합니다.Start the Merge Agent at the Subscriber (pull subscription) or at the Distributor (push subscription) from the command prompt in one of the following ways.

    • -Validate 매개 변수에 1 (행 개수) 또는 3 (행 개수 및 이진 체크섬) 값을 지정합니다.Specifying a value of 1 (rowcount) or 3 (rowcount and binary checksum) for the -Validate parameter.

    • -ProfileName 매개 변수에 행 개수 유효성 검사행 개수 및 체크섬 유효성 검사 를 지정합니다.Specifying rowcount validation or rowcount and checksum validation for the -ProfileName parameter.

      자세한 내용은 Synchronize a Pull Subscription 또는 Synchronize a Push Subscription를 참조하세요.For more information, see Synchronize a Pull Subscription or Synchronize a Push Subscription.

RMO(복제 관리 개체) 사용 Using Replication Management Objects (RMO)

복제를 사용하면 RMO(복제 관리 개체)를 통해 구독자의 데이터가 게시자의 데이터와 일치하는지를 프로그래밍 방식으로 확인할 수 있습니다.Replication enables you to use Replication Management Objects (RMO) to programmatically validate that data at the Subscriber matches data at the Publisher. 사용하는 개체는 복제 토폴로지의 유형에 따라 달라집니다.The objects you use depend on the type of replication topology. 트랜잭션 복제에는 게시에 대한 모든 구독의 유효성 검사가 필요합니다.Transactional replication requires validation of all subscriptions to a publication.

참고

예를 보려면 이 섹션의 뒷부분에 나오는 예(RMO)를 참조하세요.For an example, see Example (RMO), later in this section.

트랜잭션 게시의 모든 아티클에 대해 데이터 유효성을 검사하려면To validate data for all articles in a transactional publication

  1. ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.Create a connection to the Publisher by using the ServerConnection class.

  2. TransPublication 클래스의 인스턴스를 만듭니다.Create an instance of the TransPublication class. 게시에 대해 NameDatabaseName 속성을 설정합니다.Set the Name and DatabaseName properties for the publication. ConnectionContext 속성을 1단계에서 만든 연결로 설정합니다.Set the ConnectionContext property to the connection created in step 1.

  3. LoadProperties 메서드를 호출하여 개체의 나머지 속성을 얻습니다.Call the LoadProperties method to get the remaining properties of the object. 이 메서드가 false를 반환하는 경우 2단계에서 게시 속성이 올바르게 정의되지 않았거나 게시가 없습니다.If this method returns false, either the publication properties in step 2 were defined incorrectly or the publication does not exist.

  4. ValidatePublication 메서드를 호출합니다.Call the ValidatePublication method. 다음을 전달합니다.Pass the following:

    • ValidationOption

    • ValidationMethod

    • 유효성 검사가 완료된 후 배포 에이전트를 중지할지 여부를 나타내는 부울입니다.A Boolean that indicates whether to stop the Distribution Agent after validation is completed.

      이렇게 하면 해당 아티클이 유효성 검사 대상으로 표시됩니다.This marks the articles for validation.

  5. 배포 에이전트를 아직 실행하지 않은 경우 배포 에이전트를 시작하여 각 구독을 동기화합니다.If not already running, start the Distribution Agent to synchronize each subscription. 자세한 내용은 Synchronize a Push Subscription 또는 Synchronize a Pull Subscription를 참조하세요.For more information, see Synchronize a Push Subscription or Synchronize a Pull Subscription. 유효성 검사 작업의 결과는 에이전트 기록에 추가됩니다.The result of the validation operation is written to the agent history. 자세한 내용은 Monitoring Replication을 참조하세요.For more information, see Monitoring Replication.

병합 게시에 대한 모든 구독의 데이터 유효성을 검사하려면To validate data in all subscriptions to a merge publication

  1. ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.Create a connection to the Publisher by using the ServerConnection class.

  2. MergePublication 클래스의 인스턴스를 만듭니다.Create an instance of the MergePublication class. 게시에 대해 NameDatabaseName 속성을 설정합니다.Set the Name and DatabaseName properties for the publication. ConnectionContext 속성을 1단계에서 만든 연결로 설정합니다.Set the ConnectionContext property to the connection created in step 1.

  3. LoadProperties 메서드를 호출하여 개체의 나머지 속성을 얻습니다.Call the LoadProperties method to get the remaining properties of the object. 이 메서드가 false를 반환하는 경우 2단계에서 게시 속성이 올바르게 정의되지 않았거나 게시가 없습니다.If this method returns false, either the publication properties in step 2 were defined incorrectly or the publication does not exist.

  4. ValidatePublication 메서드를 호출합니다.Call the ValidatePublication method. 원하는 ValidationOption을 전달합니다.Pass the desired ValidationOption.

  5. 각 구독에 대해 병합 에이전트를 실행하여 유효성 검사를 시작하거나 예약된 다음 에이전트가 실행될 때까지 기다립니다.Run the Merge Agent for each subscription to start validation, or wait for the next scheduled agent run. 자세한 내용은 Synchronize a Pull SubscriptionSynchronize a Push Subscription를 참조하세요.For more information, see Synchronize a Pull Subscription and Synchronize a Push Subscription. 유효성 검사 작업의 결과는 에이전트 기록에 추가되며, 복제 모니터를 사용하여 해당 결과를 볼 수 있습니다.The result of the validation operation is written to the agent history, which you view by using Replication Monitor. 자세한 내용은 Monitoring Replication을 참조하세요.For more information, see Monitoring Replication.

병합 게시에 대한 단일 구독의 데이터 유효성을 검사하려면To validate data in a single subscription to a merge publication

  1. ServerConnection 클래스를 사용하여 게시자 연결을 만듭니다.Create a connection to the Publisher by using the ServerConnection class.

  2. MergePublication 클래스의 인스턴스를 만듭니다.Create an instance of the MergePublication class. 게시에 대해 NameDatabaseName 속성을 설정합니다.Set the Name and DatabaseName properties for the publication. ConnectionContext 속성을 1단계에서 만든 연결로 설정합니다.Set the ConnectionContext property to the connection created in step 1.

  3. LoadProperties 메서드를 호출하여 개체의 나머지 속성을 얻습니다.Call the LoadProperties method to get the remaining properties of the object. 이 메서드가 false를 반환하는 경우 2단계에서 게시 속성이 올바르게 정의되지 않았거나 게시가 없습니다.If this method returns false, either the publication properties in step 2 were defined incorrectly or the publication does not exist.

  4. ValidateSubscription 메서드를 호출합니다.Call the ValidateSubscription method. 구독자 이름, 유효성을 검사할 구독 데이터베이스 및 원하는 ValidationOption을 전달합니다.Pass the name of the Subscriber and subscription database being validated and the desired ValidationOption.

  5. 유효성 검사를 시작할 구독에 대해 병합 에이전트를 실행하거나 예약된 다음 에이전트가 실행될 때까지 기다립니다.Run the Merge Agent for the subscription to start validation, or wait for the next scheduled agent run. 자세한 내용은 Synchronize a Pull SubscriptionSynchronize a Push Subscription를 참조하세요.For more information, see Synchronize a Pull Subscription and Synchronize a Push Subscription. 유효성 검사 작업의 결과는 에이전트 기록에 추가되며, 복제 모니터를 사용하여 해당 결과를 볼 수 있습니다.The result of the validation operation is written to the agent history, which you view by using Replication Monitor. 자세한 내용은 Monitoring Replication을 참조하세요.For more information, see Monitoring Replication.

예(RMO) Example (RMO)

이 예제에서는 트랜잭션 게시에 대한 모든 구독을 대상으로 행 개수를 확인하도록 표시합니다.This example marks all subscriptions to a transactional publication for rowcount validation.

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

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
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";

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 = "AdventureWorks2012"

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
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"

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

이 예제에서는 병합 게시에 대한 특정 구독을 대상으로 행 개수를 확인하도록 표시합니다.This example marks a specific subscription to a merge publication for rowcount validation.

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

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
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2012";
string subscriberName = subscriberInstance;
string subscriptionDbName = "AdventureWorks2012Replica";

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 = "AdventureWorks2012"
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"

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
' Define the server, database, and publication names
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2012"
Dim subscriberName As String = subscriberInstance
Dim subscriptionDbName As String = "AdventureWorks2012Replica"

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