A migração prematura de triggers durante uma tarefa de sincronização ou migração de dados pode causar inconsistência de dados entre os bancos de dados de origem e de destino. Este tópico explica como configurar a sincronização ou migração de triggers para evitar esse problema.
Pré-requisitos
Os bancos de dados de origem e de destino devem ser de um tipo compatível, como de uma instância do ApsaraDB RDS for MariaDB para uma instância do ApsaraDB RDS for MySQL. Para obter mais informações, consulte Supported instances.
-
A instância deve estar configurada para tarefas de estrutura e incrementais.
Instância de migração: Em Migration Types, selecione Schema Migration e Incremental Data Migration.
Instância de sincronização: Em Synchronization Types, a opção Incremental Data Synchronization vem selecionada por padrão. Selecione também Schema Synchronization.
Ao configurar a instância, selecione objetos em Source Objects no nível de banco de dados inteiro ou de schema.
Instâncias compatíveis
Banco de dados de origem | Banco de dados de destino | Descrição |
MySQL, PolarDB for MySQL, MariaDB | MySQL, PolarDB for MySQL, MariaDB | Se Method to Migrate Triggers in Source Database estiver definido como Automatically Migrate, o DTS adiciona uma instrução de controle ao trigger no banco de dados de destino. Essa instrução impede que o trigger seja acionado por padrão. Para obter mais informações, consulte Automatic migration. |
SQL Server | SQL Server | Se Method to Migrate Triggers in Source Database estiver definido como Automatically Migrate, o DTS migra automaticamente os triggers para o banco de dados de destino. Importante Caso alterações incrementais nos dados de origem acionem triggers que atualizem dados tanto na origem quanto no destino, podem ocorrer inconsistências no banco de dados de destino. Recomendamos selecionar Manual Migration e executar as operações subsequentes necessárias. |
-
Quando o banco de dados de origem da instância de sincronização ou migração contém triggers e o banco de dados de destino é uma instância PostgreSQL, PolarDB for PostgreSQL ou PolarDB for PostgreSQL (Compatible with Oracle), o DTS ajuda a prevenir inconsistências de dados causadas pela sincronização ou migração de triggers durante a execução da instância.
Se a conta usada no banco de dados de destino tiver privilégios suficientes, como uma conta privilegiada ou superprivilegiada, o DTS desativa automaticamente o trigger no nível de sessão após a sincronização ou migração para o destino.
Caso a conta do banco de dados de destino não tenha privilégios suficientes, garanta que o parâmetro
session_replication_roleesteja definido comoreplicano banco de dados de destino enquanto a instância estiver em execução.
Para outras instâncias de sincronização ou migração que contenham triggers, consulte How do I configure a synchronization or migration task when the source database contains triggers?
A migração automática altera apenas a forma como o DTS processa os triggers, sem impacto na sincronização incremental de dados. A ocorrência da sincronização incremental depende da seleção de Incremental Data Migration em Migration Types. Ao selecionar Schema Migration, migração completa de dados e Incremental Data Migration, o DTS sincroniza automaticamente os novos dados do banco de origem para o destino após a conclusão da migração completa.
Configuração da instância
Na etapa Configure Objects, escolha uma opção para Method to Migrate Triggers in Source Database.
Na versão anterior da página de configuração, essa opção encontra-se na etapa Configure Objects and Advanced Settings.
Selecione Manual Migration: Durante a migração de schema, o DTS gera um alerta
object ignored due to incremental migration is enabledpara cada trigger encontrado e não o migra para o banco de dados de destino. Sincronize ou migre manualmente os triggers do banco de origem para o destino antes de encerrar a tarefa incremental. Para obter mais informações, consulte Manual migration.Escolha Automatically Migrate: Nenhuma ação adicional é necessária.
Migração manual
O procedimento é semelhante para instâncias de sincronização e de migração. Esta seção usa uma instância de sincronização como exemplo.
-
Acesse a página da lista de tarefas de sincronização da região de destino. Use um dos dois métodos a seguir:
Pelo console do DTS
Faça login no console do Data Transmission Service (DTS).
No painel de navegação à esquerda, clique em Data Synchronization.
No canto superior esquerdo da página, selecione a região onde a instância de sincronização está localizada.
Pelo console do DMS
NotaAs operações reais podem variar conforme o modo e o layout do console do DMS. Para obter mais informações, consulte Simple mode e Customize the layout and style of the DMS interface.
Faça login no Data Management (DMS).
Na barra de menu superior, escolha .
À direita de Data Synchronization Tasks, selecione a região onde a instância de sincronização está localizada.
Clique no ID da instância de destino.
Opcional: No painel de navegação à esquerda, clique em Task Management.
Na seção Progress, clique no módulo Incremental Write.
-
Na aba Basic Information, clique em Migrate Triggers.
NotaSe o botão Migrate Triggers não for exibido, nenhum trigger foi encontrado durante a migração do schema.
Visualize os resultados da sincronização de triggers na seção Progress, dentro do módulo Schema Migration3.
Migração automática
O DTS copia o código do trigger do banco de dados de origem, adiciona uma instrução de controle ao cabeçalho do trigger e grava o código modificado no banco de dados de destino. O código a seguir mostra um exemplo:
Trigger do banco de dados de origem:
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW
BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
END;
Trigger do banco de dados de destino:
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;
Perguntas frequentes
-
O que significa uma tarefa que inclui operações de estrutura e incrementais?
Para uma instância de sincronização, isso significa que tanto Schema Synchronization quanto Incremental Data Synchronization estão selecionadas em Synchronization Types. Para uma instância de migração, indica que Schema Migration e Incremental Data Migration foram selecionadas em Migration Types.
-
Como encerro uma tarefa incremental?
Encerre a tarefa incremental terminando, redefinindo ou liberando a instância. Para obter mais informações, consulte Terminate a DTS instance, Reset a DTS instance e Release a DTS instance.