Бөлісу құралы:


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

Область применения: SQL Server База данных SQL Azure

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

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

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

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

Примечание.

Управляемый экземпляр SQL Azure может быть издателем, распространителем и подписчиком для репликации моментальных снимков и транзакций. Базы данных в службе "База данных SQL Azure" могут быть только принудительными подписчиками для репликации моментальных снимков и транзакций. Дополнительные сведения см. в статье о репликации транзакций с Базой данных SQL Azure и Управляемым экземпляром SQL Azure.

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

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

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

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

Проверка данных состоит из трех этапов:

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

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

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

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

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

При проверке данных учитывайте следующие соображения.

  • Перед проверкой данных следует остановить все действия по обновлению на подписчиках (при выполнении проверки нет необходимости останавливать действия на издателе).
  • Ввиду того что простые и двоичные контрольные суммы могут требовать больших вычислительных мощностей при проверке большого количества данных, следует назначать проверку на время, когда активность используемых в репликации серверов минимальна.
  • Репликация проверяет только таблицы; она не проверяет, совпадают ли в схеме на издателе и подписчике только статьи (например, хранимые процедуры).
  • Двоичная контрольная сумма может использоваться с любой опубликованной таблицей. С помощью контрольной суммы нельзя проверить таблицы с фильтрацией по столбцам, или логические структуры таблиц, отличающиеся смещением столбцов (из-за инструкций ALTER TABLE, удаляющих или добавляющих столбцы).
  • При проверке репликации вызываются функции checksum и binary_checksum . Сведения об их поведении см. в статьях CHECKSUM (Transact-SQL) и BINARY_CHECKSUM (Transact-SQL).
  • Проверка с использованием двоичной контрольной суммы может неверно сообщить об отказе, если типы данных на подписчике и издателе отличаются. Это может произойти, если выполнить одно из следующих действий:
    • Явно задайте параметры схемы для сопоставления типов данных для более ранних версий SQL Server.
    • Задайте уровень совместимости публикации для публикации слиянием на более раннюю версию SQL Server и опубликованные таблицы содержат один или несколько типов данных, которые должны быть сопоставлены для этой версии.
    • Инициализация подписки вручную при использовании разных типов данных на подписчике.
  • Проверки двоичной контрольной суммы и простой контрольной суммы не поддерживаются трансформируемыми подписками для репликации транзакций.
  • Проверка не поддерживается для данных, реплицированных в подписчики, отличные от SQL Server.
  • Процедуры монитора репликации используются только для принудительных подписок, так как в мониторе репликации нельзя синхронизировать подписки по запросу. Однако в мониторе репликации можно пометить подписку для проверки и просмотреть результаты проверки для подписок по запросу.
  • Результаты показывают, как завершилась проверка — успешно или неудачно, но в случае ошибки строки, не прошедшие проверку, не указываются. Для сравнения данных издателя и подписчика используется tablediff Utility. Дополнительные сведения об использовании этой служебной программы с реплицированными данными см. в статье "Сравнение реплицированных таблиц для различий (программирование репликации)".

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

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

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

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

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

  1. Подключитесь к издателю в СРЕДЕ SQL Server Management Studio и разверните узел сервера.
  2. Раскройте папку Репликация , а затем папку Локальные публикации .
  3. Щелкните правой кнопкой мыши публикацию, для которой хотите проверить подписки, затем выберите Проверить подписки.
  4. В диалоговом окне "Проверка подписок" выберите, какие подписки необходимо проверить:
    • Выберите Проверить все подписки SQL Server.
    • Выберите Проверить следующие подпискии укажите одну или несколько подписок.
  5. Чтобы задать тип проверки (подсчет строк или подсчет строк с контрольной суммой), щелкните Параметры проверкии укажите параметры в диалоговом окне Параметры проверки подписки .
  6. Нажмите ОК.
  7. Просмотрите результаты проверки в мониторе репликации или в диалоговом окне Просмотр состояния синхронизации . Для каждой подписки:
    1. Раскройте публикацию и щелкните правой кнопкой мыши подписку, затем выберите Просмотр состояния синхронизации.
    2. 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. Если агент распространителя для каждой подписки еще не запущен, запустите его (необязательно). Дополнительные сведения см. в разделах Synchronize a Pull Subscription и Synchronize a Push Subscription.

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

Одна статья

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

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

    Примечание.

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

  2. Если агент распространителя для каждой подписки еще не запущен, запустите его (необязательно). Дополнительные сведения см. в разделах Synchronize a Pull Subscription и Synchronize a Push Subscription.

  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. Запустите агент распространителя, если он еще не работает (необязательно). Дополнительные сведения см. в разделах Synchronize a Pull Subscription и Synchronize a Push Subscription.

  8. Просмотрите результаты проверки в выходном файле агента. Дополнительные сведения см. в разделе Validate Data at the Subscriber.

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

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

  1. В мониторе репликации раскройте группу издателей на левой панели, а затем раскройте нужного издателя.

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

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

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

  5. Нажмите ОК.

  6. Перейдите на вкладку Все подписки .

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

    1. 1. Если агент не запущен, щелкните правой кнопкой мыши подписку и выберите Запустить синхронизацию.
    2. Щелкните правой кнопкой мыши подписку, затем выберите Просмотреть подробности.
    3. 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. 1. Если агент не запущен, щелкните правой кнопкой мыши подписку и выберите Запустить синхронизацию.
    2. Щелкните правой кнопкой мыши подписку, затем выберите Просмотреть подробности.
    3. Просмотрите сведения на вкладке Журнал синхронизации в текстовом поле Последнее сообщение выбранного сеанса .

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

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

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

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

  2. Запустите агент слияния для каждой подписки. Дополнительные сведения см. в разделах Synchronize a Pull Subscription и Synchronize a Push Subscription.

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

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

Примечание.

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

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

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

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

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

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

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

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

  2. Запустите агент слияния для каждой подписки. Дополнительные сведения см. в разделах Synchronize a Pull Subscription и Synchronize a Push Subscription.

  3. Просмотрите результаты проверки в выходном файле агента. Дополнительные сведения см. в разделе Validate Data at the Subscriber.

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

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

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

    Дополнительные сведения см. в разделе Synchronize a Pull Subscription или Synchronize a Push Subscription.

При помощи объектов RMO

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

Примечание.

См. приведенный ниже Пример (объекты RMO).

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

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

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

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

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

    • ValidationOption

    • ValidationMethod

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

    Будут отмечены статьи для проверки.

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

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

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

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

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

  4. Вызовите метод ValidatePublication . Передайте нужный параметр ValidationOption.

  5. Выполните агент слияния для каждой подписки, чтобы начать проверку, или подождите следующего планового запуска агента. Дополнительные сведения см. в разделах Synchronize a Pull Subscription и Synchronize a Push Subscription. Результат проверки записывается в журнал агента, который можно просмотреть с помощью монитора репликации. Дополнительные сведения см. в разделе Monitoring Replication.

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

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

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

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

  4. Вызовите метод ValidateSubscription . Передайте имя подписчика, проверяемую базу данных подписки и нужный параметр ValidationOption.

  5. Выполните агент слияния для каждой подписки, чтобы начать проверку, или подождите следующего планового запуска агента. Дополнительные сведения см. в разделах Synchronize a Pull Subscription и Synchronize a Push Subscription. Результат проверки записывается в журнал агента, который можно просмотреть с помощью монитора репликации. Дополнительные сведения см. в разделе Monitoring Replication.

Пример (объекты 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

См. также

Best Practices for Replication Administration