Filtrar dados publicadosFilter Published Data

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure (somente a Instância Gerenciada) nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Filtrar artigos de tabela lhe permite criar partições de dados a serem publicados.Filtering table articles enables you to create partitions of data to be published. Filtrando dados publicados, você pode:By filtering published data, you can:

  • Minimizar a quantidade de dados enviada pela rede.Minimize the amount of data sent over the network.

  • Reduzir a quantidade de espaço de armazenamento requerida no Assinante.Reduce the amount of storage space required at the Subscriber.

  • Personalizar publicações e aplicativos com base em requisitos de Assinante individuais.Customize publications and applications based on individual Subscriber requirements.

  • Evitar ou reduzir conflitos se o Assinante estiver atualizando dados, porque partições diferentes de dados podem ser enviadas a Assinantes diferentes (dois Assinantes não estarão atualizando os mesmos valores de dados).Avoid or reduce conflicts if Subscribers are updating data, because different data partitions can be sent to different Subscribers (no two Subscribers will be updating the same data values).

  • Evitar transmitir dados confidenciais.Avoid transmitting sensitive data. Podem ser usados filtros de linha e filtros de coluna para restringir um acesso de Assinante aos dados.Row filters and column filters can be used to restrict a Subscriber's access to data. Para a replicação de mesclagem, haverá considerações de segurança se você usar um filtro com parâmetros que inclua HOST_NAME().For merge replication, there are security considerations if you use a parameterized filter that includes HOST_NAME(). Para obter mais informações, consulte a seção "Filtrando com HOST_NAME()" em Parameterized Row Filters.For more information, see the section "Filtering with HOST_NAME()" in Parameterized Row Filters.

A replicação oferece quatro tipos de filtros:Replication offers four types of filters:

  • Filtros de linha estáticos, que estão disponíveis com todos os tipos de replicação.Static row filters, which are available with all types of replication.

    Ao usar filtros de linha estáticos é possível escolher um subconjunto de linhas a ser publicado.Using static row filters, you can choose a subset of rows to be published. Todos os Assinantes para uma publicação filtrada recebem o mesmo subconjunto de linhas para a tabela filtrada.All Subscribers to a filtered publication receive the same subset of rows for the filtered table. Para obter mais informações, consulte a seção “Filtros de linha estatísticos”, neste tópico.For more information, see the section "Static Row Filters" in this topic.

  • Filtros de coluna, que estão disponíveis com todos os tipos de replicação.Column filters, which are available with all types of replication.

    Ao usar filtros de coluna é possível escolher um subconjunto de colunas a ser publicado.Using column filters, you can choose a subset of columns to be published. Para obter mais informações, consulte a seção “Filtros de coluna”, neste tópico.For more information, see the section "Column Filters" in this topic.

  • Filtros de linha com parâmetros, que estão disponíveis apenas com replicação de mesclagem.Parameterized row filters, which are available only with merge replication.

    Ao usar filtros com parâmetros é possível escolher um subconjunto de linhas a ser publicado.Using parameterized row filters, you can choose a subset of rows to be published. Ao contrário de filtros estáticos que enviam o mesmo subconjunto de linhas para cada Assinante, filtros de linhas com parâmetros usam um valor de dados fornecido pelo Assinante para que se envie aos Assinantes diferentes subconjuntos de linhas.Unlike static filters that send the same subset of rows to every Subscriber, parameterized row filters use a data value supplied by the Subscriber to send Subscribers different subsets of rows. Para obter mais informações, consulte Filtros de linha com parâmetros.For more information, see Parameterized Row Filters.

  • Filtros de junção, que estão disponíveis apenas com replicação de mesclagem.Join filters, which are available only with merge replication.

    Ao usar filtros de junção é possível estender um filtro de linha de uma tabela publicada para outra.Using join filters, you can extend a row filter from one published table to another. Para obter mais informações, consulte Join Filters.For more information, see Join Filters.

filtros de linha estáticosStatic Row Filters

A ilustração a seguir mostra uma tabela publicada que é filtrada de forma que apenas as linhas 2, 3 e 6 são incluídas na publicação.The following illustration shows a published table that is filtered so that only rows 2, 3, and 6 are included in the publication.

Filtragem de linhaRow filtering

Um filtro de linha estático usa a cláusula WHERE para selecionar os dados apropriados a serem publicados; você especifica a parte final da cláusula WHERE.A static row filter uses a WHERE clause to select the appropriate data to be published; you specify the final part of the WHERE clause. Considere a tabela Product no banco de dados de exemplo Adventure Works, que contém a coluna ProductLine.Consider the Product Table in the Adventure Works sample database, which contains the column ProductLine. Para publicar somente as linhas com dados em produtos relacionados a mountain bikes, especifique ProductLine = 'M'.To publish only the rows with data on products related to mountain bikes, specify ProductLine = 'M'.

Um filtro de linha estático resulta em um único conjunto de dados para cada publicação.A static row filter results in a single set of data for each publication. No exemplo anterior, todos os Assinantes receberiam somente as linhas com dados em produtos relacionados a mountain bikes.In the previous example, all Subscribers would receive only the rows with data on products related to mountain bikes. Se você tiver outro Assinante que exija somente as linhas com dados sobre produtos relacionados a bicicletas de estrada:If you have another Subscriber that requires only the rows with data on products related to road bikes:

  • Com replicação de instantâneo ou transacional, é possível criar outra publicação e incluir a tabela em ambas as publicações (na cláusula de filtro para o artigo naquela publicação, especifique ProductLine = 'R').With snapshot or transactional replication, you can create another publication and include the table in both publications (in the filter clause for the article in that publication, specify ProductLine = 'R').

    Observação

    Filtros de linha em publicações transacionais podem adicionar uma sobrecarga significativa por que a cláusula de filtragem de artigo é avaliada para cada linha de log gravada para uma tabela publicada a fim de determinar se a linha deve ser replicada.Row filters in transactional publications can add significant overhead because the article filter clause is evaluated for each log row written for a published table, to determine whether the row should be replicated. Filtros de linha em publicações transacionais devem ser evitados se cada nó de replicação puder dar suporte a toda a carga de dados, e o conjunto completo de dados for relativamente pequeno.Row filters in transactional publications should be avoided if each replication node can support the full data load, and the overall data set is reasonably small.

  • Com replicação de mesclagem, use filtros de linha com parâmetro em vez de criar várias publicações com filtros de linha estáticos.With merge replication, use parameterized row filters rather than creating multiple publications with static row filters. Para obter mais informações, consulte Parameterized Row Filters.For more information, see Parameterized Row Filters.

Para definir ou modificar um filtro de linha estático, consulte Define and Modify a Static Row Filter.To define or modify a static row filter, see Define and Modify a Static Row Filter.

Filtros de colunaColumn Filters

A ilustração a seguir mostra uma publicação que filtra a coluna C.The following illustration shows a publication that filters out column C.

Filtragem de colunaColumn filtering

É possível também usar filtragem de linha e coluna juntas, conforme aqui ilustrado.You can also use row and column filtering together, as illustrated here.

Filtragem de linha e colunaRow and column filtering

Após a criação de uma publicação é possível usar a filtragem de coluna para cancelar uma coluna de uma publicação existente, mas retendo a coluna na tabela no Publicador, e também incluir uma coluna existente na publicação.After a publication is created, you can use column filtering to drop a column from an existing publication, but retain the column in the table at the Publisher, and also to include an existing column in the publication. Para outras alterações, como a adição de uma nova coluna a uma tabela e, então, a adição dela ao artigo publicado, use replicação de alteração de esquema.For other changes, such as adding a new column to a table and then adding it to the published article, use schema change replication. Para mais informações, consulte as seções "Adicionando colunas" e "Removendo colunas" no tópico Fazer alterações em esquemas nos bancos de dados de publicação.For more information, see the "Adding Columns" and "Dropping Columns" sections in the topic Make Schema Changes on Publication Databases.

Os tipos de colunas listados na tabela a seguir não podem ser filtrados em determinados tipos de publicações.The types of columns listed in the following table cannot be filtered out of certain types of publications.

Tipo de colunaColumn type Tipo de publicação e opçõesType of publication and options
Coluna de chave primáriaPrimary key column Colunas de chave primária são exigidas para todas as tabelas em publicações transacionais.Primary key columns are required for all tables in transactional publications. Chaves primárias não são exigidas para tabelas em publicações de mesclagem, mas se uma coluna de chave primária estiver presente, ela não pode ser filtrada.Primary keys are not required for tables in merge publications, but if a primary key column is present, it cannot be filtered.
Coluna de chave estrangeiraForeign key column Todas as publicações criadas usando-se o assistente para Nova Publicação.All publications created using the New Publication wizard. Você pode filtrar colunas de chave estrangeira usando procedimentos armazenados da Transact-SQL.You can filter foreign key columns using Transact-SQL stored procedures. Para obter mais informações, Define and Modify a Column Filter.For more information, Define and Modify a Column Filter.
A coluna rowguidThe rowguid column Publicações de mesclagem*Merge publications*
A coluna msrepl_tran_versionThe msrepl_tran_version column Publicações de instantâneo ou transacionais que permitem assinaturas atualizáveisSnapshot or transactional publications that allow updatable subscriptions
Colunas que não permitem NULL e não têm valores padrão ou a propriedade IDENTITY definida.Columns that do not allow NULL and do not have default values or the IDENTITY property set. Publicações de instantâneo ou transacionais que permitem assinaturas atualizáveisSnapshot or transactional publications that allow updatable subscriptions
Colunas com restrições ou índices exclusivosColumns with unique constraints or indexes Publicações de instantâneo ou transacionais que permitem assinaturas atualizáveisSnapshot or transactional publications that allow updatable subscriptions
Todas as colunas em uma publicação de mesclagem SQL Server 7.0All columns in a SQL Server 7.0 merge publication Colunas não podem ser filtradas em publicações de mesclagem SQL Server 7.0.Columns cannot be filtered in SQL Server 7.0 merge publications.
TimestampTimestamp Publicações de instantâneo ou transacionais SQL Server 7.0 que permitem assinaturas atualizáveisSQL Server 7.0 snapshot or transactional publications that allow updatable subscriptions

*Se você está publicando uma tabela em uma publicação de mesclagem e a tabela já contém uma coluna do tipo de dados uniqueidentifier com a propriedade ROWGUIDCOL definida, a replicação pode usar essa coluna em vez de criar uma coluna adicional chamada rowguid.*If you are publishing a table in a merge publication and that table already contains a column of data type uniqueidentifier with the ROWGUIDCOL property set, replication can use this column instead of creating an additional column named rowguid. Nesse caso, a coluna existente deve ser publicada.In this case, the existing column must be published.

Para definir ou modificar um filtro de coluna, consulte Define and Modify a Column Filter.To define or modify a column filter, see Define and Modify a Column Filter.

Filtrando consideraçõesFiltering Considerations

Lembre-se das seguintes considerações ao filtrar dados:Keep the following considerations in mind when filtering data:

  • Todas as colunas referenciadas em filtros de linha devem ser incluídas na publicação.All columns referenced in row filters must be included in the publication. Em outras palavras, não se pode usar um filtro de coluna para excluir uma coluna usada em um filtro de linha.In other words, you cannot use a column filter to exclude a column that is used in a row filter.

  • Se um filtro for adicionado ou alterado depois de inicializadas as assinaturas, as assinaturas devem ser reinicializadas.If a filter is added or changed after subscriptions have been initialized, the subscriptions must be reinitialized.

  • O número máximo de bytes permitidos para uma coluna usada em um filtro é 1024 para um artigo em uma publicação de mesclagem e 8000 para um artigo em uma publicação transacional.The maximum number of bytes allowed for a column used in a filter is 1024 for an article in a merge publication and 8000 for an article in a transactional publication.

  • Colunas com os seguintes tipos de dados não podem ser referenciadas em filtros de linha ou filtros de junção:Columns with the following data types cannot be referenced in row filters or join filters:

    • varchar(max) e nvarchar(max)varchar(max) and nvarchar(max)

    • varbinary(max)varbinary(max)

    • text e ntexttext and ntext

    • imagemimage

    • XMLXML

    • UDTUDT

  • Replicação transacional lhe permite reproduzir uma exibição indexada como uma exibição ou como uma tabela.Transactional replication allows you to replicate an indexed view as a view or as a table. Se você reproduzir a exibição como uma tabela, você não poderá filtrar colunas da tabela.If you replicate the view as a table, you cannot filter columns from the table.

Os filtros de linha não são criados para funcionar nos bancos de dados.Row filters are not designed to work across databases. SQL ServerSQL Server restringe intencionalmente a execução de sp_replcmds (quais filtros serão executados em) ao proprietário do banco de dados (dbo).intentionally restricts the execution of sp_replcmds (which filters execute under) to the database owner (dbo). O dbo não tem privilégios de banco de dados.The dbo does not have cross database privileges. Com a adição de CDC (Change Data Capture) em SQL Server 2008SQL Server 2008 the sp_replcmds preenche as tabelas de controle de alterações com informações que o usuário pode retornar e consultar.With the addition of CDC (Change Data Capture) in SQL Server 2008SQL Server 2008 the sp_replcmds logic populates the change tracking tables with information that the user can return to and query. Por motivos de segurança, o SQL ServerSQL Server restringe a execução dessa lógica de modo que um dbo mal-intencionado não possa sequestrar esse caminho de execução.For security reasons, SQL ServerSQL Server restricts the execution of this logic so that a malicious dbo can’t highjack this execution path. Por exemplo, um dbo mal-intencionado pode adicionar gatilhos a tabelas CDC que seriam executadas no contexto do usuário que chama sp_replcmds, nesse caso, o Log Reader Agent.For example, a malicious dbo could add triggers on CDC tables which would then get executed under the context of the user calling sp_replcmds, in this case the logreader agent. Se a conta que o agente está executando tiver um privilégio mais alto, o dbo mal-intencionado poderá escalonar os privilégios dele.If the account the agent is running under has higher privilege the malicious dbo could escalate his privileges.

Consulte TambémSee Also

Publicar dados e objetos de banco de dadosPublish Data and Database Objects