Фильтрация опубликованных данных
Фильтрация статей таблиц позволяет создавать секции публикуемых данных. С помощью фильтрации опубликованных данных можно достичь следующих целей:
- Минимизировать объем данных, передаваемых по сети.
- Уменьшить место на подписчике, необходимое для хранения данных.
- Настроить публикации и приложения на основе индивидуальных требований подписчиков.
- Исключить конфликты или уменьшить их количество, если подписчики обновляют данные, так как разные секции данных могут посылаться разным подписчикам (никакие два подписчика не обновляют одни и те же значения данных).
- Исключить передачу конфиденциальных данных. Фильтры строк и фильтры столбцов могут использоваться для ограничения доступа подписчика к данным. Для репликации слиянием могут возникать проблемы безопасности, если используется параметризованный фильтр, включающий HOST_NAME(). Дополнительные сведения см. в подразделе «Фильтрация с использованием HOST_NAME()» раздела Параметризованные фильтры строк.
Репликация предлагает четыре типа фильтров:
- Cтатические фильтры строк, которые доступны со всеми типами репликаций.
Используя статические фильтры строк, можно выбрать для публикации подмножество строк. Все подписчики на фильтрованную публикацию получают одно и то же подмножество строк фильтрованной таблицы. Дополнительные сведения см. в подразделе «Статические фильтры строк» данного раздела. - Фильтры столбцов, доступные со всеми типами репликаций.
Используя фильтры столбцов, можно выбрать для публикации подмножество столбцов. Дополнительные сведения см. в подразделе «Фильтры столбцов» данного раздела. - Параметризованные фильтры строк, доступные только с репликацией слиянием.
Используя параметризованные фильтры строк, можно выбрать для публикации подмножество строк. В отличие от статических фильтров, которые отправляют одно и то же подмножество строк всем подписчикам, параметризованные фильтры строк используют получаемые от подписчиков значения данных для отправки подписчикам разных подмножеств строк. Дополнительные сведения см. в разделе Параметризованные фильтры строк. - Фильтры объединения, доступные только с репликацией слиянием.
Используя фильтры объединения, можно расширить фильтр строк с одной публикуемой таблицы на другую. Дополнительные сведения см. в разделе Фильтры соединения.
Статические фильтры строк
На следующей иллюстрации показана опубликованная таблица, которая отфильтрована так, что в публикацию включаются только строки 2, 3 и 6.
Статический фильтр строк использует предложение WHERE для отбора соответствующих данных для публикации; необходимо указать заключительную часть предложения WHERE. Рассмотрите Таблица Product (AdventureWorks) в примере базы данных Adventure Works, в которой содержится столбец ProductLine. Для публикации только строк с данными о продуктах, относящихся к горным велосипедам, укажите ProductLine = 'M'
.
Применение статического фильтра строк приводит к выборке одного набора данных для каждой публикации. В предыдущем примере все подписчики получили бы только строки с данными о продуктах, относящихся к горным велосипедам. Если имеется другой подписчик, которому нужны только строки с данными о продуктах, относящихся к дорожным велосипедам,
- с помощью репликации моментальных снимков или репликации транзакций можно создать другую публикацию и включить таблицу в обе публикации (в предложении фильтра для статьи в этой публикации укажите
ProductLine = 'R')
.Примечание. Фильтры строк в публикациях транзакций могут существенно увеличить объем дополнительно выполняемых служебных операций, поскольку предложение фильтра статьи оценивается для каждой строки журнала, записанной для публикуемой таблицы, с целью определения необходимости репликации строки. Необходимо избегать фильтров строк в публикациях транзакций, если каждый узел репликации может поддерживать полную загрузку данных, а общий набор данных достаточно невелик. - Вместо создания нескольких публикаций со статическими фильтрами строк используйте с репликацией слиянием параметризованные фильтры строк. Дополнительные сведения см. в разделе Параметризованные фильтры строк.
Определение или изменение статического фильтра строк
- SQL Server Management Studio: Как определить и изменить статический фильтр строк (среда SQL Server Management Studio)
- Программирование репликации на Transact-SQL: How to: Define and Modify a Static Row Filter (Replication Transact-SQL Programming)
- Программирование объектов RMO: How to: Define an Article (RMO Programming)
Фильтры столбцов
На следующей иллюстрации показана публикация, которая отфильтровывает столбец «C».
Как показано здесь, можно также применять фильтр строк и фильтр столбцов совместно.
После создания публикации можно использовать фильтр столбцов, чтобы удалить столбец из существующей публикации, но сохранить его в таблице у издателя, а также, чтобы включить существующий столбец в публикацию. Для внесения других изменений, например, для добавления нового столбца в таблицу с последующим добавлением этой таблицы в опубликованную статью, используйте репликацию изменения схемы. Дополнительные сведения см. в подразделах «Добавление столбцов» и «Удаление столбцов» раздела Внесение изменений схем в базы данных публикаций.
Типы столбцов, перечисленных в следующей таблице, не могут быть отфильтрованы из определенных типов публикаций.
Тип столбца | Тип публикации и параметры |
---|---|
Столбец первичного ключа |
Столбцы первичных ключей требуются во всех таблицах публикации транзакций. Первичные ключи не требуются для таблиц в публикациях слиянием, но если столбец первичного ключа имеется, то к нему не может быть применен фильтр. |
Столбец внешнего ключа |
Все публикации создаются с использованием мастера создания публикаций. Столбцы внешнего ключа могут фильтроваться с помощью хранимых процедур Transact-SQL. Дополнительные сведения см. в разделе How to: Define and Modify a Column Filter (Replication Transact-SQL Programming). |
Столбец rowguid |
Публикация слиянием 1 |
Столбец msrepl_tran_version |
Публикации моментальных снимков или публикации транзакций, разрешающие использование обновляемых подписок |
Столбцы, не допускающие значения NULL и не имеющие значений по умолчанию или набора свойств IDENTITY. |
Публикации моментальных снимков или публикации транзакций, разрешающие использование обновляемых подписок |
Столбцы с уникальными ограничениями или индексами |
Публикации моментальных снимков или публикации транзакций, разрешающие использование обновляемых подписок |
Все столбцы в публикации слиянием SQL Server 7.0 |
В публикациях слиянием SQL Server 7.0 к столбцам фильтр применен быть не может. |
Временная метка |
Публикации моментальных снимков или публикации транзакций SQL Server 7.0, которые разрешают использование обновляемых подписок |
1. Если вы публикуете таблицу в публикации слиянием и эта таблица уже содержит столбец с данными типа uniqueidentifier и с набором свойств ROWGUIDCOL, то репликация может использовать этот столбец вместо создания дополнительного столбца с именем rowguid. В этом случае должен быть опубликован существующий столбец.
Определение или изменение фильтра столбцов
- SQL Server Management Studio: Как определить и изменить фильтр столбцов (среда SQL Server Management Studio)
- Программирование репликации на Transact-SQL: How to: Define and Modify a Column Filter (Replication Transact-SQL Programming)
- Программирование объектов RMO: How to: Define an Article (RMO Programming)
Вопросы применения фильтров
При фильтрации данных учитывайте следующие требования:
- В публикацию должны быть включены все столбцы, на которые имеются ссылки в фильтрах строк. Иными словами, нельзя использовать фильтр столбцов для исключения столбца, который используется в фильтре строк.
- Если добавление или изменение фильтра производится после инициализации подписок, то подписки должны быть инициализированы повторно.
- Максимальное число байтов, разрешенное для столбца, используемого в фильтре, равно 1024 для статьи в публикации слиянием и 8000 для статьи в публикации транзакций.
- В фильтрах строк или фильтрах объединения не допускаются ссылки на столбцы со следующими типами данных:
- varchar(max) and nvarchar(max)
- varbinary(max)
- text and ntext
- image
- XML
- UDT
- Репликация транзакций позволяет реплицировать индексированное представление либо в виде представления, либо в виде таблицы. Если выполняется репликация представления в виде таблицы, отфильтровать столбцы из таблицы не удастся.
См. также
Основные понятия
Публикация данных и объектов базы данных