Perguntas frequentes para administradores de replicação

Aplica-se a:SQL ServerAzure SQL Managed Instance

As perguntas e respostas a seguir fornecem orientação sobre uma variedade de tarefas enfrentadas pelos administradores de bancos de dados replicados.

Configurar a replicação

A atividade precisa de ser interrompida numa base de dados quando é publicada?

Não. A atividade pode continuar em um banco de dados enquanto uma publicação está sendo criada. Tenha em atenção que gerar um snapshot pode consumir muitos recursos, pelo que é preferível gerar snapshots durante períodos de menor atividade na base de dados (por defeito, é gerado um snapshot ao concluir o Assistente de Nova Publicação).

As tabelas são bloqueadas durante a geração de snapshots?

O período de tempo em que os bloqueios são mantidos depende do tipo de replicação utilizada.

  • Para publicações de mesclagem, o Snapshot Agent não usa bloqueios.

  • Para publicações transacionais, por padrão, o Snapshot Agent usa bloqueios somente durante a fase inicial de geração de snapshot.

  • Para publicações de snapshot, o Snapshot Agent faz bloqueios durante a geração do snapshot.

Como os bloqueios impedem que outros usuários atualizem as tabelas, o Snapshot Agent deve ser agendado para ser executado durante períodos de menor atividade no banco de dados, especialmente para publicações de instantâneos.

Quando é que uma subscrição está disponível; Quando pode ser utilizada a base de dados de assinaturas?

Uma assinatura estará disponível depois que o instantâneo for aplicado ao banco de dados de assinatura. Embora a base de dados por subscrição esteja acessível antes disso, a base de dados não deve ser usada até depois de o snapshot ter sido aplicado. Use o Replication Monitor para verificar o status da geração de snapshots e do aplicativo:

O que acontece se o Snapshot Agent não estiver concluído quando o Distribution ou o Merge Agent começam?

Ele não causará um erro se o Distribution Agent ou o Merge Agent for executado ao mesmo tempo que o Snapshot Agent. No entanto, você deve estar ciente do seguinte:

  • Se o Distribution Agent ou o Merge Agent estiver configurado para ser executado continuamente, o agente aplicará o snapshot automaticamente após a conclusão do Snapshot Agent.

  • Se o Distribution Agent ou o Merge Agent estiverem configurados para correr em regime de programação ou a pedido, e não houver snapshot disponível quando o agente é executado, o agente irá desligar-se com uma mensagem a indicar que um snapshot ainda não está disponível. Você deve executar o agente novamente para aplicar o snapshot após a conclusão do Snapshot Agent. Para obter mais informações sobre como executar agentes, consulte Sincronizar uma assinatura push, Sincronizar uma assinatura pull e Conceitos de executáveis do agente de replicação.

Devo criar scripts para minha configuração de replicação?

Sim. O script da configuração de replicação é uma parte fundamental de qualquer plano de recuperação de desastres para uma topologia de replicação. Para obter mais informações sobre scripts, consulte Replicação de scripts.

Que modelo de recuperação é necessário em um banco de dados replicado?

A replicação funciona corretamente usando qualquer um dos modelos de recuperação: básico, em bloco ou completo. A replicação de mesclagem rastreia as alterações armazenando informações em tabelas de metadados. A replicação transacional acompanha as alterações marcando o registo de transações, mas este processo de marcação não é afetado pelo modelo de recuperação.

Por que a replicação adiciona uma coluna às tabelas replicadas; Será removido se a tabela não for publicada?

Para monitorizar as alterações, a replicação de mesclagem e a replicação transacional com assinaturas de atualização em fila devem ser capazes de identificar de forma única cada linha em cada tabela publicada. Para isso:

  • A replicação de mesclagem acrescenta a coluna rowguid a todas as tabelas, exceto se a tabela já possuir uma coluna do tipo de dados uniqueidentifier com a propriedade ROWGUIDCOL configurada (nesse caso, essa coluna é utilizada). Se a tabela for retirada da publicação, a coluna rowguid é removida; Se uma coluna existente foi usada para rastreamento, a coluna não é removida.

  • Se uma publicação transacional oferecer suporte a assinaturas de atualização em fila, a replicação adicionará a coluna msrepl_tran_version a cada tabela. Se a tabela for retirada da publicação, a coluna msrepl_tran_version não é removida.

  • Um filtro não deve incluir o rowguidcol usado pela replicação para identificar linhas. Por padrão, essa é a coluna adicionada no momento em que você configura a replicação de mesclagem e é chamada rowguid.

Como faço para gerenciar restrições em tabelas publicadas?

Há uma série de questões a considerar em relação às restrições nas tabelas publicadas:

  • A replicação transacional requer uma restrição de chave primária em cada tabela publicada. A replicação de fusão não requer uma chave primária, mas se houver uma presente, tem de ser replicada. A replicação de snapshots não requer uma chave primária.

  • Por padrão, as restrições de chave primária, índices e restrições de verificação são replicadas para Assinantes.

  • A opção NOT FOR REPLICATION é especificada por predefinição para restrições de chave estrangeira e restrições CHECK; as restrições são impostas nas operações do utilizador, mas não nas operações do agente.

Para informações sobre como definir as opções de esquema que controlam se as restrições são replicadas, consulte Especificar Opções de Esquema para replicação do SQL Server.

Como faço para gerenciar colunas de identidade?

A replicação fornece gestão automática de faixas de identidade para topologias de replicação que incluem atualizações no Subscritor. Para obter mais informações, consulte Replicar colunas de identidade.

Os mesmos objetos podem ser publicados em publicações diferentes?

Sim, mas com algumas restrições. Para obter mais informações, consulte a seção "Publicando tabelas em mais de uma publicação" no tópico Publicar dados e objetos de banco de dados.

Várias publicações podem utilizar a mesma base de dados de distribuição?

Sim. Não há restrições quanto ao número ou tipos de publicações que podem usar o mesmo banco de dados de distribuição. Todas as publicações de um determinado Editor devem utilizar a mesma base de dados de Distribuidor e distribuição.

Se você tiver várias publicações, poderá configurar vários bancos de dados de distribuição no Distribuidor para garantir que os dados que fluem por cada banco de dados de distribuição sejam de uma única publicação. Use a caixa de diálogo Propriedades do Distribuidor ou sp_adddistributiondb para adicionar uma base de dados de distribuição. Para obter mais informações sobre como acessar a caixa de diálogo, consulte Exibir e modificar propriedades do distribuidor e do editor.

Como posso encontrar informações sobre o Distribuidor e o Editor, tais como que objetos numa base de dados são publicados?

Essas informações estão disponíveis por meio do SQL Server Management Studio e de vários procedimentos armazenados de replicação. Para mais informações, consulte o Script de Informações do Distribuidor e do Editor.

A replicação criptografa dados?

Não. A replicação não encripta dados que estão armazenados na base de dados ou transferidos pela rede. Para mais informações, consulte a secção "Encriptação" do tópico Visualizar e Modificar Definições de Segurança de Replicação.

Como faço para replicar dados pela Internet?

Replique dados pela Internet usando:

Todos os tipos de replicação do Microsoft SQL Server permitem replicar dados através de VPN, mas deve considerar a sincronização pela Web se estiver a usar replicação de intercalação.

A replicação é retomada se uma conexão for interrompida

Sim. O processamento de replicação é retomado no ponto em que parou se uma conexão for interrompida. Se estiver a usar replicação de fusão numa rede pouco fiável, considere usar registos lógicos, que garantem que as alterações relacionadas são processadas como uma unidade. Para obter mais informações, consulte Agrupar alterações em linhas relacionadas com registros lógicos.

A replicação funciona em conexões de baixa largura de banda? Usa compressão?

Sim, a replicação funciona em conexões de baixa largura de banda. Para ligações via TCP/IP, utiliza a compressão fornecida pelo protocolo, mas não fornece compressão adicional. Para conexões de sincronização da Web por HTTPS, ele usa a compactação fornecida pelo protocolo e também a compactação adicional dos arquivos XML usados para replicar as alterações.

Posso configurar a replicação se me conectar ao servidor usando o endereço IP?

Não, a replicação funciona somente quando você usa o nome real do servidor. A partir do SQL Server Management Studio (SSMS) 18.0 (e versões posteriores), a replicação pode ser configurada usando o nome real do servidor e o número da porta.

Logins e propriedade de objetos

Os logins e senhas são replicados?

Não. Você pode criar um pacote SSIS para transferir logins e senhas de um Publicador para um ou mais Assinantes.

O que são esquemas e como eles são replicados?

A partir do Microsoft SQL Server 2005 (9.x), o esquema tem dois significados:

  • A definição de um objeto, como uma CREATE TABLE instrução. Por padrão, a replicação copia as definições de todos os objetos replicados para o Assinante.

  • O namespace dentro do qual um objeto é criado: <Banco de dados>.<Esquema>.<Objeto>. Os esquemas são definidos usando a CREATE SCHEMA instrução.

  • 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 aos quais pertencem os objetos não existirem no Subscritor, sã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.

O proprietário do objeto pode ser alterado 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.

Como podem as subvenções na base de dados de subscrições ser configuradas para corresponder às subvenções na base de dados de publicações?

Por predefinição, a replicação não executa instruções GRANT na base de dados de subscrição. Se desejar que as permissões no banco de dados de assinatura correspondam às do banco de dados de publicação, use um dos seguintes métodos:

O que acontece com as permissões concedidas em um banco de dados de assinatura se uma assinatura for reinicializada?

Por padrão, os objetos no Assinante são descartados e recriados quando uma assinatura é reinicializada, o que faz com que todas as permissões concedidas para esses objetos sejam descartadas. Há duas maneiras de lidar com isso:

  • Reaplique as concessões após a reinicialização usando as técnicas descritas na seção anterior.

  • Especifique que os objetos não devem ser removidos quando a subscrição for reinicializada. Antes da reinicialização, escolha uma das seguintes opções:

    • Execute sp_changearticle ou sp_changemergearticle. Especifique um valor de «pre_creation_cmd» (sp_changearticle) ou «pre_creation_command» (sp_changemergearticle) para o parâmetro @property e um valor de «none», «delete» ou «truncate» para o parâmetro @value.

    • Na caixa de diálogo Propriedades do Artigo - <Artigo> na seção Objeto de Destino, selecione um valor de Manter o objeto existente inalterado, Eliminar dados. Se o artigo tiver um filtro de linha, elimine apenas os dados que correspondem ao filtro. ou Truncar todos os dados no objeto existente para a opção Ação se o nome estiver em uso. Para obter mais informações sobre como acessar essa caixa de diálogo, consulte Exibir e modificar propriedades de publicação.

Manutenção da base de dados

Porque é que não posso executar TRUNCATE TABLE numa tabela publicada?

TRUNCATE TABLE é uma instrução DDL que não regista eliminações individuais de linhas e não dispara gatilhos DML. Não é permitido porque a replicação não consegue acompanhar as alterações causadas pela operação: a replicação transacional acompanha as alterações através do registo de transações; a replicação merge acompanha as alterações através de triggers DML em tabelas publicadas.

Qual é o efeito da execução de um comando de inserção em massa em um banco de dados replicado?

Para replicação transacional, as inserções em massa são rastreadas e replicadas como outras inserções. Para a replicação de mesclagem, deve-se garantir que os metadados de rastreamento de alterações sejam atualizados corretamente.

Há considerações sobre replicação para backup e restauração?

Sim. Há várias considerações especiais para bancos de dados envolvidos na replicação. Para obter mais informações, consulte Fazer backup e restaurar bancos de dados replicados.

A replicação afeta o tamanho do log de transações?

A replicação por merge e a replicação snapshot não afetam o tamanho do log das transações, mas a replicação transacional pode. Se uma base de dados incluir uma ou mais publicações transacionais, o registo não é truncado até que todas as transações relevantes para as publicações tenham sido entregues à base de dados de distribuição. Se o log de transações estiver crescendo demais e o Log Reader Agent estiver sendo executado de forma agendada, considere encurtar o intervalo entre as execuções. Ou defina-o para ser executado no modo contínuo. Se estiver configurado para correr em modo contínuo (o padrão), certifique-se de que está a correr. Para obter mais informações sobre como verificar o status do Log Reader Agent, consulte Exibir informações e executar tarefas usando o Replication Monitor.

Além disso, se tiver definido a opção 'sincronizar com backup' na base de dados de publicação ou de distribuição, o registo de transações não é truncado até que todas as transações tenham sido guardadas. Se o log de transações estiver crescendo demais e você tiver essa opção definida, considere encurtar o intervalo entre os backups do log de transações. Para obter mais informações sobre como fazer backup e restaurar bancos de dados envolvidos na replicação transacional, consulte Estratégias para backup e restauração de snapshot e replicação transacional.

Como reconstruir índices ou tabelas em bancos de dados replicados?

Há uma variedade de mecanismos para reconstruir índices. Todas podem ser usadas sem considerações especiais para replicação, com a seguinte exceção: as chaves primárias são exigidas em tabelas em publicações transacionais, pelo que não pode colocar e recriar chaves primárias nessas tabelas.

Como posso adicionar ou alterar índices em bases de dados de publicações e de assinaturas?

Os índices podem ser adicionados no Publicador ou nos Subscritores sem considerações especiais para a replicação (lembre-se de que os índices podem afetar o desempenho). CREATE INDEX e ALTER INDEX não são replicados, por isso, se adicionar ou alterar um índice no Publicador, por exemplo, deve fazer a mesma adição ou alteração no Subscritor, se quiser que isso se reflita também aí.

Como faço para mover ou renomear arquivos para bancos de dados envolvidos na replicação?

Em versões do SQL Server anteriores ao SQL Server 2005 (9.x), mover ou renomear arquivos de banco de dados exigia desanexar e reanexar o banco de dados. Como uma base de dados replicada não pode ser desanexada, foi necessário remover primeiro a replicação dessas bases de dados. A partir do SQL Server 2005 (9.x), você pode mover ou renomear arquivos sem desanexar e anexar novamente o banco de dados, sem efeito na replicação. Para mais informações sobre mover e renomear ficheiros, consulte ALTER DATABASE.

Como faço para eliminar uma tabela que está a ser replicada?

Primeiro, solte o artigo da publicação usando sp_droparticle, sp_dropmergearticle ou a caixa de diálogo Propriedades da publicação - <Publicação> e, em seguida, solte-o do banco de dados usando DROP <Object>. Não pode remover artigos de publicações de instantâneo ou transacionais depois de as subscrições terem sido adicionadas; tem de remover primeiro as subscrições. Para obter mais informações, consulte Adicionar artigos e descartar artigos de publicações existentes.

Como faço para adicionar ou soltar colunas em uma tabela publicada?

O SQL Server dá suporte a uma ampla variedade de alterações de esquema em objetos publicados, incluindo adição e descarte de colunas. Por exemplo, execute ALTER TABLE ... DROP COLUMN no Publisher; a instrução é replicada para os Assinantes e, posteriormente, executada para eliminar a coluna. Os assinantes que executam versões do SQL Server anteriores ao SQL Server 2005 (9.x) oferecem suporte à adição e remoção de colunas por meio dos procedimentos armazenados sp_repladdcolumn e sp_repldropcolumn. Para obter mais informações, consulte Alterações de Esquema em Bancos de Dados de Publicação.

Manutenção de replicação

Como posso determinar se os dados nos Subscritores estão sincronizados com os dados no Editor?

Use a validação. A validação informa se um determinado Assinante está sincronizado com o Editor. Para mais informações, consulte Validar Dados Replicados. A validação não fornece informação sobre quais linhas, se alguma, não estão sincronizadas corretamente, mas a ferramenta tablediff dá.

Como posso adicionar uma tabela a uma publicação existente?

Não é necessário parar a atividade nas bases de dados de publicação ou subscrição para adicionar uma tabela (ou outro objeto). Adicione uma tabela a uma publicação através da caixa de diálogo Propriedades da Publicação - <Publicação> ou dos procedimentos armazenados sp_addarticle e sp_addmergearticle. Para obter mais informações, consulte Adicionar artigos e descartar artigos de publicações existentes.

Como posso remover uma tabela de uma publicação?

Remova uma tabela da publicação usando sp_droparticle, sp_dropmergearticle ou a caixa de diálogo Propriedades da Publicação - <Publicação> . Não pode remover artigos de publicações de instantâneo ou transacionais depois de terem sido adicionadas subscrições; tem de eliminar primeiro as subscrições. Para obter mais informações, consulte Adicionar artigos e descartar artigos de publicações existentes.

Quais ações exigem que as assinaturas sejam reinicializadas?

Há uma série de alterações de artigos e publicações que exigem que as assinaturas sejam reinicializadas. Para obter mais informações, consulte Alterar propriedades de publicação e artigo.

Quais ações fazem com que os snapshots sejam invalidados?

Há uma série de alterações em artigos e publicações que invalidam instantâneos e requerem a geração de um novo instantâneo. Para obter mais informações, consulte Alterar propriedades de publicação e artigo.

Como faço para remover a replicação?

As ações necessárias para remover a replicação de um banco de dados dependem se o banco de dados serviu como um banco de dados de publicação, banco de dados de assinatura ou ambos.

Como posso determinar se há transações ou linhas a serem replicadas?

Para replicação transacional, use procedimentos armazenados ou a guia Comandos não distribuídos no Replication Monitor. Para mais informações, consulte Visualizar Comandos Replicados e Informação na Base de Dados de Distribuição e Ver Informação e Executar tarefas usando o Monitor de Replicação.

Para a replicação da fusão, use o procedimento sp_showpendingchangesarmazenado . Para mais informações, consulte sp_showpendingchanges.

Quão atrasado está o Agente de Distribuição? Devo reinicializar?

Utilize o sp_replmonitorsubscriptionpendingcmds procedimento armazenado ou o separador Comandos Não Distribuídos no Monitor de Replicação. O procedimento armazenado e a exibição da guia:

  • O número de comandos na base de dados de distribuição que não foram entregues ao Assinante selecionado. Um comando consiste em uma instrução Transact-SQL DML (linguagem de manipulação de dados) ou uma instrução DDL (linguagem de definição de dados).

  • A quantidade estimada de tempo para entregar comandos ao Assinante. Se esse valor for maior do que o tempo necessário para gerar e aplicar um instantâneo ao Assinante, considere reinicializar o Assinante. Para obter mais informações, consulte Reinicializar assinaturas.

Para mais informações, consulte sp_replmonitorsubscriptionpendingcmds e Ver informação e realizar tarefas usando o Monitor de Replicação.

Replicação e outras funcionalidades da base de dados

A replicação funciona em conjunto com o transporte de logs e o espelhamento de bases de dados?

A replicação funciona em conjunto com a clusterização?

Sim. Não são necessárias considerações especiais porque todos os dados são armazenados em um conjunto de discos no cluster.

Como solucionar problemas de uma solução de terceiros com base na replicação SQL?

Recomendamos entrar em contato com o fornecedor terceirizado para quaisquer problemas para receber suporte. Geralmente, se o problema for isolado pelo fornecedor como sendo um problema principal de replicação fornecido com o SQL Server, o Suporte da Microsoft estará envolvido para ajudar ainda mais.