Use o Data Transmission Service (DTS) para configurar um pipeline de dados contínuo e unidirecional de um cluster de origem PolarDB for PostgreSQL (Compatible with Oracle) para um cluster de destino. O pipeline abrange a sincronização de schema, a carga completa de dados e a captura de alterações incrementais (CDC) por meio da replicação lógica do PostgreSQL.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster de destino PolarDB for PostgreSQL (Compatible with Oracle) com capacidade de armazenamento superior ao espaço utilizado no cluster de origem. Para mais informações, consulte Criar um cluster PolarDB for PostgreSQL (Compatible with Oracle)
Um banco de dados criado no cluster de destino para receber os dados. Para mais informações, consulte Gerenciamento de banco de dados
O parâmetro
wal_leveldefinido comologicalno cluster de origem. Para mais informações, consulte Configurar parâmetros do clusterLogical Replication Slot Failover ativado no cluster de origem
Se o Database Engine do cluster de origem for Oracle syntax compatible 2.0, ele não oferece suporte ao Logical Replication Slot Failover. Um failover de alta disponibilidade (HA) nesse tipo de cluster faz com que a instância de sincronização falhe e se torne irrecuperável.
Faturamento
|
Tipo de sincronização |
Preço |
|
Sincronização de schema e sincronização completa de dados |
Gratuito |
|
Sincronização incremental de dados |
Pago. Para mais informações, consulte Visão geral do faturamento |
Objetos de sincronização suportados
|
Objeto |
Detalhes |
|
SCHEMA, TABLE |
Inclui PRIMARY KEY, UNIQUE KEY, FOREIGN KEY, tipos de dados integrados e DEFAULT CONSTRAINT |
|
VIEW, PROCEDURE |
Requer PostgreSQL versão 11 ou posterior. O suporte varia conforme o tipo de banco de dados de destino — verifique o console para obter detalhes |
Operações SQL suportadas
|
Tipo de operação |
Instruções |
|
DML |
INSERT, UPDATE, DELETE |
|
DDL |
CREATE TABLE, DROP TABLE |
|
DDL |
ALTER TABLE — inclui RENAME TABLE, ADD COLUMN, ADD COLUMN DEFAULT, ALTER COLUMN TYPE, DROP COLUMN, ADD CONSTRAINT, ADD CONSTRAINT CHECK, ALTER COLUMN DROP DEFAULT |
|
DDL |
CREATE INDEX ON TABLE |
As instruções DDL não são sincronizadas nos seguintes cenários:
A instrução contém CASCADE ou RESTRICT
Uma transação contém instruções DML e DDL simultaneamente
Apenas parte das instruções DDL de uma transação está dentro do escopo de sincronização
A instrução DDL é executada a partir de uma sessão criada por
SET session_replication_role = replicaA instrução DDL é executada via chamada de FUNCTION
Nenhum schema está definido na instrução DDL (nesse caso, o schema public é usado conforme
SHOW search_path)A instrução DDL contém IF NOT EXISTS
Permissões de conta de banco de dados
|
Banco de dados |
Permissão necessária |
Como criar e conceder |
|
Cluster de origem PolarDB for PostgreSQL (Compatible with Oracle) |
Conta privilegiada |
|
|
Cluster de destino PolarDB for PostgreSQL (Compatible with Oracle) |
Proprietário do banco de dados |
Criar uma conta de banco de dados e Gerenciamento de banco de dados. O proprietário do banco de dados é especificado durante a criação do banco de dados |
Limitações
Revise estas limitações antes de iniciar. Algumas restrições exigem ação no banco de dados de origem antes da configuração do DTS.
Limitações do banco de dados de origem
Largura de banda O servidor que hospeda o banco de dados de origem deve ter largura de banda de saída suficiente. Largura de banda insuficiente reduz a velocidade de sincronização.
Tabelas sem chave primária ou restrição UNIQUE Ative o recurso Exactly-Once write ao configurar a tarefa. Sem isso, dados duplicados podem aparecer no banco de dados de destino. Para mais informações, consulte Sincronizar tabelas sem chaves primárias e restrições únicas.
Mais de 1.000 tabelas com mapeamento de nomes Se os objetos de sincronização forem tabelas com mapeamento de nomes de tabela ou coluna aplicado, e uma única tarefa exceder 1.000 tabelas, divida as tabelas em várias tarefas ou configure a tarefa para sincronizar todo o banco de dados. Exceder esse limite pode causar um erro de solicitação ao enviar a tarefa.
Retenção de WAL Ative o WAL e defina o período de retenção com base nos tipos de sincronização da sua tarefa:
Apenas sincronização incremental: retenha logs WAL por mais de 24 horas
Sincronização completa e incremental: retenha logs WAL por pelo menos 7 dias. Após a conclusão da sincronização completa, defina o período de retenção para mais de 24 horas
Se o DTS não conseguir obter logs WAL, a tarefa falhará. Em casos extremos, pode ocorrer inconsistência ou perda de dados. Problemas causados por um período de retenção de WAL inferior ao requisito do DTS não são cobertos pelo Acordo de Nível de Serviço (SLA).
Transações de longa duração Transações de longa duração fazem com que o WAL acumule até que essas transações sejam confirmadas. Isso pode esgotar o espaço em disco no banco de dados de origem durante a sincronização incremental.
Operações DDL durante a sincronização Não execute operações DDL que alterem a estrutura do banco de dados ou da tabela durante a sincronização de schema ou a sincronização completa de dados. Essa ação causa falha na tarefa.
Gravações durante sincronização apenas completa Não grave novos dados no cluster de origem se a tarefa executar apenas a sincronização completa de dados. Isso resultará em inconsistência de dados. Para manter a consistência em tempo real, inclua a sincronização de schema, a sincronização completa de dados e a sincronização incremental de dados na tarefa.
Único dado incremental maior que 256 MB Se um único dado exceder 256 MB após uma alteração incremental, a instância de sincronização poderá falhar e não será recuperável. Reconfigure a instância de sincronização.
Outras limitações
Um banco de dados por tarefa Uma única tarefa de sincronização pode sincronizar apenas um banco de dados. Configure uma tarefa separada para cada banco de dados adicional.
Objetos não suportados O DTS não oferece suporte a tabelas de extensão TimescaleDB, tabelas com herança entre schemas ou tabelas com índices únicos baseados em expressões. Schemas criados pela instalação de plugins não podem ser sincronizados e não aparecem no console durante a configuração da tarefa.
Campos do tipo SERIAL Se uma tabela contiver um campo de tipo de dados SERIAL, o banco de dados de origem cria automaticamente uma sequence para esse campo. Ao configurar os Source Objects, se você selecionar Schema Synchronization como tipo de sincronização, selecione também Sequence ou sincronize todo o schema. Caso contrário, a instância de sincronização poderá falhar.
Requisito REPLICA IDENTITY FULL Execute o seguinte comando em cada tabela a ser sincronizada no banco de dados de origem antes de gravar dados nela. Isso garante a consistência dos dados. Não bloqueie as tabelas durante a execução deste comando para evitar deadlocks.
ALTER TABLE schema.table REPLICA IDENTITY FULL;
Substitua schema e table pelos nomes reais do schema e da tabela. Execute este comando fora do horário de pico.
Este comando é necessário nos seguintes cenários:
Na primeira execução da instância
Você selecionou granularidade no nível de schema para seleção de objetos, e uma nova tabela é criada no schema ou uma tabela existente é reconstruída usando o comando RENAME
Você usa o recurso de modificar objetos de sincronização
Se você ignorar os itens de pré-verificação relacionados, o DTS executa automaticamente este comando durante a inicialização da instância.
Tabelas temporárias no banco de dados de origem O DTS cria as seguintes tabelas temporárias no banco de dados de origem para obter instruções DDL, estruturas de tabelas incrementais e informações de heartbeat. Não exclua essas tabelas durante a sincronização — excluí-las torna a tarefa anormal. O DTS exclui automaticamente essas tabelas após a liberação da instância:
public.dts_pg_class, public.dts_pg_attribute, public.dts_pg_type, public.dts_pg_enum, public.dts_postgres_heartbeat, public.dts_ddl_command, public.dts_args_session, public.aliyun_dts_instance
Tabela de heartbeat O DTS adiciona uma tabela de heartbeat chamada dts_postgres_heartbeat ao banco de dados de origem para manter métricas precisas de latência de sincronização incremental.
Slot de replicação O DTS cria um slot de replicação com o prefixo dts_sync_ no banco de dados de origem. Este slot retém logs incrementais dos últimos 15 minutos. Quando a tarefa de sincronização falha ou a instância é liberada, o DTS tenta limpar o slot automaticamente.
Se você alterar a senha da conta do banco de dados de origem ou remover o endereço IP do DTS da lista de permissões do banco de dados de origem durante a sincronização, o slot de replicação não poderá ser limpo automaticamente. Limpe manualmente o slot de replicação no banco de dados de origem para evitar acúmulo de espaço em disco, o que pode tornar o banco de dados de origem indisponível. Se ocorrer um failover no banco de dados de origem, faça login no banco de dados secundário para limpar manualmente o slot.

Sequences após alternância de negócios Após alternar seus negócios para a instância de destino, as sequences não continuam a partir do valor máximo na origem. Atualize o valor da sequence no banco de dados de destino antes da alternância de negócios. Para mais informações, consulte Atualizar o valor da sequence no banco de dados de destino.
Impacto de desempenho da sincronização completa A sincronização completa de dados executa operações INSERT simultâneas, o que consome recursos de leitura e gravação nos bancos de dados de origem e de destino e causa fragmentação de tabela no destino. O espaço da tabela de destino será maior que o da origem após a sincronização completa. Avalie o desempenho antes de sincronizar e execute fora do horário de pico, quando a carga de CPU de ambos os bancos de dados estiver abaixo de 30%.
Precisão FLOAT e DOUBLE O DTS lê valores FLOAT e DOUBLE usando ROUND(COLUMN, PRECISION). Se nenhuma precisão explícita for definida, o DTS usa uma precisão padrão de 38 para FLOAT e 308 para DOUBLE. Verifique se essa precisão atende aos seus requisitos de negócios.
Recuperação automática do DTS O DTS tenta recuperar automaticamente tarefas com falha por até sete dias. Antes de alternar seus negócios para a instância de destino, encerre ou libere a tarefa, ou use o comando REVOKE para revogar as permissões de gravação da conta do DTS na instância de destino. Sem essa etapa, a recuperação automática pode fazer com que os dados de origem substituam os dados do destino após a alternância.
Chaves estrangeiras, triggers e event triggers Para tarefas de sincronização completa ou incremental envolvendo tabelas com chaves estrangeiras, triggers ou event triggers, o DTS define temporariamente session_replication_role como replica no nível da sessão:
Se a conta do banco de dados de destino for uma conta privilegiada ou tiver permissões de superusuário, o DTS define isso automaticamente
Se a conta de destino não tiver essas permissões, defina manualmente
session_replication_rolecomoreplicano banco de dados de destino antes da execução da tarefa
Durante esse período, operações de atualização ou exclusão em cascata no banco de dados de origem podem causar inconsistência de dados. Após a liberação da tarefa do DTS, defina session_replication_role de volta para origin.
Sincronização de schema e chaves estrangeiras Durante a sincronização de schema, o DTS sincroniza chaves estrangeiras da origem para o destino. Durante a sincronização completa e incremental, o DTS desativa temporariamente as verificações de restrição e operações em cascata de chave estrangeira no nível da sessão. Pode ocorrer inconsistência de dados se operações de atualização ou exclusão em cascata forem executadas na origem enquanto a tarefa estiver ativa.
Recuperação de falha de tarefa Se uma tarefa falhar, a equipe de suporte do DTS tentará restaurá-la dentro de oito horas. Durante a restauração, eles podem reiniciar a tarefa ou ajustar parâmetros da tarefa do DTS (não parâmetros do banco de dados). Os parâmetros que podem ser ajustados estão listados em Modificar parâmetros da instância.
Tabelas particionadas Inclua tanto a tabela pai quanto todas as suas partições filhas como objetos de sincronização. Tabelas particionadas do PostgreSQL armazenam dados apenas nas partições filhas, não na tabela pai. Se as partições filhas forem excluídas, seus dados não serão sincronizados, resultando em inconsistência de dados.
Configurar uma tarefa de sincronização unidirecional
Etapa 1: Acessar a lista de tarefas de sincronização de dados
Acesse a lista de tarefas de sincronização da sua região de destino usando um dos seguintes consoles.
Console do DTS
Faça login no console do DTS.console do 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.
Console do DMS
As etapas reais podem variar com base no modo e layout do console do DMS. Para mais informações, consulte
e
Personalizar o layout e o estilo do console do DMS
.
Faça login no console do DMS.console do DMS
Na barra de menu superior, escolha Data + AI > DTS (DTS) > Data Synchronization.
À direita de Data Synchronization Tasks, selecione a região da instância de sincronização.
Etapa 2: Criar uma tarefa e configurar conexões de banco de dados
Clique em Create Task.
Configure os bancos de dados de origem e de destino usando os seguintes parâmetros.
Configurações da tarefa
|
Parâmetro |
Descrição |
|
Task Name |
O DTS gera um nome automaticamente. Especifique um nome descritivo para facilitar a identificação. O nome não precisa ser exclusivo |
Banco de dados de origem
|
Parâmetro |
Descrição |
|
Select Existing Connection |
Selecione uma instância de banco de dados registrada na lista suspensa para preencher automaticamente os detalhes da conexão. Se você não registrou a instância, configure os campos abaixo manualmente. No console do DMS, este campo é rotulado como Select a DMS database instance |
|
Database Type |
Selecione PolarDB (Compatible with Oracle) |
|
Access Method |
Selecione Alibaba Cloud Instance |
|
Instance Region |
Selecione a região onde o cluster de origem reside |
|
Replicate Data Across Alibaba Cloud Accounts |
Selecione No se o cluster de origem pertencer à conta atual da Alibaba Cloud |
|
Instance ID |
Selecione o ID do cluster de origem |
|
Database Name |
Insira o nome do banco de dados de origem que contém os objetos a serem sincronizados |
|
Database Account |
Insira a conta do banco de dados. Para requisitos de permissão, consulte Permissões de conta de banco de dados |
|
Database Password |
Insira a senha da conta do banco de dados |
Banco de dados de destino
|
Parâmetro |
Descrição |
|
Select Existing Connection |
Selecione uma instância de banco de dados registrada na lista suspensa. Se você não registrou a instância, configure os campos abaixo manualmente. No console do DMS, este campo é rotulado como Select a DMS database instance |
|
Database Type |
Selecione PolarDB (Compatible with Oracle) |
|
Access Method |
Selecione Alibaba Cloud Instance |
|
Instance Region |
Selecione a região onde o cluster de destino reside |
|
Instance ID |
Selecione o ID do cluster de destino |
|
Database Name |
Insira o nome do banco de dados de destino que receberá os dados |
|
Database Account |
Insira a conta do banco de dados. Para requisitos de permissão, consulte Permissões de conta de banco de dados |
|
Database Password |
Insira a senha da conta do banco de dados |
Clique em Test Connectivity and Proceed.
Adicione os blocos CIDR dos servidores DTS às configurações de segurança dos bancos de dados de origem e de destino, automaticamente ou manualmente, para permitir o acesso. Para mais informações, consulte Adicionar a lista de permissões de endereços IP dos servidores DTS .
Se a origem ou o destino for um banco de dados autogerenciado (ou seja, Access Method não é Alibaba Cloud Instance ), clique também em Test Connectivity na caixa de diálogo CIDR Blocks of DTS Servers .
Etapa 3: Configurar objetos de sincronização
Na página Configure Objects, configure as seguintes definições.
|
Parâmetro |
Descrição |
|
Synchronization Types |
O DTS sempre seleciona Incremental Data Synchronization. Por padrão, selecione também Schema Synchronization e Full Data Synchronization. Após a aprovação da pré-verificação, o DTS inicializa o cluster de destino com os dados completos dos objetos de origem selecionados como linha de base para a sincronização incremental |
|
Synchronization Topology |
Selecione One-way Synchronization |
|
Processing Mode of Conflicting Tables |
Precheck and Report Errors (padrão): verifica se há tabelas com os mesmos nomes no banco de dados de destino. Se alguma for encontrada, um erro é relatado durante a pré-verificação e a tarefa não inicia. Para resolver o conflito sem excluir ou renomear a tabela, mapeie-a para um nome diferente no destino. Para mais informações, consulte Mapeamento de nomes de colunas de tabelas de banco de dados. Ignore Errors and Proceed: ignora a verificação de nomes iguais. Use com cautela — selecionar esta opção pode causar inconsistência de dados: durante a sincronização completa, o DTS retém o registro de destino e ignora o registro de origem quando os valores de chave primária ou única entram em conflito; durante a sincronização incremental, o DTS substitui o registro de destino pelo registro de origem. Se os schemas das tabelas forem inconsistentes, a inicialização de dados pode falhar. Isso pode resultar em sincronização apenas parcial dos dados ou falha completa da sincronização. Use com cautela |
|
Capitalization of Object Names in Destination Instance |
Configura a política de maiúsculas/minúsculas para nomes de bancos de dados, tabelas e colunas no destino. O padrão é DTS default policy. Para mais informações, consulte Política de maiúsculas/minúsculas para nomes de objetos de destino |
|
Source Objects |
Na caixa Source Objects, clique nos objetos para selecioná-los e, em seguida, clique em |
|
Selected Objects |
Para renomear um único objeto no destino, clique com o botão direito nele na caixa Selected Objects. Para mais informações, consulte Mapear um único nome de objeto. Para renomear vários objetos, clique em Batch Edit no canto superior direito da caixa. Para mais informações, consulte Mapear vários nomes de objetos em massa. Para selecionar operações SQL específicas para um banco de dados ou tabela, clique com o botão direito no objeto e selecione as operações na caixa de diálogo. Para operações suportadas, consulte Operações SQL suportadas. Para filtrar dados usando uma cláusula WHERE, clique com o botão direito em uma tabela e especifique as condições de filtro. Para mais informações, consulte Definir condições de filtro. Se você usar mapeamento de nomes de objetos, objetos dependentes podem falhar na sincronização |
Clique em Next: Advanced Settings e configure as seguintes opções.
| Parâmetro | Descrição |
|---|---|
| Dedicated Cluster for Task Scheduling | Por padrão, o DTS usa um cluster compartilhado. Para maior estabilidade, adquira um cluster dedicado. Para mais informações, consulte O que é um cluster dedicado do DTS? |
| Retry Time for Failed Connections | Se a conexão com o banco de dados de origem ou de destino falhar após o início da tarefa, o DTS começa a tentar novamente imediatamente. A duração padrão de nova tentativa é de 720 minutos. Defina um valor entre 10 e 1.440 minutos; recomenda-se 30 minutos ou mais. Se a conexão for restaurada dentro desse período, a tarefa será retomada automaticamente. Nota
Se várias instâncias do DTS compartilharem uma origem ou destino, o DTS usará a menor duração de nova tentativa configurada entre todas as instâncias. O DTS cobra pelo tempo de execução da tarefa durante as novas tentativas de conexão |
| Retry Time for Other Issues | Se ocorrer um problema que não seja de conexão (como um erro de execução DDL ou DML), o DTS tenta novamente imediatamente. O padrão é 10 minutos. Defina um valor entre 1 e 1.440 minutos; recomenda-se 10 minutos ou mais. Este valor deve ser menor que Retry Time for Failed Connections |
| Enable Throttling for Full Data Synchronization | Limita a taxa de sincronização completa para reduzir a pressão no banco de dados de destino. Defina Queries per second (QPS) to the source database, RPS of Full Data Migration e Data migration speed for full migration (MB/s). Disponível apenas se Full Data Synchronization estiver selecionado. Você também pode ajustar essa taxa enquanto a instância está em execução |
| Enable Throttling for Incremental Data Synchronization | Limita a taxa de sincronização incremental. Defina RPS of Incremental Data Synchronization e Data synchronization speed for incremental synchronization (MB/s) |
| Environment Tag | Selecione uma tag de ambiente para identificar a instância. Nenhuma seleção é necessária para esta tarefa |
| Configure ETL | Escolha se deseja ativar o recurso de extração, transformação e carga (ETL). Selecione Yesalert notifications e insira instruções de processamento de dados no editor de código, ou selecione No para desativá-lo. Para mais informações, consulte O que é ETL? e Configurar ETL em uma tarefa de migração ou sincronização de dados |
| Monitoring and Alerting | Selecione Yes para receber notificações quando a sincronização falhar ou a latência exceder o limiar. Defina o limiar de alerta e os contatos. Para mais informações, consulte Configurar monitoramento e alertas durante a configuração da tarefa. Selecione No para pular alertas |
Clique em Next: Data Validation para configurar uma tarefa de validação de dados. Para mais informações, consulte Configurar validação de dados.
Etapa 4: Salvar configurações e executar a pré-verificação
Para visualizar os parâmetros da API para esta tarefa, passe o mouse sobre Next: Save Task Settings and Precheck e clique em Preview OpenAPI parameters na dica de ferramenta.
Clique em Next: Save Task Settings and Precheck para salvar e iniciar a pré-verificação.
O DTS realiza uma pré-verificação antes do início da tarefa. A tarefa só inicia após a aprovação da pré-verificação.
Se a pré-verificação falhar, clique em View Details ao lado do item com falha, corrija o problema conforme solicitado e execute a pré-verificação novamente.
Se a pré-verificação gerar avisos:
Para avisos não ignoráveis, clique em View Details , corrija o problema e execute a pré-verificação novamente.
Para avisos ignoráveis, clique em Confirm Alert Details > Ignore > OK e, em seguida, clique em Precheck Again . Ignorar avisos de pré-verificação pode levar a inconsistências de dados. Prossiga com cautela.
Etapa 5: Adquirir a instância
Quando a Success Rate atingir 100%, clique em Next: Purchase Instance.
Na página Purchase, selecione o método de faturamento e a classe da instância.
|
Parâmetro |
Descrição |
|
Billing Method |
Subscription: pagamento antecipado por uma duração fixa. Custo-benefício para tarefas contínuas e de longo prazo. Pagamento conforme o uso: faturamento horário pelo uso real. Adequado para tarefas de curto prazo ou de teste; libere a instância a qualquer momento para parar o faturamento |
|
Resource Group Settings |
O grupo de recursos para a instância. O padrão é default resource group. Para mais informações, consulte O que é Resource Management? |
|
Instance Class |
Determina o nível de desempenho da sincronização. Selecione uma classe com base nos seus requisitos de throughput. Para mais informações, consulte Especificações de link de sincronização de dados |
|
Subscription Duration |
(Apenas faturamento por assinatura) Opções mensais: 1–9 meses. Opções anuais: 1, 2, 3 ou 5 anos |
Marque a caixa de seleção Data Transmission Service (Pay-as-you-go) Service Terms.
Clique em Buy and Start e, em seguida, clique em OK na caixa de diálogo de confirmação.
Monitore o progresso da tarefa na página de sincronização de dados.