Tabelas sem chaves primárias ou restrições UNIQUE não possuem um identificador de linha exclusivo. Por isso, a sincronização padrão pode gravar a mesma linha mais de uma vez — por exemplo, quando o módulo de gravação incremental reinicia após uma interrupção. O recurso de gravação Exactly-Once no Data Transmission Service (DTS) evita gravações duplicadas ao rastrear cada linha confirmada em tabelas transacionais, permitindo que operações reexecutadas sejam ignoradas com segurança.
Como funciona
Durante a sincronização completa, o DTS realiza uma varredura completa em todas as tabelas sem chaves primárias ou restrições UNIQUE e gera snapshots de tabela para estabelecer uma linha de base.
Na sincronização incremental, o DTS mantém um banco de dados chamado dts na instância de destino. Esse banco de dados contém tabelas transacionais que registram quais linhas já foram gravadas. Quando o módulo de gravação incremental reprocessa um lote — por exemplo, após uma reinicialização — o DTS verifica essas tabelas e ignora as linhas já confirmadas, evitando duplicidades.
A gravação Exactly-Once é suportada apenas para instâncias de sincronização bidirecional.
Integrações suportadas
A gravação Exactly-Once suporta as seguintes combinações de bancos de dados de source e destino. Todas as combinações exigem uma instância de sincronização bidirecional.
|
Banco de dados de source |
Banco de dados de destino |
|
MySQL |
MySQL, PolarDB for MySQL |
|
PolarDB for MySQL |
MySQL, PolarDB for MySQL |
|
PostgreSQL |
PostgreSQL, PolarDB for PostgreSQL |
|
PolarDB for PostgreSQL |
PostgreSQL e PolarDB for PostgreSQL. |
|
PolarDB (Compatible with Oracle) |
PolarDB (Compatible with Oracle) |
Escopo e limitações
Antes de ativar este recurso, confirme se sua configuração atende a todos os requisitos abaixo:
A tarefa de sincronização deve ser do tipo sincronização completa e incremental de dados em uma instância específica de sincronização bidirecional. Para cenários suportados, consulte Cenários de sincronização de dados suportados.
Clusters do PolarDB for MySQL da edição Multi-master Cluster (Limitless) Edition não suportam este recurso.
Este recurso não está disponível para tarefas que utilizam o método de faturamento serverless.
Quando ativado, o desempenho de gravação incremental fica limitado a 3.000 RPS.
Operações DDL não são suportadas. Executar DDL durante uma tarefa ativa pode causar falha na tarefa. Operações DDL de limpeza de dados, como
TRUNCATE, podem resultar em inconsistência de dados.-
Para tabelas sem chaves primárias ou restrições UNIQUE:
Se o Database Type do banco de dados de source for MySQL e o Access Method não for Alibaba Cloud Instance, o banco de dados de source deve estar no modo de identificador global de transação (GTID) e as tabelas devem usar um mecanismo de armazenamento transacional, como InnoDB.
O tamanho máximo de uma única tabela é de 200 GB.
Observações de uso
Bloqueio de tabelas durante a sincronização
Quando o Database Type de source é MySQL ou PolarDB for MySQL, as tabelas sem chaves primárias ou restrições UNIQUE são bloqueadas temporariamente durante a sincronização.
Possível perda de dados após operação DDL de limpeza
Executar uma operação DDL de limpeza de dados, como TRUNCATE, no banco de dados de source enquanto a gravação Exactly-Once está ativa pode causar perda de dados, especialmente se o módulo de gravação incremental reiniciar após a operação. É sua responsabilidade garantir a consistência dos dados.
Não modifique o banco de dados dts no destino
As tarefas de sincronização completa e incremental criam um banco de dados ou schema chamado dts na instância de destino e o preenchem com tabelas transacionais. Não execute operações DML nessas tabelas enquanto a tarefa do DTS estiver em execução.
Tarefas de sincronização remota herdam a configuração de gravação Exactly-Once
Em uma tarefa de sincronização remota, a configuração Enable Exactly-Once Write assume por padrão a configuração da tarefa de sincronização direta e não pode ser alterada.
Ative gravação Exactly-Once
-
Na configuração da tarefa de sincronização direta, acesse a etapa Configure Objects.
Se você estiver usando a versão anterior da página de configuração, acesse a etapa Configure Objects and Advanced Settings . Para instruções de configuração, consulte Visão geral das soluções de sincronização .
Defina Enable Exactly-Once Write como Yes.
Conclua o restante da configuração.