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

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

  • Минимизировать объем данных, передаваемых по сети.

  • Уменьшить место на подписчике, необходимое для хранения данных.

  • Настроить публикации и приложения на основе индивидуальных требований подписчиков.

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

  • Исключить передачу конфиденциальных данных. Фильтры строк и фильтры столбцов могут использоваться для ограничения доступа подписчика к данным. Для репликации слиянием могут возникать проблемы безопасности, если используется параметризованный фильтр, включающий HOST_NAME(). Дополнительные сведения см. в подразделе «Фильтрация с использованием HOST_NAME()» раздела Параметризованные фильтры строк.

Репликация предлагает четыре типа фильтров:

  • Cтатические фильтры строк, которые доступны со всеми типами репликаций.

    Используя статические фильтры строк, можно выбрать для публикации подмножество строк. Все подписчики на фильтрованную публикацию получают одно и то же подмножество строк фильтрованной таблицы. Дополнительные сведения см. в подразделе «Статические фильтры строк» данного раздела.

  • Фильтры столбцов, доступные со всеми типами репликаций.

    Используя фильтры столбцов, можно выбрать для публикации подмножество столбцов. Дополнительные сведения см. в подразделе «Фильтры столбцов» данного раздела.

  • Параметризованные фильтры строк, доступные только с репликацией слиянием.

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

  • Фильтры объединения, доступные только с репликацией слиянием.

    Используя фильтры объединения, можно расширить фильтр строк с одной публикуемой таблицы на другую. Дополнительные сведения см. в разделе Фильтры соединения.

Статические фильтры строк

На следующей иллюстрации показана опубликованная таблица, которая отфильтрована так, что в публикацию включаются только строки 2, 3 и 6.

Фильтрация строк

Статический фильтр строк использует предложение WHERE для отбора соответствующих данных для публикации; необходимо указать заключительную часть предложения WHERE. Рассмотрите Таблица Product (AdventureWorks) в примере базы данных Adventure Works, в которой содержится столбец ProductLine. Для публикации только строк с данными о продуктах, относящихся к горным велосипедам, укажите ProductLine = 'M'.

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

  • с помощью репликации моментальных снимков или репликации транзакций можно создать другую публикацию и включить таблицу в обе публикации (в предложении фильтра для статьи в этой публикации укажите ProductLine = 'R').

    ПримечаниеПримечание

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

  • Вместо создания нескольких публикаций со статическими фильтрами строк используйте с репликацией слиянием параметризованные фильтры строк. Дополнительные сведения см. в разделе Параметризованные фильтры строк.

Определение или изменение статического фильтра строк

Фильтры столбцов

На следующей иллюстрации показана публикация, которая отфильтровывает столбец «C».

Фильтрация столбцов

Как показано здесь, можно также применять фильтр строк и фильтр столбцов совместно.

Фильтрация строк и столбцов

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

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

Тип столбца

Тип публикации и параметры

Столбец первичного ключа

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

Столбец внешнего ключа

Все публикации создаются с использованием мастера создания публикаций. Столбцы внешнего ключа могут фильтроваться с помощью хранимых процедур Transact-SQL. Дополнительные сведения см. в разделе Как определить и изменить фильтр столбцов (программирование репликации на языке Transact-SQL).

Столбец rowguid

Публикация слиянием 1

Столбец msrepl_tran_version

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

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

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

Столбцы с уникальными ограничениями или индексами

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

Все столбцы в публикации слиянием SQL Server 7.0

В публикациях слиянием SQL Server 7.0 к столбцам фильтр применен быть не может.

Временная метка

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

1. Если вы публикуете таблицу в публикации слиянием и эта таблица уже содержит столбец с данными типа uniqueidentifier и с набором свойств ROWGUIDCOL, то репликация может использовать этот столбец вместо создания дополнительного столбца с именем rowguid. В этом случае должен быть опубликован существующий столбец.

Определение или изменение фильтра столбцов

Вопросы применения фильтров

При фильтрации данных учитывайте следующие требования:

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

  • Если добавление или изменение фильтра производится после инициализации подписок, то подписки должны быть инициализированы повторно.

  • Максимальное число байтов, разрешенное для столбца, используемого в фильтре, равно 1024 для статьи в публикации слиянием и 8000 для статьи в публикации транзакций.

  • В фильтрах строк или фильтрах объединения не допускаются ссылки на столбцы со следующими типами данных:

    • varchar(max) and nvarchar(max)

    • varbinary(max)

    • text and ntext

    • image

    • XML

    • UDT

  • Репликация транзакций позволяет реплицировать индексированное представление либо в виде представления, либо в виде таблицы. Если выполняется репликация представления в виде таблицы, отфильтровать столбцы из таблицы не удастся.

См. также

Основные понятия