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

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

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

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

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

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

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

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

    Чтобы скопировать объекты, перечисленные в предыдущей таблице, укажите соответствующие значения параметров схемы. Сведения об указании параметров схемы см. в разделе "Указание параметров схемы".

Репликация копирует объекты на подписчика во время начальной синхронизации. Если схема секционирования использует файловые группы, отличные от файловой группы 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 определяет, следует ли реплицировать инструкцию SWITCH PARTITION DDL для подписчиков. Этот параметр действителен только в том случае, если для @allow_partition_switch задано trueзначение .

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

См. также

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