Сверка данных при merge-репликации
ОГЛАВЛЕНИЕ
Если Вы определяете rowcount только для сверки, тогда SQL Server вычисляет rowcount на уровне publisher, затем сравнивает результат с rowcount на уровне subscriber, для проверки того, что данные синхронизированы. Когда Вы выбираете rowcount и проверку правильности контрольной суммы, в этом случае SQL Server вычисляет rowcount и контрольную сумму для publisher, затем сравнивает результат с rowcount и контрольной суммой для subscriber. Причём, если размер данных репликации был очень большой, Вы можете задать для сверку только проверку rowcount. Процесс сверки работает в скрытом режиме, то есть он не прерывает транзакций на publisher, и текущий процесс репликации не будет остановлен.
Merge Agent посылает системное сообщение 20574, если обнаружен сбой проверки, или системное сообщение 20575, если сверка проходит удачно. Merge Agent будет копировать изменения на subscriber, даже если сверка будет показывать, что subscriber не находится в синхронизации. Вы можете исследовать Windows NT или Windows 2000 Application log, чтобы увидеть там результаты отражения работы сверки данных (системные сообщения 20574 и 20575 будут записаны в Application log). Вы можете также так настроить Replication Alert на системные сообщения 20574 и 20575, чтобы при сбое проверки администратору посылалось письмо по электронной почте, сообщение на пейджер или сетевое уведомление.
Ограничения
- Сверка только по rowcount доступна для подписчиков SQL Server 6.x или более поздних версий, а сверка rowcount и контрольной суммы доступна только для подписчиков SQL Server7.0/2000.
- Проверка правильности контрольной суммы не должна использоваться, когда основная таблица фильтруется вертикально, но она может использоваться, когда таблица фильтруется горизонтально, потому что контрольная сумма рассчитывается на полную строку.
- Алгоритм контрольной суммы - 32 битный контроль избыточности (CRC цикличный контроль избыточности), который вычисляет значение контрольной суммы для всех столбцов, игнорируя данные в текстовых и image столбцах.
- Таблицы на publisher и на подписчиках должны иметь идентичную структуру (те же самые столбцы в том же самом порядке, с одинаковыми типами данных и одинаковой длины, а также идентичное свойство NULL/NOT NULL). Это необходимо для правильного вычисления контрольной суммы.
- Для копирования данные publisher на подписчика, SQL Server использует утилиту bcp,. Эта утилита может работать в native или символьном режиме. Если Вы используете столбцы данных с плавающей точкой, и ваше приложение имеет гетерогенных подписчиков, то утилита bcp будет работать в символьном режиме и контрольная сумма на publisher и subscriber не будет одинаковой. В таком случае Вы не сможете использовать rowcount и сверку контрольной суммы, придётся ограничиться только сверкой rowcount.
- Вы должны остановить работу службы MSDTC для publisher на всё время сверки (это необходимо для того, чтобы гарантировать неизменность значений subscriber и publisher в течение процесса сверки).
Далее, я хочу по шагам проиллюстрировать, как Вы можете организовать сверку Merge репликации.
Шаг 1
Прежде всего, Вы должны организовать выдачу следующих предупреждений для репликации:
- - Subscriber has failed data validation
- - Subscriber has passed data validation
Откройте в Enterprise Manager дерево нужной базы данных и щёлкните по Replication Monitor. Далее, откройте таким же образом Replication Alerts, и затем, щелкните правой кнопкой мыши по предупреждению "Subscriber has failed data validation". После этого, нужно выбрать пункт Properties. Отметьте галочкой чекбокс Enabled, и нажмите кнопку Apply (применить). Повторите эту процедуру для предупреждения "Subscriber has passed data validation".
Шаг 2
Теперь Вы можете использовать SQL Server Enterprise Manager или параметры командной строки Merge Agent, чтобы настроить непосредственно сверку для Merge репликации.
Чтобы сверить объединяемые данные, используя SQL Server Enterprise Manager, откройте Replication Monitor, затем папку Publishers (Издатели), выберите там нужный publisher, щелкните правой кнопкой мыши по Merge publication, и выберите в выпадающем окне "Validate All Subscriptions". В следующем окне, Вы можете выбирать сверку только rowcount, сверку rowcount и проверку контрольной суммы, или сверку rowcounts и бинарного сравнения контрольной суммы (только для связки SQL2K/SQL2K). Выберите "Verify the row counts only" и щелкните кнопку OK. Сверка будет запущена при следующем запуске Merge Agent.
Для сверки объединяемых данных, с использованием параметров командной строки Merge Agent, откройте Replication Monitor, откройте содержащуюся в этом ответвлении дерева папку Agents, и далее в Merge Agents щёлкните правой кнопкой мыши по вашей publication, а затем щёлкните по Agent Properties. В открывшемся окне нужно выбрать закладку Steps и дважды щёлкните по строке Run agent. Теперь Вы можете изменить/определить сверку только rowcount, сверку rowcount и проверку контрольной суммы, просто вписав в текстовом поле команды -Validate 1 или -Validate 2 соответственно. Кроме того, используя этот метод, Вы можете установить параметр -ValidateInterval, с помощью которого задаётся число минут, которое Вы хотите выделяете для сверки.
Если Вы правильно определили все параметры и нет никаких проблем с вашей Merge репликацией, то после. Это предупреждение будет помещено в Windows NT/2000 Application log.