Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server Управляемый экземпляр SQL Azure
Фильтрация статей таблиц позволяет создавать секции публикуемых данных. С помощью фильтрации опубликованных данных можно достичь следующих целей:
Минимизировать объем данных, передаваемых по сети.
Снизить требуемый объём хранилища у подписчика.
Настраивать публикации и приложения на основе индивидуальных требований подписчиков.
Избежать конфликтов или уменьшить их количество, если подписчики обновляют данные, так как различным подписчикам можно отправить различные секции данных (то есть два подписчика не будут обновлять одни и те же значения данных).
Избежать передачи конфиденциальных данных. Фильтры строк и фильтры столбцов могут быть использованы для ограничения доступа подписчика к данным. При репликации слиянием следует учитывать аспекты безопасности при использовании параметризованного фильтра, включающего HOST_NAME(). Дополнительные сведения см. в подразделе «Фильтрация с использованием HOST_NAME()» раздела Parameterized Row Filters.
Репликация предлагает четыре типа фильтров:
Статические фильтры строк, которые доступны со всеми типами репликаций.
Используя статические фильтры строк, можно выбрать для публикации подмножество строк. Все подписчики на фильтрованную публикацию получают одно и то же подмножество строк фильтрованной таблицы. Дополнительные сведения см. в подразделе «Статические фильтры строк» данного раздела.
Фильтры столбцов, доступные со всеми типами репликаций.
Используя фильтры столбцов, можно выбрать для публикации подмножество столбцов. Дополнительные сведения см. в подразделе «Фильтры столбцов» данного раздела.
Параметризованные фильтры строк, доступные только при репликации слиянием.
Используя параметризованные фильтры строк, можно выбрать для публикации подмножество строк. В отличие от статических фильтров, которые отправляют одно и то же подмножество строк всем подписчикам, параметризованные фильтры строк используют получаемые от подписчиков значения данных для отправки подписчикам разных подмножеств строк. Дополнительные сведения см. в разделе Параметризованные фильтры строк.
Фильтры соединений, которые доступны только при репликации слиянием.
Используя фильтры соединения, можно расширить фильтр строк с одной публикуемой таблицы на другую. Дополнительные сведения см. в статье Join Filters.
статические фильтры строк
На следующей иллюстрации показана опубликованная таблица, которая отфильтрована так, что в публикацию включаются только строки 2, 3 и 6.
Статический строковой фильтр использует предложение WHERE для отбора соответствующих данных для публикации; необходимо указать заключительную часть предложения WHERE. Рассмотрите таблицу Product в примере базы данных AdventureWorks, содержащую столбец ProductLine. Для публикации только строк с данными о продуктах, относящихся к горным велосипедам, укажите ProductLine = 'M'.
Применение статического фильтра строк приводит к выборке одного набора данных для каждой публикации. В предыдущем примере все подписчики получили бы только строки с данными о продуктах, относящихся к горным велосипедам. Если имеется другой подписчик, которому нужны только строки с данными о продуктах, относящихся к дорожным велосипедам,
с помощью репликации моментальных снимков или репликации транзакций можно создать другую публикацию и включить таблицу в обе публикации (в предложении фильтра для статьи в этой публикации укажите
ProductLine = 'R').Примечание.
Фильтры строк в транзакционных публикациях могут создавать значительные накладные расходы, поскольку условие фильтра статьи оценивается для каждой строки журнала, записываемой для опубликованной таблицы, чтобы определить, следует ли реплицировать эту строку. Необходимо избегать фильтров строк в публикациях транзакций, если каждый узел репликации может поддерживать полную загрузку данных, а общий набор данных достаточно невелик.
При репликации слиянием используйте параметризованные фильтры строк вместо создания нескольких публикаций со статическими фильтрами строк. Дополнительные сведения см. в разделе Параметризованные фильтры строк.
Сведения об определении или изменении статического строкового фильтра см. в разделе Define and Modify a Static Row Filter.
Фильтры столбцов
На следующей иллюстрации показана публикация, которая отфильтровывает столбец «C».
Как показано здесь, можно также применять фильтр строк и фильтр столбцов совместно.
После создания публикации можно использовать фильтр столбцов, чтобы удалить столбец из существующей публикации, но сохранить его в таблице у издателя, а также, чтобы включить существующий столбец в публикацию. Для внесения других изменений, например, для добавления нового столбца в таблицу с последующим добавлением этой таблицы в опубликованную статью, используйте репликацию изменения схемы. Дополнительные сведения см. в подразделах "Добавление столбцов" и "Удаление столбцов" раздела Внесение изменений схем в базы данных публикации.
Типы столбцов, перечисленных в следующей таблице, не могут быть отфильтрованы из определенных типов публикаций.
| Тип столбца | Тип публикации и параметры |
|---|---|
| Первичный ключевой столбец | Первичные ключевые столбцы требуются во всех таблицах публикации транзакций. Для таблиц в публикациях слияния первичные ключи не требуются, но если присутствует столбец первичного ключа, к нему нельзя применить фильтр. |
| Внешний ключевой столбец | Все публикации создаются с использованием мастера создания публикаций. Внешние ключевые столбцы могут фильтроваться с помощью хранимых процедур Transact-SQL. Дополнительные сведения см. в разделе Define and Modify a Column Filter. |
| Столбец rowguid | Объединить публикации* |
| Столбец msrepl_tran_version | Публикации моментальных снимков или публикации транзакций, разрешающие использование обновляемых подписок |
| Столбцы, которые не допускают значение NULL и не имеют значений IDENTITY по умолчанию или набора свойств. | Публикации моментальных снимков или публикации транзакций, разрешающие использование обновляемых подписок |
| Столбцы с уникальными ограничениями или индексами | Публикации моментальных снимков или публикации транзакций, разрешающие использование обновляемых подписок |
| Все столбцы в публикации слияния SQL Server 7.0 | В публикациях слияния SQL Server 7.0 столбцы нельзя фильтровать. |
| Метка времени | Публикации моментальных снимков или транзакционные публикации SQL Server 7.0, допускающие обновляемые подписки |
*Если вы публикуете таблицу в публикации слияния, а эта таблица уже содержит столбец типа данных uniqueidentifier с установленным свойством ROWGUIDCOL, репликация может использовать этот столбец вместо создания дополнительного столбца с именем rowguid. В этом случае должен быть опубликован существующий столбец.
Сведения об определении или изменении фильтра столбцов см. в разделе Define and Modify a Column Filter.
Вопросы применения фильтров
При фильтрации данных учитывайте следующие требования:
В публикацию должны быть включены все столбцы, на которые имеются ссылки в фильтрах строк. Иными словами, нельзя использовать фильтр столбцов для исключения столбца, который используется в фильтре строк.
Если добавление или изменение фильтра производится после инициализации подписок, то подписки должны быть инициализированы повторно.
Максимальное количество байтов, допустимое для столбца, используемого в фильтре, составляет 1024 для статьи в публикации слияния и 8000 для статьи в публикации транзакций.
В фильтрах строк или фильтрах соединения не допускаются ссылки на столбцы со следующими типами данных:
varchar(max) и nvarchar(max)
varbinary(max)
text и ntext
Изображение
XML
UDT
Репликация транзакций позволяет реплицировать индексированное представление либо в виде представления, либо в виде таблицы. Если выполняется репликация представления в виде таблицы, отфильтровать столбцы из таблицы не удастся.
Фильтры строк не предназначены для работы в нескольких базах данных. SQL Server намеренно ограничивает возможность выполнения sp_replcmds (в контексте которого выполняются фильтры) только владельцем базы данных (dbo). dbo не имеет межбазовых прав доступа. При добавлении CDC (отслеживания измененных данных) в SQL Server 2008 (10.0.x) логика sp_replcmds заполняет таблицы отслеживания изменений сведениями, которые пользователь может вернуть и запросить. По соображениям безопасности SQL Server ограничивает выполнение этой логики, чтобы вредоносный dbo не смог взломать этот путь выполнения. Например, злоумышленник с правами dbo может создать триггеры на таблицах CDC, которые затем будут выполняться в контексте пользователя, вызывающего sp_replcmds, то есть агента чтения журнала. Если учетная запись, под которой выполняется агент, имеет более высокий уровень привилегий, злоумышленник dbo может их повысить.