Este tópico descreve como resolver erros de tabela em uma instância de sincronização de dados do Data Transmission Service (DTS) ao selecionar novamente os objetos de sincronização.
Pré-requisitos
Nenhum aplicativo está lendo o banco de dados de destino, ou seus aplicativos toleram uma breve interrupção.
Os bancos de dados de origem e de destino estão funcionando corretamente.
A instância de sincronização de dados possui outros objetos para sincronizar além da tabela com erro.
O Status da instância não pode ser Modifying Objects.
Considerações
Selecionar novamente os objetos de sincronização reinicia automaticamente a instância. Durante esse processo, os dados podem ficar temporariamente inconsistentes entre os bancos de dados de origem e de destino.
-
Limpe os dados da tabela de destino. Antes de prosseguir, certifique-se de que:
Apenas o DTS está gravando dados na tabela de destino, ou os dados da tabela podem ser limpos.
Os serviços dependentes da tabela de destino não serão afetados.
As tarefas de sincronização do DTS usam o modo de gravação serial para garantir a consistência dos dados. Se a gravação falhar em qualquer tabela, toda a tarefa de sincronização será bloqueada ou falhará, não apenas a tabela afetada. Resolva os erros de tabela prontamente para evitar interrupções em todo o pipeline de sincronização.
Processo
Remova a tabela com erros ou os dados quentes da instância de sincronização de dados.
Limpe os dados da tabela com erros no banco de dados de destino.
Adicione a tabela com erros novamente à instância de sincronização de dados.
Procedimento
-
Acesse a página Data Synchronization Tasks.
Faça login no console do Data Management (DMS).
Na barra de navegação superior, clique em Data + AI.
No painel de navegação à esquerda, escolha .
NotaAs operações podem variar conforme o modo e o layout do console do DMS. Para mais informações, consulte Simple mode console e Customize DMS console layout and style.
Você também pode acessar a página Data Synchronization Tasks do novo console do DTS.
-
Conforme o cenário, remova a tabela com erros ou os dados quentes.
NotaPara mais informações sobre como visualizar dados quentes, consulte
Visualize hot data information
.
NotaCaso não seja possível identificar o nome específico da tabela na mensagem de erro, ou se a mensagem não for clara, faça login no console do DTS e escolha Task Details > Error Information para visualizar o nome completo da tabela e detalhes, como inconsistência de schema.
-
Se o objeto de sincronização estiver no nível do banco de dados:
Localize a instância de sincronização de dados desejada na lista de tarefas e clique em Operation na coluna Reselect Objects.
-
No painel Selected Objects, selecione o banco de dados que contém a tabela com erros e clique no ícone

para removê-lo.
-
No painel Source Objects, selecione os objetos a serem sincronizados no nível da tabela (excluindo a tabela com erros) e clique no ícone Selected Objects

para adicioná-los ao
painel.
Clique em Next: Advanced Settings e, em seguida, clique em Next: Precheck and Start Task.
Quando a Success Rate da pré-verificação for 100%, clique em Changed. Return .
-
Se o objeto de sincronização estiver no nível da tabela:
Localize a instância de sincronização de dados desejada na lista de tarefas e clique em Operation na coluna Reselect Objects.
-
No painel Selected Objects, selecione a tabela com erros e clique no ícone

para removê-la.
Clique em Next: Advanced Settings e, em seguida, clique em Next: Precheck and Start Task.
Quando a Success Rate da pré-verificação for 100%, clique em Changed. Return .
-
-
Limpe os dados da tabela com erros no banco de dados de destino.
Por exemplo, para limpar dados de uma tabela em um banco de dados MySQL, execute os seguintes comandos:
TRUNCATE TABLE XXX; DROP TABLE XXX; -
Adicione a tabela novamente como objeto de sincronização.
Localize a instância de sincronização de dados desejada na lista de tarefas e clique em Operation na coluna Reselect Objects.
-
No painel Source Objects, selecione a tabela e clique no ícone
para adicioná-la ao painel Selected Objects. Clique em Next: Advanced Settings e, em seguida, clique em Next: Precheck and Start Task.
Quando a Success Rate da pré-verificação for 100%, clique em Changed. Return .
Após a reinicialização automática da instância, verifique se o erro foi resolvido.
Perguntas frequentes
O que fazer se a tarefa continuar tentando novamente ou travar após eu ignorar a tabela com erros?
Causa: A tarefa pode ainda estar tentando novamente porque outras tabelas no banco de dados de destino estão ausentes (diferentes da tabela ignorada anteriormente), ou porque a tarefa está migrando uma tabela grande ou aguardando em um loop de nova tentativa.
Solução:
No console do DTS, edite a tarefa, localize a nova tabela com erros reportada e configure-a para ser ignorada. Salve a configuração, pause e reinicie a tarefa.
Verifique se as tabelas pai e filho estão incluídas no escopo de sincronização.
Como resolver erros que indicam tabelas temporárias ausentes ou conflitos de SELECT INTO no banco de dados de destino durante a sincronização incremental?
Causa: O banco de dados de destino não está realmente sem tabelas temporárias. O problema ocorre porque o Change Data Capture (CDC) está ativado no banco de dados de origem. Os gatilhos criados pelo DTS interceptam operações SELECT INTO, o que entra em conflito com a criação implícita de tabelas.
Solução:
Verifique se existem arquivos de log de transações no banco de dados de origem.
Desative o CDC no banco de dados de origem.
Reconfigure a tarefa de sincronização e selecione Parse Source Database Logs como método de sincronização.
Como solucionar problemas de instruções DDL do banco de dados de origem executadas múltiplas vezes no banco de dados de destino?
Verifique o horário de início do monitoramento da tarefa do DTS para confirmar que as instruções DDL foram executadas no banco de dados de origem após o início do monitoramento de alterações incrementais.
Descarte identificação equivocada de espera de bloqueio: Execute
SHOW FULL PROCESSLISTno banco de dados de destino para distinguir entre sessões que executam DDL e sessões suspensas devido a bloqueios de metadados.Ative o log geral para reproduzir o problema: Em um banco de dados de destino autogerenciado, execute
SET GLOBAL general_log = 'ON';para tentar reproduzir o problema.Analise o log: Verifique o
general_logpara confirmar se o DTS enviou múltiplas instruções DDL idênticas.Isole o ambiente de teste: Se testar em produção for inconveniente, copie o banco de dados de origem para um novo banco de dados e configure uma nova tarefa do DTS para testes.
Se os logs do DTS não mostrarem instruções repetidas e o problema não puder ser reproduzido, a causa pode não estar relacionada ao DTS, ou o período de retenção de logs pode ter expirado.
O que fazer se a sincronização for interrompida por várias horas e houver suspeita de bloqueios MDL no banco de dados de destino?
Causa: Bloqueios de metadados (bloqueios MDL) causados por operações DDL de longa duração no banco de dados de destino estão impedindo gravações incrementais de dados.
Resolução:
Faça login no console do RDS e encerre a sessão anormal.
Modifique os objetos de sincronização do DTS para remover a tabela afetada.
Exclua a tabela afetada do banco de dados de destino.
Aguarde até que a tarefa do DTS não apresente atraso de replicação e modifique os objetos de sincronização para adicionar a tabela novamente para remigração.
Como resolver erros que indicam pacotes de dados excessivamente grandes ou max_allowed_packet insuficiente durante a sincronização incremental?
Causa: Um único registro incremental é muito grande, excedendo o valor de max_allowed_packet configurado no banco de dados de destino.
Solução: Verifique o valor de max_allowed_packet no banco de dados de origem (por exemplo, 1073741824) e defina o mesmo valor ou um valor superior no banco de dados de destino. Para o PolarDB for MySQL, modifique esse parâmetro nas configurações de parâmetros do cluster.