Quando um trigger no banco de dados de origem atualiza uma tabela que está sendo sincronizada ou migrada, o DTS pode copiar o trigger para o banco de dados de destino antes da fase de dados incrementais, causando inconsistência entre a origem e o destino. Este tópico explica como lidar com triggers durante uma tarefa do DTS para evitar esse problema.
Pré-requisitos
Antes de começar, verifique se:
Os tipos de banco de dados de origem e destino são compatíveis. Consulte a seção Tipos de banco de dados compatíveis.
-
Tanto a sincronização/migração de esquema quanto a sincronização/migração de dados incrementais estejam selecionadas ao configure a instância do DTS:
Migração de dados: selecione Schema Migration e Incremental Data Migration em Migration Types.
Data synchronization: Incremental Data Synchronization está selecionado por padrão em Synchronization Types. Selecione também Schema Synchronization.
Source Objects está defina como um banco de dados ou esquema completo.
Tipos de banco de dados compatíveis
| Source | Destination | Automatic migration behavior |
|---|---|---|
| MySQL, PolarDB for MySQL ou ApsaraDB RDS for MariaDB | MySQL, PolarDB for MySQL ou ApsaraDB RDS for MariaDB | O DTS adiciona uma instrução de controle de trigger a cada trigger no banco de dados de destino. Essa instrução impede que o trigger seja disparado durante a fase de escrita do DTS. Consulte Como funciona a migração automática. |
| SQL Server | SQL Server | O DTS copia os triggers para o banco de dados de destino. Importante Se alterações incrementais no banco de dados de origem fizerem com que os triggers nos bancos de dados de origem e destino atualizem dados simultaneamente, dados inconsistentes poderão aparecer no destino. Use Manual Migration para origens SQL Server e execute as operações subsequentes. |
Se o banco de dados de destino for PostgreSQL, PolarDB for PostgreSQL ou PolarDB for PostgreSQL (Compatible with Oracle), o DTS evita automaticamente a inconsistência de dados:
Se a instância do DTS usar uma conta de banco de dados de destino com privilégios elevados, o DTS desativa o trigger no nível da sessão após sincronizá-lo ou migrá-lo.
Se a conta não tiver permissões suficientes, defina o parâmetrosession_replication_rolecomoreplicano banco de dados de destino durante a execução da tarefa. Para outros tipos de banco de dados que contêm triggers, consulte Configurar uma tarefa de sincronização de dados para um banco de dados de origem que contém triggers .
Escolha um método de migração
Na etapa Configure Objects da configuração da instância do DTS, defina Method to Migrate Triggers in Source Database.
Se você usar a versão anterior do console Data Management (DMS), essa opção aparece na etapa Configure Objects and Advanced Settings.
|
Método |
O que o DTS faz |
Quando usar |
|
Automatically Migrate |
Copia os triggers para o banco de dados de destino adicionando uma instrução de controle. Nenhuma ação adicional é necessária. |
Origens da família MySQL, onde o mecanismo de controle de triggers é suficiente. |
|
Manual Migration |
Ignora o trigger durante a migração de esquema e gera um alerta |
Origens SQL Server. |
Como funciona a migração automática
Ao selecionar Automatically Migrate, o DTS copia o código do trigger do banco de dados de source, envolve o corpo do trigger em uma instrução de controle e grava o trigger modificado no banco de dados de destino.
Trigger no banco de dados de source:
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW
BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
END;
Trigger no banco de dados de destino (após a modificação pelo DTS):
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW
BEGIN
IF (SELECT @`__#aliyun_dts_writer#__) IS NULL THEN
INSERT INTO test2 SET a2 = NEW.a1;
END IF;
END;
Migrar triggers manualmente
As etapas para migrar triggers manualmente são as mesmas da sincronização manual. O exemplo a seguir demonstra a sincronização manual.
-
Acesse o console do Data Management (DMS). Na barra de navegação superior, clique em Data + AI. No painel de navegação à esquerda, escolha DTS (DTS) > Data Synchronization.
Também é possível acessar diretamente a página Data Synchronization Tasks do novo console do DTS . Para opções de layout do console, consulte Simple mode e Customize the layout and style of the DMS console .
-
À direita de Data Synchronization Tasks, selecione a região onde a instância de sincronização de dados reside.
No novo console do DTS, selecione a região na barra de navegação superior.
Localize a instância do DTS e clique em no ID da instância.
(Opcional) No painel à esquerda, clique em Task Management.
Na seção Progress, clique em no módulo Incremental Write.
-
Na aba Basic Information, clique em Migrate Triggers.
Se Migrate Triggers não for exibido, nenhum trigger foi encontrado durante a sincronização ou migração de esquema. Para verifique o resultado da sincronização de triggers, acesse o módulo Schema Migration3 na seção Progress .
Perguntas frequentes
Como seleciono os tipos de sincronização de esquema e incremental ao configurar uma instância do DTS?
Para uma tarefa de sincronização de dados, selecione Schema Synchronization e Incremental Data Synchronization em Synchronization Types. Para uma tarefa de migração de dados, selecione Schema Migration e Incremental Data Migration em Migration Types.
Como concluo a sincronização ou migração de dados incrementais?
Encerre, redefina ou libere a instância do DTS. Para mais detalhes, consulte Encerrar uma instância do DTS, Redefinir uma instância do DTS e Liberar instâncias do DTS.