Publicar dados e objetos da base de dados

Aplica-se a: SQL ServerAzure SQL Managed Instance

Ao criar uma publicação, escolhe as tabelas e outros objetos da base de dados que pretende publicar. Pode publicar os seguintes objetos de base de dados usando replicação.

Objeto de base de dados Replicação de instantâneos e replicação transacional Replicação por Fusão
Tables 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 no
Views X X
Vistas Indexadas X X
Vistas Indexadas como Tabelas X no
Tipos Definidos pelo Utilizador (CLR) X X
Funções Definidas pelo Utilizador (Transact-SQL e CLR) X X
Tipos de Dados Alias X X
Índices de texto completo X X
Objetos do esquema (restrições, índices, triggers DML do utilizador, propriedades estendidas e colação) X X

Criação de publicações

Para criar uma publicação, forneça a seguinte informação:

  • O distribuidor.
  • A localização dos ficheiros de instantâneo.
  • A base de dados de publicações.
  • O tipo de publicação a criar (instantânea, transacional, transacional com subscrições atualizáveis, ou fusão).
  • Os dados e objetos da base de dados (artigos) devem ser incluídos na publicação.
  • Filtros de linhas estáticos e filtros de coluna para todos os tipos de publicações, e filtros de linhas parametrizados e filtros de junção para publicações de fusão.
  • O agendamento do Snapshot Agent.
  • Contas sob as quais são executados os seguintes agentes: o Snapshot Agent para todas as publicações; o Log Reader Agent para todas as publicações transacionais; o Queue Reader Agent para publicações transacionais que permitem subscrições atualizáveis.
  • Um nome e uma descrição para a publicação.

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

Note

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

Tabelas de publicação

O objeto mais frequentemente publicado é uma tabela. Os seguintes links fornecem mais informações sobre tabelas de publicação:

Ao publicar uma tabela para replicação, pode especificar quais os objetos de esquema a copiar para o Subscritor, como a integridade referencial declarativa (restrições de chave primária, restrições de chave estrangeira, restrições únicas), índices, gatilhos DML do utilizador (os gatilhos DDL não podem ser replicados), propriedades estendidas e intercalação. As propriedades estendidas são replicadas somente 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 suporta a publicação de tabelas e índices particionados. O nível de suporte depende do tipo de replicação que utiliza e das opções que especifica para a publicação e os artigos associados a tabelas particionadas. Para mais informações, consulte Replicar Tabelas e Índices Particionados.

Publicação de procedimentos armazenados

Todos os tipos de replicação permitem a replicação de definições de procedimentos armazenados: a instrução CREATE PROCEDURE é copiada para cada Subscritor. No caso dos procedimentos armazenados CLR (Common Language Runtime), a assemblagem associada também é copiada. As alterações aos procedimentos são replicadas para os subscritores; as alterações às assemblagens associadas não são.

Para além de replicar a definição de um procedimento armazenado, a replicação transacional permite replicar a execução de procedimentos armazenados. Esta funcionalidade é útil para replicar os resultados de procedimentos armazenados orientados para manutenção que afetam grandes quantidades de dados. Para mais informações, consulte Publicação da Execução de Procedimentos Armazenados em Replicação Transacional.

Publicar vistas

Todos os tipos de replicação permitem replicar vistas. Podes copiar a vista e o índice correspondente (se for uma vista indexada) para o Assinante, mas também tens de replicar a tabela base.

Para vistas indexadas, a replicação transacional também permite replicar a vista indexada como uma tabela em vez de uma vista, eliminando a necessidade de replicar também a tabela base. Para isso, especifique uma das opções de "visualização indexada baseada em log" para o parâmetro @typede sp_addarticle (Transact-SQL). Para mais informações sobre a utilização de sp_addarticle, consulte Definir um Artigo.

Publicação de funções definidas pelo utilizador

As instruções CREATE FUNCTION para funções CLR e funções Transact-SQL são copiadas para cada Subscritor. No caso das funções CLR, o conjunto associado também é copiado. As alterações às funções são replicadas para os Subscritores; as alterações aos assemblies associados não são.

Publicar Tipos de Dados Definidos pelo Utilizador e Tipos de Dados Alternativos

A replicação trata as colunas que utilizam tipos definidos pelo utilizador ou tipos de dados com alias como outras colunas e replica-as para os subscritores. O processo executa a instrução CREATE TYPE para cada tipo replicado no Assinante antes de criar cada tabela. Para tipos definidos pelo utilizador, a replicação também copia a assemblagem associada para cada Subscritor. A replicação não replica alterações nos tipos definidos pelo utilizador e nos tipos de dados de alias nos Assinantes.

Se definir um tipo numa base de dados mas não o referenciar em nenhuma coluna quando cria uma publicação, a replicação não copia o tipo para Subscritores. Se, mais tarde, criar uma coluna desse tipo na base de dados e quiser replicá-la, deve primeiro copiar manualmente o tipo (e o assembly associado, no caso de um tipo definido pelo utilizador) para cada Assinante.

Publicação de Índices de Texto Integral

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

Fazer Alterações de Esquema a Objetos Publicados

A replicação oferece suporte a uma ampla variedade de alterações de esquema em objetos publicados. Quando efetua qualquer uma das seguintes alterações de esquema no objeto publicado correspondente num Publicador do SQL Server, a replicação, por predefinição, propaga essa alteração a todos os Subscritores do SQL Server:

  • ALTER TABLE

  • ALTER VIEW

  • ALTER PROCEDURE

  • ALTER FUNCTION

  • ALTER TRIGGER

Para obter mais informações, consulte 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 base de dados:

  • Os utilizadores podem aceder à base de dados durante a criação da publicação e o snapshot inicial, mas é melhor criar publicações em períodos de menor atividade no Publisher.

  • Não podes renomear uma base de dados depois de criares uma publicação nela. Para renomear a base de dados, deve primeiro remover a replicação da base de dados.

  • Se estiver a publicar um objeto de base de dados que depende de um ou mais outros objetos da base de dados, deve publicar todos os objetos referenciados. Por exemplo, se publicar uma vista que depende de uma tabela, deve também publicar a tabela.

    Note

    Se adicionar um artigo a uma publicação de fusão e um artigo existente depender do novo artigo, 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: publica uma tabela mas não publica uma função que a tabela referencia. Se não publicares a função, a tabela não pode ser criada pelo Assinante. Ao adicionar a função à publicação: especifique um valor de 1 para o parâmetro @processing_orderde sp_addmergearticle; e especificar um valor de 2 para o parâmetro @processing_orderde sp_changemergearticle, especificando o nome da tabela para o parâmetro @article. Esta ordem de processamento assegura que cria a função no Assinante antes da tabela que dela depende. Pode usar números diferentes para cada artigo, desde que o número da função seja inferior ao número da tabela.

  • Os nomes das 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 pode publicar varia consoante o tipo de publicação. Para mais informações, consulte a secção "Objetos de Replicação" das Especificações de Capacidade Máxima para SQL Server.

  • Não é possível publicar procedimentos armazenados, vistas, triggers e funções definidas pelo utilizador definidas com WITH ENCRYPTION no âmbito da replicação do SQL Server.

  • Podes replicar coleções de esquemas XML, mas as alterações 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 estiver numa publicação de replicação transacional, não pode desativar quaisquer índices associados a colunas de chave primárias. A replicação requer estes índices. Para desativar um índice, deve primeiro retirar a tabela da publicação.

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

  • Não pode publicar funções que contenham a dica NOEXPAND sobre vistas indexadas na mesma publicação que as tabelas referenciadas e as vistas indexadas, devido à ordem em que o agente de distribuição as entrega. Para contornar este problema, coloque a tabela e a criação das vistas indexadas numa primeira publicação e adicione, a uma segunda publicação, funções que contenham a sugestão NOEXPAND nas vistas indexadas, que deverá publicar depois de a primeira publicação estar concluída. Em alternativa, crie scripts para estas funções e forneça o script utilizando o parâmetro @post_snapshot_script do sp_addpublication.

Esquemas e Propriedade de Objetos

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 fusão com um nível de compatibilidade de 90 ou superior, publicações instantâneas 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 que possuem objetos não existirem no sistema do Assinante, eles serão criados automaticamente.

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

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

  • Para artigos em publicações que utilizam instantâneos em modo de caractere (usados para subscritores que não utilizam o SQL Server e para subscritores do SQL Server Compact): por padrão, o proprietário fica em branco. O proprietário é por padrão o proprietário associado à conta usada pelo Agente de Distribuição ou Agente de Mesclagem para se conectar ao Subscriber.

Pode alterar o proprietário do objeto através da caixa de diálogo Propriedades do Artigo - <Artigo> e através dos 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.

Publicação de Dados a Assinantes que Executam Versões Anteriores do SQL Server

  • Se estiver a publicar para um Assinante a correr uma versão anterior do SQL Server, está limitado à funcionalidade dessa versão. Esta limitação aplica-se tanto à funcionalidade específica da replicação como à funcionalidade global do produto.

  • As publicações de fusão usam um nível de compatibilidade, que determina que funcionalidades pode usar numa publicação e permite suportar Subscritores a executar versões anteriores do SQL Server.

Tabelas de publicação em mais do que uma publicação

A replicação suporta a publicação de artigos em várias publicações, incluindo a republicação de dados, com as seguintes restrições:

  • Se publicar um artigo quer numa publicação transacional quer numa publicação de fusão, defina a propriedade @published_in_tran_pub como TRUE para o artigo de fusão. Para mais informações sobre propriedades de definição, veja Visualizar e Modificar Propriedades de Publicação e Visualizar e Modificar Propriedades de Artigos.

    Defina a propriedade @published_in_tran_pub se um artigo fizer parte de uma subscrição transacional e estiver incluído numa publicação de fusão. Por predefinição, a replicação transacional espera que as tabelas no Subscritor sejam apenas de leitura. Se a replicação por fusão fizer alterações de dados numa tabela numa subscrição transacional, pode ocorrer não convergência de dados. Para evitar este problema, especifique qualquer tabela como apenas para download na publicação da fusão. Esta definição impede que um assinante de fusão faça upload de alterações de dados para a tabela. Para obter mais informações, consulte Otimizar o desempenho da replicação de mesclagem com Download-Only artigos.

  • Não é possível publicar um artigo quer numa publicação de fusão quer numa publicação transacional com subscrições com atualização em fila de espera.

  • Não pode republicar artigos incluídos em publicações transacionais que suportem a atualização de subscrições.

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

    Property Parâmetro em sp_addarticle
    Gestão do intervalo de identidades @auto_identity_range (obsoleto) e @identityrangemangementoption
    Intervalo de identidade do Publisher @pub_identity_range
    Gama de identidades @identity_range
    Limiar de intervalo de identidade @threshold

    Para mais informações sobre estes parâmetros, veja sp_addarticle (Transact-SQL).

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

    Property Parâmetro em sp_addmergearticle
    Rastreamento de colunas @column_tracking
    Opções de esquema @schema_option
    Filtragem de colunas @vertical_partition
    Opções de upload do assinante @subscriber_upload_options
    Rastreio de eliminação condicional @delete_tracking
    Compensação de erros @compensate_for_errors
    Gestão do intervalo de identidades @auto_identity_range (obsoleto) e @identityrangemangementoption
    Intervalo de identidade do Publisher @pub_identity_range
    Gama de identidades @identity_range
    Limiar de intervalo de identidade @threshold
    Opções de partição @partition_options
    Transmissão em fluxo de coluna BLOB @stream_blob_columns
    Tipo de filtro @filter_type (parâmetro em sp_addmergefilter)

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

  • A replicação transacional e a replicação de fusão sem filtros permitem publicar uma tabela em múltiplas publicações e, em seguida, subscrevê-la para uma única tabela na base de dados de subscrição (normalmente designado por cenário de consolidação). O rollup é frequentemente utilizado para agregar subconjuntos de dados de várias localizações numa única tabela num Subscritor central. As publicações de fusão filtrada não suportam o cenário central do Assinante. Para a replicação de fusões, o rollup é normalmente implementado através de uma única publicação com filtros de linha parametrizados. Para obter mais informações, consulte Filtros de linha parametrizados.