Проверка реплицированных данных

В этом разделе описывается проверка данных на подписчике в SQL Server 2014 с помощью SQL Server Management Studio, Transact-SQL или объектов управления репликацией (RMO).

Транзакционная и репликация слияния позволяют удостовериться, что данные подписчика соответствуют данным издателя. Проверку можно выполнить для определенных подписок или для всех подписок на публикацию. Укажите один из следующих типов проверки, а агент распространителя или агент слияния будет проверять данные при следующем запуске:

  • Только число строк. Эта операция проверяет, совпадает ли количество строк в таблице у подписчика с количеством строк в таблице у издателя, но не проверяет, совпадает ли содержимое строк. Проверка счетчика строк обеспечивает упрощенный подход к проверке, который позволяет учитывать проблемы с данными.
  • Число строк и двоичная контрольная сумма. Помимо подсчета строк на стороне издателя и подписчика, контрольная сумма всех данных вычисляется с помощью алгоритма контрольной суммы. Если подсчёт строк не удаётся, контрольная сумма не выполняется.

Помимо проверки, что данные на подписчике и издателе совпадают, репликация слиянием предоставляет возможность удостовериться, что данные правильно секционированы для каждого подписчика. Для получения дополнительной информации см. Проверка информации о разделе для подписчика слияния.

Как работает проверка данных

SQL Server проверяет данные, вычисляя количество строк или контрольную сумму на издателе, а затем сравнивая эти значения с числом строк или контрольной суммой, вычисляемой на подписчике. Одно значение вычисляется для всей таблицы публикации, и одно значение вычисляется для всей таблицы подписки, но данные в столбцах text, ntext или image не включены в вычисления.

Во время выполнения вычислений общие блокировки временно помещаются в таблицы, для которых выполняются счетчики строк или контрольные суммы, но вычисления выполняются быстро и общие блокировки удаляются, как правило, в течение нескольких секунд.

При использовании двоичных контрольных сумм 32-разрядная проверка избыточности (CRC) выполняется покомпонентно по столбцам, вместо CRC, выполняемой на уровне физической строки на странице данных. Это позволяет столбцам таблицы быть в любом порядке на странице данных, но по-прежнему вычислять тот же CRC для строки. Проверка двоичной контрольной суммы может использоваться при наличии фильтров строк или столбцов в публикации.

Проверка данных — это трехкомпонентный процесс:

  1. Для проверки помечаются одна подписка или все подписки на публикацию. Пометьте подписки для проверки в диалоговом окне "Проверка подписки", "Проверка подписок" и "Проверка всех подписок", которые доступны в папке "Локальные публикации" и в папке "Локальные подписки" в MicrosoftSQL Server Management Studio. Вы также можете пометить подписки на вкладке "Все подписки", вкладке "Список отслеживаемых подписок" и узле публикаций в Мониторе репликации. Сведения о запуске монитора репликации см. в разделе "Запуск монитора репликации".

  2. Подписка подтверждается при следующей синхронизации агентом распределения (для транзакционной репликации) или агентом слияния (для репликации слиянием). Агент распространителя обычно выполняется непрерывно, в этом случае проверка происходит немедленно; Агент слияния обычно выполняется по запросу, в этом случае проверка происходит после запуска агента.

  3. Просмотрите результаты проверки:

    • В подробных окнах монитора репликации: на вкладке "Журнал подписчиков" для репликации транзакций и на вкладке "Журнал синхронизации" для репликации слияния.
    • В диалоговом окне "Состояние синхронизации представления " в Management Studio.

Рекомендации и ограничения

  • Процедуры Монитора Репликации предназначены только для push-подписок, поскольку подписки на вытягивание нельзя синхронизировать в Мониторе Репликации. Однако вы можете пометить подписку для проверки и просмотреть результаты проверки подписок на pull в Replication Monitor.
  • Результаты проверки указывают, прошла ли проверка успешно или нет, но не указывает, какие строки не прошли проверку, если проверка не прошла. Чтобы сравнить данные на издателе и подписчике, используйте программу tablediff. Дополнительные сведения об использовании этой служебной программы с реплицированными данными см. в статье "Сравнение реплицированных таблиц для различий (программирование репликации)".

При проверке данных следует учитывать следующие проблемы:

  • Перед проверкой данных необходимо остановить всю активность обновления на абонентах (не обязательно приостанавливать активность на издателе во время проверки).

  • Так как контрольные суммы и двоичные контрольные суммы могут требовать большого объема ресурсов процессора при проверке большого набора данных, следует запланировать проверку, если на серверах, используемых в репликации, выполняется наименьшая активность.

  • Репликация проверяет только таблицы; она не проверяет, совпадают ли статьи, касающиеся только схемы (например, хранимые процедуры) на издателе и подписчике.

  • Двоичная контрольная сумма может использоваться с любой опубликованной таблицей. Контрольная сумма не способна проверять действительность таблиц с фильтрами столбцов или структурами логических таблиц, где сдвиги столбцов отличаются (вследствие инструкций ALTER TABLE, удаляющих или добавляющих столбцы).

  • Проверка репликации использует checksum функции и binary_checksum . Сведения об их поведении см. в статьях CHECKSUM (Transact-SQL) и BINARY_CHECKSUM (Transact-SQL).

  • Проверка с использованием двоичной контрольной суммы может неверно сообщить об отказе, если типы данных на подписчике и издателе отличаются. Это может произойти, если выполнить одно из следующих действий:

    • Явно задайте параметры схемы для сопоставления типов данных для более ранних версий SQL Server.
    • Установите уровень совместимости публикации для публикации слияния на более раннюю версию SQL Server, если опубликованные таблицы содержат один или несколько типов данных, которые должны быть сопоставлены для этой версии.
    • Вручную инициализируйте подписку и используйте различные типы данных на стороне подписчика.
  • Проверка двоичных контрольных сумм и контрольных сумм не поддерживается для преобразуемых подписок в рамках репликации транзакций.

  • Проверка не поддерживается для данных, реплицированных в подписчики, отличные от SQL Server.

Результаты проверки данных

После завершения проверки агент распространения или агент слияния регистрирует сообщения об успешности или неудаче (репликация не указывает, какие именно строки потерпели неудачу). Эти сообщения можно просматривать в средах SQL Server Management Studio, мониторе репликации и системных таблицах репликации. В приведенном выше разделе показано, как выполнить проверку и просмотреть результаты.

Чтобы справиться с ошибками проверки, рассмотрите следующее:

  • Настройте оповещение репликации под именем Репликация: сбой проверки данных подписчика, чтобы вы были уведомлены о сбое. Дополнительные сведения см. в разделе [Настройка предопределенных оповещений репликации (SQL Server Management Studio)(администрирование/настройка-predefined-replication-alerts-sql-server-management-studio.md).

  • Является ли неудачная проверка проблемой для вашего приложения? Если сбой проверки является проблемой, вручную обновите данные таким образом, чтобы он был синхронизирован или повторно инициализировать подписку:

Статьи в транзакционной репликации

Использование среды SQL Server Management Studio

  1. Подключитесь к издателю в СРЕДЕ SQL Server Management Studio и разверните узел сервера.

  2. Раскройте папку Репликация , а затем папку Локальные публикации .

  3. Щелкните правой кнопкой мыши публикацию, для которой требуется проверить подписки, и нажмите кнопку "Проверить подписки".

  4. В диалоговом окне "Проверка подписок" выберите, какие подписки необходимо проверить:

    • Выберите "Проверить все подписки SQL Server".
    • Выберите "Проверить следующие подписки" и выберите одну или несколько подписок.
  5. Чтобы указать тип проверки для выполнения (количество строк или счетчик строк и контрольную сумму), нажмите кнопку " Параметры проверки", а затем укажите параметры в диалоговом окне "Параметры проверки подписки ".

  6. Нажмите кнопку ОК.

  7. Просматривать результаты проверки в Мониторе репликации или в диалоговом окне "Состояние синхронизации". Для каждой подписки:

    1. Разверните публикацию, щелкните правой кнопкой мыши подписку и выберите пункт "Просмотреть состояние синхронизации".
    2. Если агент не запущен, нажмите кнопку "Пуск " в диалоговом окне "Состояние синхронизации просмотра ". В диалоговом окне отображаются информационные сообщения о проверке.

    Если вы не видите никаких сообщений о проверке, агент уже зарегистрировал последующее сообщение. В этом случае просмотрите результаты проверки в мониторе репликации. Для получения дополнительной информации см. в этом разделе инструкции по использованию Монитора репликации.

Использование Transact-SQL (T-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. (Необязательно) Запустите агент распределения для каждой подписки, если он еще не запущен. Дополнительные сведения см. в разделе "Синхронизация подписки по запросу " и "Синхронизация push-подписки".

  3. Проверьте выходные данные агента для результата проверки. Дополнительные сведения см. в статье Проверка реплицированных данных.

Отдельная статья

  1. На издателе в базе данных публикации выполните sp_article_validation (Transact-SQL). Укажите @publication, имя статьи для @article и одно из следующих значений для @rowcount_only:

    • 1 — проверка только количества строк (значение по умолчанию)
    • 2 — число строк и двоичные контрольные суммы.

    Замечание

    Чтобы успешно выполнить sp_article_validation (Transact-SQL), необходимо иметь разрешения SELECT для всех столбцов в опубликованной базовой таблице.

  2. (Необязательно) Запустите агент распространения для каждой подписки, если он еще не запущен. Дополнительные сведения см. в разделе "Синхронизация подписки по запросу " и "Синхронизация push-подписки".

  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. (Необязательно) Запустите агент распространителя, если он еще не запущен. Дополнительные сведения см. в разделе "Синхронизация подписки по запросу " и "Синхронизация push-подписки".

  8. Проверьте выходные данные агента для результата проверки. Дополнительные сведения см. в разделе "Проверка данных для подписчика".

Все push-подписки на публикацию транзакций

Использование монитора репликации

  1. В Replication Monitor разверните группу издателя в левой области, затем выберите издателя.
  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. Если агент не запущен, нажмите кнопку "Пуск " в диалоговом окне "Состояние синхронизации просмотра ". В диалоговом окне отображаются информационные сообщения о проверке.

    Если вы не видите никаких сообщений о проверке, агент уже зарегистрировал последующее сообщение. В этом случае просмотрите результаты проверки в мониторе репликации. Дополнительные сведения см. в разделе "Монитор репликации", как выполнять процедуры в этом разделе.

Использование Transact-SQL (T-SQL)

  1. На издателе в базе данных публикации выполните sp_validatemergesubscription (Transact-SQL). Укажите @publication, имя подписчика для @subscriber, имя базы данных подписки для @subscriber_db и одно из следующих значений для @level:

    • 1 — проверка только количества строк.
    • 3 - Проверка двоичной контрольной суммы Rowcount.

    Это помечает выбранную подписку для проверки.

  2. Запустите агент слияния для каждой подписки. Дополнительные сведения см. в разделе "Синхронизация подписки по запросу " и "Синхронизация push-подписки".

  3. Проверьте выходные данные агента для результата проверки.

  4. Повторите шаги 1–3 для каждой проверяемой подписки.

Замечание

Подписка на публикацию слиянием может быть также проверена в конце синхронизации, если указать параметр -Validate при запуске Агента слияния репликации.

Для всех подписок на публикацию объединения

Использование среды SQL Server Management Studio

  1. Подключитесь к издателю в СРЕДЕ SQL Server Management Studio и разверните узел сервера.

  2. Раскройте папку Репликация , а затем папку Локальные публикации .

  3. Щелкните правой кнопкой мыши публикацию, для которой требуется проверить подписки, и нажмите кнопку "Проверить все подписки".

  4. В диалоговом окне "Проверка всех подписок" укажите тип проверки для выполнения (количество строк или количество строк и контрольная сумма).

  5. Нажмите кнопку ОК.

  6. Просмотрите результаты проверки в "Монитор репликации" или в диалоговом окне "Состояние синхронизации". Для каждой подписки:

    1. Разверните публикацию, щелкните правой кнопкой мыши подписку и выберите пункт "Просмотреть состояние синхронизации".
    2. Если агент не запущен, нажмите кнопку "Пуск " в диалоговом окне "Состояние синхронизации просмотра ". В диалоговом окне отображаются информационные сообщения о проверке.

    Если вы не видите никаких сообщений о проверке, агент уже зарегистрировал последующее сообщение. В этом случае просмотрите результаты проверки в мониторе репликации. Дополнительную информацию см. в разделе "Процедуры Монитора репликации" этой темы.

Использование Transact-SQL (T-SQL)

  1. На публикаторе в базе данных публикации выполните sp_validatemergepublication (Transact-SQL). Укажите @publication и одно из следующих значений для @level:

    • 1 — проверка только по количеству строк.
    • 3 — проверка двоичной контрольной суммы Rowcount.

    Это помечает все подписки для проверки.

  2. Запустите агент слияния для каждой подписки. Дополнительные сведения см. в разделе "Синхронизация подписки по запросу " и "Синхронизация push-подписки".

  3. Проверьте выходные данные агента для результата проверки. Дополнительные сведения см. в разделе "Проверка данных для подписчика".

Для одной принудительной подписки на публикацию слиянием

Использование Монитора репликации

  1. В Мониторе репликации, в левой области, разверните группу издателя, разверните издателя и выберите публикацию.
  2. Перейдите на вкладку "Все подписки".
  3. Щелкните правой кнопкой мыши подписку, которую нужно проверить, и выберите команду "Проверить подписку".
  4. В диалоговом окне "Проверка подписки" выберите "Проверить эту подписку".
  5. Чтобы указать тип проверки для выполнения (счетчик строк или счетчик строк и контрольную сумму), нажмите кнопку "Параметры", а затем укажите параметры в диалоговом окне "Параметры проверки подписки ".
  6. Нажмите кнопку ОК.
  7. Перейдите на вкладку "Все подписки".
  8. Просмотр результатов проверки:
    1. Если агент не запущен, щелкните правой кнопкой мыши подписку и нажмите кнопку "Начать синхронизацию".
    2. Щелкните правой кнопкой мыши подписку и выберите команду "Просмотреть сведения".
    3. Просмотрите сведения на вкладке Журнал синхронизации в текстовой области последнего сообщения выделенной сессии.

Для всех пуш-подписок на публикацию объединения

Использование средства мониторинга репликации

  1. В Replication Monitor разверните группу издателя в левой области, затем выберите издателя.
  2. Щелкните правой кнопкой мыши публикацию, для которой требуется проверить подписки, и нажмите кнопку "Проверить все подписки".
  3. В диалоговом окне "Проверка всех подписок" укажите тип проверки для выполнения (количество строк или количество строк и контрольная сумма).
  4. Нажмите кнопку ОК.
  5. Перейдите на вкладку "Все подписки".
  6. Просмотр результатов проверки. Для каждой подписки push-уведомлений:
    1. Если агент не запущен, щелкните правой кнопкой мыши подписку и нажмите кнопку "Начать синхронизацию".
    2. Щелкните правой кнопкой мыши подписку и выберите команду "Просмотреть сведения".
    3. Просмотрите сведения на вкладке "Журнал синхронизации" в тексте последнего сообщения выбранного сеанса.

Проверка данных с помощью параметров агента слияния

  1. Запустите агент объединения на подписчике (подписка с вытягиванием) или на распространителе (подписка с наталкиванием) из командной строки одним из следующих способов.

    • Указание значения 1 (rowcount) или 3 (rowcount и двоичной контрольной суммы) для параметра -Validate .
    • Указание проверки числа строк или проверки числа строк и проверки контрольной суммы для параметра -ProfileName.

    Дополнительные сведения см. в разделе "Синхронизация подписки по запросу" или "Синхронизация принудительной подписки".

Использование объектов управления репликацией (RMO)

Репликация позволяет использовать объекты управления репликацией (RMO) для программной проверки того, что данные у подписчика соответствуют данным у издателя. Используемые объекты зависят от типа топологии репликации. Репликация транзакций требует проверки всех подписок на публикацию.

Замечание

Пример см. в разделе "Пример (RMO)" далее в этом разделе.

Валидация данных для всех статей в транзакционной публикации

  1. Создайте соединение с издателем с помощью класса ServerConnection .

  2. Создайте экземпляр класса TransPublication. Задайте свойства Name и DatabaseName для публикации. В свойстве ConnectionContext укажите созданное на шаге 1 соединение.

  3. LoadProperties Вызовите метод, чтобы получить оставшиеся свойства объекта. Если этот метод возвращает false, свойства публикации на шаге 2 были определены неправильно или публикация не существует.

  4. Вызовите метод ValidatePublication . Передайте следующее:

    • ValidationOption
    • ValidationMethod
    • Логическое значение, указывающее, следует ли остановить агент распространения после завершения проверки.

    Это помечает статьи для валидации.

  5. Если агент распространителя еще не запущен, запустите агент распространителя для синхронизации каждой подписки. Дополнительные сведения см. в разделе "Синхронизация принудительной подписки " или "Синхронизация подписки по запросу". Результат операции проверки записывается в журнал агента. Дополнительные сведения см. в разделе Monitoring Replication.

Проверка данных во всех подписках на публикацию с объединением данных

  1. Создайте соединение с издателем с помощью класса ServerConnection .
  2. Создайте экземпляр класса MergePublication. Задайте свойства Name и DatabaseName для публикации. В свойстве ConnectionContext укажите созданное на шаге 1 соединение.
  3. LoadProperties Вызовите метод, чтобы получить оставшиеся свойства объекта. Если этот метод возвращает false, свойства публикации на шаге 2 были определены неправильно или публикация не существует.
  4. Вызовите метод ValidatePublication . Передайте требуемое ValidationOptionзначение.
  5. Запустите агент слияния для каждой подписки, чтобы начать проверку, или дождитесь следующего запланированного запуска агента. Дополнительные сведения см. в разделе "Синхронизация подписки по запросу " и "Синхронизация push-подписки". Результат операции проверки записывается в журнал агента, который вы просматриваете с помощью монитора репликации. Дополнительные сведения см. в разделе Monitoring Replication.

Для проверки данных в одной подписке на публикацию слияния

  1. Создайте соединение с издателем с помощью класса ServerConnection .
  2. Создайте экземпляр класса MergePublication. Задайте свойства Name и DatabaseName для публикации. В свойстве ConnectionContext укажите созданное на шаге 1 соединение.
  3. LoadProperties Вызовите метод, чтобы получить оставшиеся свойства объекта. Если этот метод возвращает false, свойства публикации на шаге 2 были определены неправильно или публикация не существует.
  4. Вызовите метод ValidateSubscription . Передайте имя проверяемого подписчика и базы данных подписки, а также желаемое ValidationOption.
  5. Запустите агент слияния для подписки, чтобы начать проверку, или дождитесь следующего запланированного запуска агента. Дополнительные сведения см. в разделе "Синхронизация подписки по запросу " и "Синхронизация push-подписки". Результат операции проверки записывается в журнал агента, который вы просматриваете с помощью монитора репликации. Дополнительные сведения см. в разделе Monitoring Replication.

Пример (объекты RMO)

В этом примере помечается все подписки на публикацию транзакций для проверки строк.

// 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
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