Publicar dados e objetos de banco de dados

Aplica-se a:SQL Server Instância Gerenciada de SQL do Azure

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

Objeto de banco de dados Replicação de instantâneo e replicação transacional Replicação por 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
Visualizações X X
Exibições indexadas X X
Exibições indexadas como tabelas X não
Tipos definidos pelo usuário (CLR) X X
Funções definidas pelo usuário (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 de usuário, propriedades estendidas e ordenação) X X

Criação de publicações

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

  • O Distribuidor.
  • A localização padrão dos arquivos de instantâneo.
  • O banco de dados da publicação.
  • O tipo de publicação a ser criada (instantâneo, transacional, transacional com assinaturas atualizáveis ou mesclagem).
  • Os dados e 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, e filtros de linha parametrizados e filtros de junção para publicações de mesclagem.
  • A programação do Agente de Instantâneos.
  • Contas sob as quais os seguintes agentes são operados: o Agente de Instantâneo para todas as publicações; o Agente Leitor de Registro para todas as publicações transacionais; o Agente Leitor de Fila para publicações transacionais que permitem a atualização de assinaturas.
  • Um nome e uma descrição para a publicação.

Para informações sobre como trabalhar com publicações, veja os seguintes artigos:

Observação

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

Tabelas de publicação

O objeto publicado com maior frequência é uma tabela. Os links a seguir fornecem mais informações sobre tabelas de publicação:

Quando você publica uma tabela para replicação, pode especificar quais objetos de esquema devem ser copiados para o Assinante, como integridade referencial declarativa (restrições de chave primária, restrições de chave estrangeira, restrições de unicidade), índices, gatilhos DML do usuário (gatilhos DDL não podem ser replicados), propriedades estendidas e agrupamento. As propriedades estendidas são replicadas apenas na sincronização inicial entre o Editor 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 suporta a publicação de tabelas e índices particionados. O nível de suporte depende do tipo de replicação que você usa e das opções que você especifica para a publicação e os artigos associados às tabelas particionadas. Para obter mais informações, consulte Replicar tabelas e índices particionados.

Publicação de procedimentos armazenados

Todos os tipos de replicação permitem que você replique definições de procedimentos armazenados: a CREATE PROCEDURE instrução é copiada para cada Assinante. No caso de procedimentos armazenados CLR (Common Language Runtime), o assembly associado também é copiado. As alterações a procedimentos são replicadas aos Assinantes; as alterações aos assemblies associados não são.

Além de replicar a definição de um procedimento armazenado, a replicação transacional permite que você replique a execução dos procedimentos armazenados. Esse recurso é útil para replicar os resultados de procedimentos armazenados orientados à manutenção que afetam grandes volumes de dados. Para obter mais informações, consulte Publicando execução de procedimento armazenado em replicação transacional.

Publicação de exibições

Todos os tipos de replicação permitem que você reproduza exibições. Você pode copiar a visualização e seu índice correspondente (se for uma visualização indexada) para o Assinante, mas também deve replicar a tabela base.

Para exibições indexadas, a replicação transacional também permite que você replique 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 “indexed view logbased” do parâmetro @type de sp_addarticle (Transact-SQL). Para obter mais informações sobre como usar sp_addarticle, consulte Definir um artigo.

Publicação de funções definidas pelo usuário

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

Publicação de tipos definidos pelo usuário e tipos de dados com alias

A Replicação trata as colunas que usam tipos definidos pelo usuário ou tipos de dados com alias da mesma forma que outras colunas e as replica nos Assinantes. O processo executa a instrução CREATE TYPE para cada tipo replicado no Assinante antes de criar a tabela. Para tipos definidos pelo usuário, a replicação também copia o assembly associado para cada Assinante. A replicação não replica alterações em tipos definidos pelo usuário e tipos de dados de alias para Assinantes.

Se você define um tipo em um banco de dados, mas não o referenciar em nenhuma coluna ao criar uma publicação, a replicação não copia o tipo para Assinantes. Se posteriormente você criar uma coluna desse tipo no banco de dados e quiser replicá-la, deverá primeiro copiar manualmente o tipo (e o assembly associado, no caso de um tipo definido pelo usuário) para cada Assinante.

Publicando índices de texto completo

A instrução CREATE FULLTEXT INDEX é copiada para cada Assinante e o índice de texto completo é criado para o Assinante. As alterações feitas em índices de texto completos que usam ALTER FULLTEXT INDEX não são replicadas.

Fazendo alterações de esquema em objetos publicados

A replicação oferece suporte para um amplo intervalo de alterações de esquema para objetos publicados. Quando você realiza qualquer uma das seguintes alterações de esquema no objeto publicado correspondente em um Publicador do SQL Server, a replicação, por padrão, propaga essas alterações para todos os Assinantes do SQL Server:

  • ALTER TABLE

  • ALTER VIEW

  • ALTER PROCEDURE

  • ALTER FUNCTION

  • ALTER 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 para a publicação

Tenha em mente as seguintes considerações ao publicar objetos de banco de dados:

  • Os usuários podem acessar o banco de dados durante a criação da publicação e o snapshot inicial, mas é melhor criar publicações durante períodos de menor atividade no Publisher.

  • Você não pode renomear um banco de dados depois de criar uma publicação nele. Para renomear o banco de dados, você deve primeiro remover a replicação do banco de informações.

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

    Observação

    Se você adicionar um artigo a uma publicação de fusão e um artigo existente depender do novo artigo, você deve especificar uma ordem de processamento para ambos os artigos usando o parâmetro @processing_ordersp_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. Ao adicionar a função à publicação: especifique o valor 1 para o parâmetro @processing_order de sp_addmergearticlee especifique o valor 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 a criação da função no Assinante antes da tabela que depende disso. Você pode usar números diferentes para cada artigo desde que o número para a função seja menor do que o número para a tabela.

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

Limitações na publicação de objetos

  • O número máximo de artigos e colunas que você pode publicar varia conforme o tipo de publicação. Para obter mais informações, consulte a seção “Objetos de replicação” de Especificações de capacidade máxima do SQL Server.

  • Você não pode publicar procedimentos armazenados, exibições, gatilhos e funções definidas pelo usuário que são definidos com WITH ENCRYPTION na replicação do SQL Server.

  • Você pode replicar coleções de esquemas XML, mas as mudanças não são replicadas após o snapshot inicial.

  • As tabelas publicadas para replicação transacional devem ter uma chave primária. Se uma tabela está em uma publicação de replicação transacional, você não pode desativar nenhum índice associado às colunas principais primárias. A replicação requer esses índices. Para desativar um índice, você deve primeiro remover a tabela da publicação.

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

  • Você não pode publicar funções que contenham a instrução NOEXPAND sobre exibições indexadas na mesma publicação que as tabelas referenciadas e as exibições indexadas, devido à ordem em que o Agente de Distribuição as entrega. Para solucionar esse problema, coloque a tabela e a criação de exibição indexada em uma primeira publicação e adicione funções contendo a dica NOEXPAND nas exibições indexadas para uma segunda publicação, que você publica após a primeira publicação ser concluída. Ou crie scripts para essas funções e entregue o script usando o parâmetro @post_snapshot_script de sp_addpublication.

Propriedade de esquemas e objetos

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

  • Para artigos em publicações de mesclagem com um nível de compatibilidade 90 ou superior, publicações de instantâneos e publicações transacionais: por padrão, o proprietário do objeto no Assinante é igual ao proprietário do objeto correspondente no Publicador. Caso não existam esquemas proprietários de objetos no Assinante, eles serão criados automaticamente.

  • Para artigos em publicação de mesclagem com um nível de compatibilidade abaixo de 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 snapshots de modo de caractere (que são usados para não assinantes do SQL Server e assinantes do SQL Server Compact): por padrão, o proprietário é deixado em branco. O proprietário assume o padrão do proprietário associado à conta usada pelo Agente de Distribuição ou Agente de Mesclagem para se conectar ao Assinante.

Você pode alterar o proprietário do objeto através 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 as propriedades da publicação, Definir um artigo e Exibir e modificar as propriedades do artigo.

Publicando dados para Assinantes que executam versões anteriores do SQL Server

  • Se você está publicando para um assinante que está usando uma versão anterior do SQL Server, está limitado à funcionalidade dessa versão. Essa limitação se aplica tanto à funcionalidade específica de replicação quanto à funcionalidade geral do produto.

  • Publicações de mescagem usam um nível de compatibilidade, que determina quais recursos você pode usar em uma publicação e permite que você suporte Assinantes que executam versões anteriores do SQL Server.

Publicação de tabelas em mais de uma publicação

A replicação suporta a publicação de artigos em múltiplas publicações, incluindo a republicação de dados, com as seguintes restrições:

  • Se você publicar um artigo tanto em uma publicação transacional quanto em uma publicação de fusão, defina a propriedade @published_in_tran_pub para VERDADEIRO para o artigo de fusão. Para obter mais informações sobre como definir propriedades, consulte Exibir e modificar as propriedades da publicação e Exibir e modificar as propriedades do artigo.

    Defina a propriedade @published_in_tran_pub se um artigo fizer parte de uma assinatura transacional e for incluído em uma publicação de fusão. Por padrão, a replicação transacional espera que as tabelas no Assinante estejam em modo somente leitura. Se a replicação de fusão fizer alterações de dados em uma tabela em uma assinatura transacional, pode ocorrer a não convergência dos dados. Para evitar esse problema, especifique, na publicação de mesclagem, qualquer tabela desse tipo como somente para download. Essa configuração impede que um assinante de merge envie alterações de dados para a tabela. Para obter mais informações, consulte Otimizar o desempenho da replicação de mesclagem com artigos somente para download.

  • Você não pode publicar um artigo tanto em uma publicação de fusão quanto em uma publicação transacional com assinaturas atualizadas em fila.

  • Você não pode republicar artigos incluídos em publicações transacionais que apoiam a atualização de assinaturas.

  • Se você publicar um artigo em mais de uma publicação transacional que suporta assinaturas de atualização em fila, o artigo deve ter o mesmo valor para as seguintes propriedades em todas as publicações:

    Propriedade Parâmetro em sp_addarticle
    Gerenciamento de intervalo de identidade @auto_identity_range (obsoleto) e @identityrangemangementoption
    Intervalo de identidade do Publicador @pub_identity_range
    Intervalo de identidade @identity_range
    Limite de intervalo de identidade @threshold

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

  • Se você publicar um artigo em mais de uma publicação de fusão, o artigo deve ter o mesmo valor para as seguintes propriedades em todas as publicações:

    Propriedade Parâmetro em sp_addmergearticle
    Rastreamento de coluna @column_tracking
    Opções de esquema @schema_option
    Filtragem de colunas @vertical_partition
    Opções de carregamento do assinante @subscriber_upload_options
    Controle de exclusão condicional @delete_tracking
    Compensação de erro @compensate_for_errors
    Gerenciamento de intervalo de identidade @auto_identity_range (obsoleto) e @identityrangemangementoption
    Intervalo de identidade do Publicador @pub_identity_range
    Intervalo de identidade @identity_range
    Limite de intervalo de identidade @threshold
    Opções de partição @partition_options
    Fluxo de coluna de 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 fornecem suporte à publicação de uma tabela em várias publicações e depois à assinatura dentro de uma única tabela no banco de dados de assinatura (frequentemente chamado de cenário de acúmulo). O rollup é usado muitas vezes para agregar subconjuntos de dados de localizações múltiplas em uma única tabela em um Assinante central. Publicações de mesclagem filtradas não oferecem suporte ao cenário de Assinante central. Para replicação de mescagem, o rollup é normalmente implementado por meio de uma única publicação com filtros de linha parametrizados. Para obter mais informações, consulte Filtros de linha com parâmetros.