Поделиться через


Репликация секционированных таблиц и индексов

Секционирование делает большие таблицы и индексы более управляемыми, так как позволяет быстро и эффективно получать доступ к подмножествам данных и управлять ими, при этом сохраняя целостность всей коллекции данных. Дополнительные сведения см. в разделе Partitioned Tables and Indexes. Репликация поддерживает секционирование, предоставляя набор свойств, которые указывают, как работать с секционированными таблицами и индексами.

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

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

Объект Создан с помощью
Секционированная таблица или индекс CREATE TABLE или CREATE INDEX
Функция секционирования CREATE PARTITION FUNCTION
Схема секционирования CREATE PARTITION SCHEME

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

  • На странице Свойства статьи мастера создания публикаций или в диалоговом окне «Свойства публикации». Чтобы скопировать объекты, перечисленные в предыдущей таблице, укажите значение true для свойств Копирование схем секционирования таблиц и Копирование схем секционирования индексов. Сведения о доступе к странице Свойства статьи см. в статье Просмотр и изменение свойств публикации.

  • С помощью параметра schema_option одной из следующих хранимых процедур:

    Чтобы копировать объекты, перечисленные в предыдущей таблице, выберите соответствующие значения параметров схемы. Дополнительные сведения об указании параметров схемы см. в разделе Specify Schema Options.

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

После инициализации подписчика изменения данных распространяются на подписчик и применяются к соответствующим секциям. Однако изменения схемы секционирования не поддерживаются. Репликация транзакций и репликация слиянием не поддерживают репликацию следующих команд: ALTER PARTITION FUNCTION, ALTER PARTITION SCHEME, а также инструкции REBUILD WITH PARTITION команды ALTER INDEX. Изменения, связанные с ними, не будут автоматически реплицироваться на подписчика. Пользователь должен вручную внести соответствующие изменения.

Поддержка переключения секций при репликации

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

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

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

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

Если все секции имеют одинаковую схему на издателях и подписчиках, можно включить параметр allow_partition_switch вместе с replication_partition_switch , что позволит выполнить репликацию только инструкции о смене секции для подписчика. Можно также включить параметр allow_partition_switch без репликации DDL. Это полезно, когда из раздела требуется убрать сведения за прошлые месяцы, однако сохранить реплицированную секцию в течение следующего года в целях резервного копирования на подписчике.

При включении переключения секций в SQL Server 2008 R2 через текущую версию вам могут также потребоваться операции разбиения и слияния в ближайшем будущем. Перед выполнением разбиения или слияния секций в реплицированной таблице убедитесь, что нужная секция не содержит реплицированные команды в режиме ожидания. Также следует учитывать, что при разбиении или слиянии в секции не должны выполняться операции DML. Наличие транзакций, не обработанных агентом чтения журнала, или выполнение операций DML в секции реплицируемой таблицы во время выполнения операции разбиения или слияния (с использованием одной секции) может привести к ошибке обработки агентом чтения журнала. Чтобы ее исправить , может потребоваться повторная инициализация подписки.

Предупреждение

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

Включение переключения секций

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

  • @allow_partition_switch, если задано значение true, функция SWITCH PARTITION может выполняться для базы данных публикации.

  • Свойство@replicate_partition_switch определяет, реплицировать ли инструкцию DDL SWITCH PARTITION на подписчик. Этот параметр действителен, только если @allow_partition_switch имеет значение true.

Эти свойства можно задать с помощью хранимой процедуры sp_addpublication при создании публикации или с помощью процедуры sp_changepublication после создания публикации. Как уже отмечалось, репликация слиянием не поддерживает переключение секций. Чтобы выполнить команду SWITCH PARTITION для таблицы, для которой включена репликация слиянием, удалите эту таблицу из публикации.

См. также

Публикация данных и объектов базы данных