При работе с репликацией SQL Server важно понимать, как управляются и передаются свойства идентификаторов между издателем и подписчиком. В обычной транзакционной и снимковой репликации свойство идентификатора не передается подписчику, поскольку предполагается, что подписчик не будет вставлять строки. Однако в слиянии репликации, которое позволяет независимый и отключенный доступ к данным, свойство идентификатора передается.
Одной из проблем в слиянии репликации является управление диапазонами идентификаторов, чтобы гарантировать отсутствие перекрытия значений идентификаторов во время синхронизации. SQL Server предлагает два варианта управления диапазонами идентификаторов: автоматическое и ручное управление диапазонами.
Автоматическое управление диапазонами
SQL Server может автоматически управлять диапазонами идентификаторов в слиянии репликации. Однако этот метод иногда может вызывать проблемы. Если диапазон заканчивается до синхронизации, могут возникнуть осложнения. Чтобы избежать этого, рекомендуется выбрать большой диапазон значений для каждого подписчика, учитывая, что атрибут идентификатора применяется к целочисленному типу данных со значением от -2,147,483,648 до 2,147,483,647. Если у вас нет невероятно большого количества подписчиков, выбор большого диапазона значений для каждого подписчика должен гарантировать, что никогда не возникнет необходимости в дополнительном диапазоне.
Ручное управление диапазонами
Для тех, кто предпочитает полный контроль над диапазонами идентификаторов, есть возможность ручного управления диапазонами. Этот метод включает выбор алгоритма, чтобы гарантировать, что диапазоны каждого узла не перекрываются. Существует несколько методов выбора, например, назначение положительных четных чисел издателю, положительных нечетных чисел первому подписчику, отрицательных четных чисел второму подписчику и отрицательных нечетных чисел третьему подписчику.
Чтобы реализовать ручное управление диапазонами, выполните следующие шаги:
- Убедитесь, что значения начального значения и приращения установлены правильно на издателе перед публикацией таблицы. Изменение значения идентификатора позже на издателе или подписчике приведет к ошибке.
- Опубликуйте таблицу с использованием слияния репликации, оставив флажок “Диапазон идентификаторов” в свойствах статьи пустым, чтобы разрешить ручное управление диапазоном идентификаторов.
- Передайте таблицу подписчику с использованием таких методов, как DTS, резервное копирование/восстановление, BCP или связанные серверы.
- Сбросьте текущее значение идентификатора и начальное значение на подписчике. Это можно сделать с помощью команды DBCC CHECKIDENT.
- Выполните инициализацию без синхронизации для синхронизации данных между издателем и подписчиком.
Важно отметить, что при ручном управлении диапазонами любые дополнительные статьи, добавленные, также должны быть статьями без синхронизации. Поэтому может быть полезно выделить статьи, требующие ручного управления диапазонами, в свою собственную публикацию.
Использование @creation_script в sp_addmergearticle
Еще один метод управления диапазонами идентификаторов в слиянии репликации включает использование параметра @creation_script в хранимой процедуре sp_addmergearticle. Этот метод не полностью поддерживается графическим интерфейсом, но он позволяет более гибко добавлять новые статьи в существующую публикацию.
Для использования этого метода определите отдельный скрипт для создания таблицы на подписчике и укажите файл скрипта с помощью параметра @creation_script. После запуска агента снимка текстовый файл, содержащий скрипт создания, передается подписчику. Файл можно редактировать вручную, чтобы изменить атрибуты идентификатора перед каждой инициализацией подписчика.
Важно отметить, что после синхронизации подписчика изменение скрипта создания с использованием этого метода приведет к недействительности подписки и потребует повторной инициализации всех остальных подписчиков.
Заключение
В заключение, управление диапазонами идентификаторов в репликации SQL Server является важным для избежания перекрытия и обеспечения целостности данных. SQL Server предлагает как автоматическое, так и ручное управление диапазонами. Автоматическое управление диапазонами проще настроить с помощью графических инструментов, но ручное управление диапазонами позволяет более гибко добавлять новые статьи в существующую публикацию. Выберите метод, который лучше всего соответствует вашим потребностям, и убедитесь, что диапазоны идентификаторов правильно управляются для поддержания целостности ваших реплицированных данных.
Ссылка: Пол Ибисон, декабрь 2004 г.