Filtrando dados publicados
Filtrar artigos de tabela lhe permite criar partições de dados a serem publicados. Filtrando dados publicados, você pode:
Minimizar a quantidade de dados enviada pela rede.
Reduzir a quantidade de espaço de armazenamento exigida no Assinante.
Personalizar publicações e aplicativos com base em requisitos de Assinante individuais.
Evitar ou reduzir conflitos se os Assinantes estiverem 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).
Evitar transmitir dados confidenciais. Podem ser usados filtros de linha e filtros de coluna para restringir o acesso de um Assinante a dados. Para replicação de mesclagem, haverá considerações de segurança se você usar um filtro com parâmetros que inclua HOST_NAME(). Para obter mais informações, consulte a seção "Filtrando com HOST_NAME()" em Filtro de linha com parâmetros.
A replicação oferece quatro tipos de filtros:
Filtros de linha estáticos, que estão disponíveis com todos os tipos de replicação.
Ao usar filtros de linha estáticos é possível escolher um subconjunto de linhas a ser publicado. Todos os Assinantes para uma publicação filtrada recebem o mesmo subconjunto de linhas para a tabela filtrada. Para obter mais informações, consulte a seção “Filtros de linha estatísticos”, neste tópico.
Filtros de coluna, que estão disponíveis com todos os tipos de replicação.
Ao usar filtros de coluna é possível escolher um subconjunto de colunas a ser publicado. Para obter mais informações, consulte a seção “Filtros de coluna”, neste tópico.
Filtros de linha com parâmetros, que estão disponíveis apenas com replicação de mesclagem.
Ao usar filtros com parâmetros é possível escolher um subconjunto de linhas a ser publicado. 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. Para obter mais informações, consulte Filtro de linha com parâmetros.
Filtros de junção, que estão disponíveis apenas com replicação de mesclagem.
Ao usar filtros de junção é possível estender um filtro de linha de uma tabela publicada para outra. Para obter mais informações, consulte Filtros de junção.
Filtros de linha estáticos
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.
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. Considere o Tabela Product (AdventureWorks) no banco de dados de exemplo do Adventure Works, que contém a coluna ProductLine. Para publicar somente as linhas com dados em produtos relacionados a mountain bikes, especifique ProductLine = 'M'.
Um filtro de linha estático resulta em um único conjunto de dados para cada publicação. No exemplo anterior, todos os Assinantes receberiam somente as linhas com dados em produtos relacionados a mountain bikes. Se você tiver outro Assinante que exija somente as linhas com dados sobre produtos relacionados a bicicletas de estrada:
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').
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. 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.
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. Para obter mais informações, consulte Filtro de linha com parâmetros.
Para definir ou modificar um filtro de linha estático
SQL Server Management Studio: Como definir e modificar um filtro de linhas estático (SQL Server Management Studio)
Programação Transact-SQL de replicação: Como definir e modificar um filtro de linhas estático (Programação Transact-SQL de replicação)
Programação RMO (Replication Management Objects): Como definir um Artigo (programação RMO)
Filtros de coluna
A ilustração a seguir mostra uma publicação que filtra a coluna C.
É possível também usar filtragem de linha e coluna juntas, conforme aqui ilustrado.
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. 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. Para obter mais informações, consulte as seções "Adicionando Colunas" e "Cancelando Colunas" no tópico Fazendo alterações de esquema em bancos de dados de publicação.
Os tipos de colunas listados na tabela a seguir não podem ser filtrados em determinados tipos de publicações.
Tipo de coluna |
Tipo de publicação e opções |
---|---|
Coluna de chave primária |
Colunas de chave primária são exigidas para todas as tabelas em publicações transacionais. 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. |
Coluna de chave estrangeira |
Todas as publicações criadas usando-se o assistente para Nova Publicação. Você pode filtrar colunas de chave estrangeira usando procedimentos armazenados da Transact-SQL. Para obter mais informações, Como definir e modificar um filtro de coluna (Programação Transact-SQL de replicação). |
A coluna rowguid |
Publicações de mesclagem1 |
A coluna msrepl_tran_version |
Publicações de instantâneo ou transacionais que permitem assinaturas atualizáveis. |
Colunas que não permitem NULL e não têm valores padrão ou a propriedade IDENTITY definida. |
Publicações de instantâneo ou transacionais que permitem assinaturas atualizáveis |
Colunas com restrições ou índices exclusivos |
Publicações de instantâneo ou transacionais que permitem assinaturas atualizáveis |
Todas as colunas em uma publicação de mesclagem SQL Server 7.0 |
Colunas não podem ser filtradas em publicações de mesclagem SQL Server 7.0. |
Timestamp |
Publicações de instantâneo ou transacionais SQL Server 7.0 que permitem assinaturas atualizáveis |
1 Se você está publicando uma tabela em uma publicação de mesclagem e aquela 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. Nesse caso, a coluna existente deve ser publicada.
Para definir ou modificar um filtro de coluna
SQL Server Management Studio: Como definir e modificar um filtro de coluna (SQL Server Management Studio)
Programação Transact-SQL de replicação: Como definir e modificar um filtro de coluna (Programação Transact-SQL de replicação)
Programação RMO (Replication Management Objects): Como definir um Artigo (programação RMO)
Filtrando considerações
Lembre-se das seguintes considerações ao filtrar dados:
Todas as colunas referenciadas em filtros de linha devem ser incluídas na publicação. Em outras palavras, não se pode usar um filtro de coluna para excluir uma coluna usada em um filtro de linha.
Se um filtro for adicionado ou alterado depois de inicializadas as assinaturas, as assinaturas devem ser reinicializadas.
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.
Colunas com os seguintes tipos de dados não podem ser referenciadas em filtros de linha ou filtros de junção:
varchar(max) and nvarchar(max)
varbinary(max)
text and ntext
image
XML
UDT
Replicação de transação lhe permite reproduzir uma exibição indexada como uma exibição ou como uma tabela. Se você reproduzir a exibição como uma tabela, você não poderá filtrar colunas da tabela.