Partilhar via


Publicar dados e objetos de banco de dados

Ao criar uma publicação, você escolhe as tabelas e outros objetos de banco de dados que deseja publicar. Você pode publicar os seguintes objetos de banco de dados usando a replicação.

Objeto do banco de dados Replicação de instantâneo e replicação transacional Replicação de mesclagem
Tabelas X X
Tabelas particionadas X X
Procedimentos armazenados – Definição (Transact-SQL e CLR) X X
Procedimentos armazenados – Execução (Transact-SQL e CLR) X Não
Visões X X
Visões indexadas X X
Exibições indexadas como tabelas X Não
Tipos de User-Defined (CLR) X X
User-Defined Functions (Transact-SQL e CLR) X X
Tipos de dados de alias X X
Índices de texto completo X X
Objetos de esquema (restrições, índices, gatilhos DML do usuário, propriedades estendidas e ordenação) X X

Criando publicações

Para criar uma publicação, forneça as seguintes informações:

  • O Distribuidor.

  • O local dos arquivos de instantâneo.

  • O banco de dados de publicação.

  • O tipo de publicação a ser criada (instantâneo, transacional, transacional com assinaturas atualizáveis ou mesclagem).

  • Os dados e os objetos de banco de dados (artigos) a serem incluídos na publicação.

  • Filtros de linha estáticos e filtros de coluna para todos os tipos de publicações, filtros de linha parametrizados e filtros de junção para publicações de mesclagem.

  • A agenda do Agente de Instantâneo.

  • Contas nas quais os seguintes agentes serão executados: o Snapshot Agent para todas as publicações; o Agente de Leitor de Log para todas as publicações transacionais; o Queue Reader Agent para publicações transacionais que permitem a atualização de assinaturas.

  • Um nome e uma descrição para a publicação.

Para obter informações sobre como trabalhar com publicações, consulte os seguintes tópicos:

Observação

Excluir um artigo ou publicação não remove objetos do Assinante.

Publicando tabelas

O objeto mais comumente publicado é uma tabela. Os links a seguir fornecem informações adicionais sobre áreas relacionadas às tabelas de publicação:

Ao publicar uma tabela para replicação, você pode especificar quais objetos de esquema devem ser copiados para o Assinante, como integridade referencial declarada (restrições de chave primária, restrições de referência, restrições exclusivas), índices, gatilhos DML do usuário (gatilhos DDL não podem ser replicados), propriedades estendidas e ordenação. As propriedades estendidas são replicadas apenas na sincronização inicial entre o Publicador e o Assinante. Se você adicionar ou modificar uma propriedade estendida após a sincronização inicial, a alteração não será replicada.

Para especificar opções de esquema, consulte Especificar Opções de Esquema ou SchemaOption.

Tabelas e índices particionados

A replicação dá suporte à publicação de tabelas e índices particionados. O nível de suporte depende do tipo de replicação usado e das opções especificadas para a publicação e os artigos associados a tabelas particionadas. Para obter mais informações, consulte Replicar tabelas e índices particionados.

Publicando procedimentos armazenados

Todos os tipos de replicação permitem replicar definições de procedimentos armazenados: o CREATE PROCEDURE é copiado para cada destinatário. No caso de procedimentos armazenados CLR (Common Language Runtime), o assembly associado também é copiado. As alterações nos procedimentos são replicadas para os Assinantes; já as alterações nos conjuntos associados não são.

Além de replicar a definição de um procedimento armazenado, a replicação transacional permite replicar a execução de procedimentos armazenados. Isso é útil para replicar os resultados de procedimentos armazenados orientados à manutenção que afetam grandes quantidades de dados. Para obter mais informações, consulte Publicar a execução de procedimento armazenado na replicação transacional.

Visualizações de Publicação

Todos os tipos de replicação permitem replicar exibições. A exibição (e seu índice de acompanhamento, se for uma exibição indexada) pode ser copiada para o Assinante, mas a tabela base também deve ser replicada.

Para exibições indexadas, a replicação transacional também permite replicar a exibição indexada como uma tabela em vez de uma exibição, eliminando a necessidade de replicar também a tabela base. Para fazer isso, especifique uma das opções "exibição indexada logbased" para o parâmetro @type de sp_addarticle (Transact-SQL). Para obter mais informações sobre como usar sp_addarticle, consulte Definir um artigo.

Publicando funções de User-Defined

As instruções CREATE FUNCTION para funções CLR e funções Transact-SQL são copiadas para cada subscritor. No caso de funções CLR, o assembly associado também é copiado. As alterações nas funções são replicadas para assinantes; as alterações nos assemblies associados não são.

Publicando Tipos User-Defined e Tipos de Dados Alias

Colunas que usam tipos definidos pelo usuário ou tipos de dados de apelido são replicadas para os assinantes assim como as outras colunas. A instrução CREATE TYPE para cada tipo replicado é executada no Assinante antes da criação da tabela. No caso de tipos definidos pelo usuário, o assembly associado também é copiado para cada Assinante. Alterações em tipos definidos pelo usuário e tipos de dados de apelido não são replicadas para assinantes.

Se um tipo for definido em um banco de dados, mas não for referenciado em nenhuma coluna quando uma publicação for criada, o tipo não será copiado para Assinantes. Se você posteriormente criar uma coluna desse tipo no banco de dados e quiser replicá-la, deverá primeiro copiar manualmente o tipo (e o assembly associado para um tipo definido pelo usuário) para cada assinante.

Publicando índices de texto completo

A instrução CREATE FULLTEXT INDEX é copiada para cada subscritor, e o índice de texto completo é criado no subscritor. As alterações feitas em índices de texto completo usando ALTER FULLTEXT INDEX não são replicadas.

Fazendo alterações de esquema em objetos publicados

A replicação dá suporte a uma ampla gama de alterações de esquema em objetos publicados. Quando você faz qualquer uma das seguintes alterações de esquema no objeto publicado apropriado em um Publicador do SQL Server, essa alteração é propagada por padrão para todos os Assinantes do SQL Server:

  • ALTER TABLE

  • ALTER VIEW

  • ALTER PROCEDURE

  • ALTER FUNCTION

  • ALTERAR TRIGGER

Para obter mais informações, consulte Make Schema Changes on Publication Databases (Fazer alterações de esquema em bancos de dados de publicação).

Considerações sobre publicação

Tenha os seguintes problemas em mente ao publicar objetos de banco de dados:

  • O banco de dados é acessível aos usuários durante a criação da publicação e do instantâneo inicial, mas é aconselhável criar publicações durante tempos de atividade inferior no Publicador.

  • Um banco de dados não pode ser renomeado depois que uma publicação é criada nele. Para renomeá-lo, primeiro você deve remover a replicação do banco de dados.

  • Se você estiver publicando um objeto de banco de dados que depende de um ou mais outros objetos de banco de dados, será necessário publicar todos os objetos referenciados. Por exemplo, se você publicar uma exibição que depende de uma tabela, também deverá publicar a tabela.

    Observação

    Se você adicionar um artigo a uma publicação de mesclagem e um artigo existente depender do novo artigo, deverá especificar uma ordem de processamento para ambos os artigos usando o parâmetro @processing_order de sp_addmergearticle e sp_changemergearticle. Considere o seguinte cenário: você publica uma tabela, mas não publica uma função que a tabela referencia. Se você não publicar a função, a tabela não poderá ser criada no Assinante. Quando você adiciona a função à publicação: especifique um valor de 1 para o parâmetro @processing_order de sp_addmergearticle; e especifique um valor de 2 para o parâmetro @processing_order de sp_changemergearticle, especificando o nome da tabela para o parâmetro @article. Essa ordem de processamento garante que você crie a função no assinante antes de criar a tabela que depende dela. Você pode usar números diferentes para cada artigo, desde que o número da função seja menor que o número da tabela.

  • Os nomes de publicação não podem incluir os seguintes caracteres: % * [ ] | : " ? \ / <>.

Limitações na publicação de objetos

  • O número máximo de artigos e colunas que podem ser publicados difere por tipo de publicação. Para obter mais informações, consulte a seção "Objetos de Replicação" das Especificações máximas de capacidade do SQL Server.

  • Procedimentos armazenados, exibições, gatilhos e funções definidas pelo usuário que são definidas como WITH ENCRYPTION não podem ser publicados como parte da replicação do SQL Server.

  • Coleções de esquema XML podem ser replicadas, mas as alterações não são replicadas após o instantâneo inicial.

  • As tabelas publicadas para replicação transacional devem ter uma chave primária. Se uma tabela estiver em uma publicação de replicação transacional, você não poderá desabilitar nenhum índice associado a colunas de chave primária. Esses índices são exigidos pela replicação. Para desabilitar um índice, primeiro você deve remover a tabela da publicação.

  • Os padrões associados criados com sp_bindefault (Transact-SQL) não são replicados (os padrões associados são preteridos em favor dos padrões criados com a palavra-chave DEFAULT de ALTER TABLE ou CREATE TABLE).

  • Funções que contêm a indicação NOEXPAND em visões indexadas não podem ser publicadas na mesma publicação que contém as tabelas referenciadas e visões indexadas, devido à ordem de entrega pelo agente de distribuição. Para contornar esse problema, coloque a criação da tabela e da exibição indexada em uma primeira publicação e adicione funções que contêm a dica NOEXPAND sobre as exibições indexadas a uma segunda publicação que deve ser publicada após a conclusão da primeira publicação. Ou crie scripts para essas funções e entregue o script usando o parâmetro @post_snapshot_script de sp_addpublication.

Esquemas e propriedade do objeto

A replicação tem o seguinte comportamento padrão no Assistente para Nova Publicação em relação aos esquemas e à propriedade do objeto:

  • Para artigos em publicações de mesclagem com um nível de compatibilidade igual a 90 ou superior, publicações de instantâneo e publicações transacionais: por padrão, o proprietário do objeto no Assinante é o mesmo que o proprietário do objeto correspondente no Publicador. Se os esquemas proprietários de objetos não existirem no banco de dados do Assinante, eles serão criados automaticamente.

  • Para artigos em publicações de mesclagem com um nível de compatibilidade inferior a 90: por padrão, o proprietário é deixado em branco e é especificado como dbo durante a criação do objeto no Assinante.

  • Para artigos em publicações oracle: por padrão, o proprietário é especificado como dbo.

  • Para artigos em publicações que usam instantâneos do modo de caractere (que são usados para Assinantes não SQL Server e Assinantes Compactos do SQL Server): por padrão, o proprietário fica em branco. O proprietário usa como padrão o proprietário associado à conta usada pelo Agente de Distribuição ou agente de mesclagem para se conectar ao Assinante.

O proprietário do objeto pode ser alterado por meio da caixa de diálogo Propriedades do Artigo – <Artigo> e pelos seguintes procedimentos armazenados: sp_addarticle, sp_addmergearticle, sp_changearticle e sp_changemergearticle. Para obter mais informações, consulte Exibir e modificar propriedades de publicação, definir um artigo e exibir e modificar propriedades do artigo.

Publicando dados para assinantes executando versões anteriores do SQL Server

  • Se você estiver publicando em um Assinante executando uma versão anterior do SQL Server, estará limitado à funcionalidade dessa versão, tanto em termos de funcionalidade específica de replicação quanto da funcionalidade do produto como um todo.

  • As publicações de mesclagem usam um nível de compatibilidade, que determina quais recursos podem ser usados em uma publicação e permite que você dê suporte a Assinantes que executam versões anteriores do SQL Server.

Publicando tabelas em mais de uma publicação

A replicação dá suporte à publicação de artigos em várias publicações (incluindo a republicação de dados) com as seguintes restrições:

  • Se um artigo for publicado em uma publicação transacional e em uma publicação de mesclagem, verifique se a propriedade @published_in_tran_pub está definida como TRUE para o artigo de mesclagem. Para obter mais informações sobre como definir propriedades, consulte Exibir e modificar propriedades de publicação e exibir e modificar propriedades do artigo.

    Você também deve definir a propriedade @published_in_tran_pub se um artigo fizer parte de uma assinatura transacional e estiver incluído em uma publicação de mesclagem. Nesse caso, lembre-se de que, por padrão, a replicação transacional espera que as tabelas no Assinante sejam tratadas como somente leitura; se a replicação por mesclagem fizer alterações de dados em uma tabela em uma assinatura transacional, pode ocorrer uma não convergência de dados. Para evitar essa possibilidade, recomendamos que qualquer tabela desse tipo seja especificada como apenas para download em uma publicação de mesclagem. Isso impede que um Assinante de mesclagem carregue alterações de dados na tabela. Para obter mais informações, consulte Otimizar o desempenho da replicação de mesclagem com artigos somente para download.

  • Não é possível publicar um artigo em uma publicação de mesclagem e em uma publicação transacional com assinaturas de atualização na fila.

  • Artigos incluídos em publicações transacionais que dão suporte à atualização de assinaturas não podem ser republicados.

  • Se um artigo for publicado em mais de uma publicação transacional que dê suporte a assinaturas de atualização na fila, as seguintes propriedades deverão ter o mesmo valor para o artigo em todas as publicações:

    Propriedade Parâmetro no sp_addarticle
    Gerenciamento de intervalo de identidades @auto_identity_range (preterido) e @identityrangemangementoption
    Intervalo de identidade do publicador @pub_identity_range
    Intervalo de identidades @identity_range
    Limiar de intervalo de identidade @threshold

    Para obter mais informações sobre esses parâmetros, consulte sp_addarticle (Transact-SQL).

  • Se um artigo for publicado em mais de uma publicação de mesclagem, as seguintes propriedades deverão ter o mesmo valor para o artigo em todas as publicações:

    Propriedade Parâmetro no sp_addmergearticle
    Acompanhamento de colunas @column_tracking
    Opções de esquema @schema_option
    Filtragem de coluna @vertical_partition
    Opções de upload do assinante @subscriber_upload_options
    Acompanhamento de exclusão condicional @delete_tracking
    Compensação por erro @compensate_for_errors
    Gerenciamento de intervalo de identidades @auto_identity_range (obsoleto) e @identityrangemanagementoption
    Faixa de identidades do publicador @pub_identity_range
    Faixa de identidades @identity_range
    Limite de intervalo de identidade @threshold
    Opções de partição @partition_options
    Transmissão de dados de coluna blob @stream_blob_columns
    Tipo de filtro @filter_type (parâmetro em sp_addmergefilter)

    Para obter mais informações sobre esses parâmetros, consulte sp_addmergearticle (Transact-SQL) e sp_addmergefilter (Transact-SQL).

  • A replicação transacional e a replicação de mesclagem não filtrada dão suporte à publicação de uma tabela em várias publicações e, em seguida, à assinatura em uma única tabela no banco de dados de assinatura (geralmente conhecido como um cenário de roll up). O roll up geralmente é usado para agregar subconjuntos de dados de vários locais em uma tabela em um Assinante central. Publicações de mesclagem filtradas não dão suporte ao cenário de assinante central. Para replicação de mesclagem, o roll up normalmente é implementado por meio de uma única publicação com filtros de linha parametrizados. Para obter mais informações, consulte Filtros de linha parametrizados.

Consulte Também

Adicionar artigos e remover artigos de publicações existentes
Configurar Distribuição
Inicializar uma Assinatura
Replicação de script
Proteger o Publicador
Assinar publicações