Utilize o Data Transmission Service (DTS) para migrar dados de um cluster PolarDB for PostgreSQL para uma instância AnalyticDB for PostgreSQL. O DTS oferece suporte a migração de schema, migração completa de dados e migração incremental de dados, proporcionando flexibilidade para executar uma migração em lote única ou uma migração contínua com tempo de inatividade reduzido.
Escolher uma estratégia de migração
Selecione a estratégia de migração adequada ao seu cenário antes de configurar a tarefa.
|
Estratégia |
Funcionamento |
Quando usar |
|
Migração de schema + migração completa de dados |
Copia a estrutura da tabela e todos os dados existentes uma única vez e, em seguida, interrompe o processo |
Migração offline com uma janela de manutenção que permite pausar gravações na source |
|
Migração de schema + migração completa de dados + migração incremental de dados |
Copia os dados existentes e replica as alterações continuamente |
Migração online com tempo de inatividade mínimo |
Caso selecione apenas a migração completa de dados (sem migração incremental), não grave novos dados na instância de source durante a migração. Caso contrário, ocorrerá inconsistência de dados entre os bancos de dados de source e de destino.
Pré-requisitos
Antes de começar, certifique-se de que você possui:
Uma instância de destino AnalyticDB for PostgreSQL com mais espaço em disco do que a instância de source PolarDB for PostgreSQL. Consulte {{XREF_0}}.
O parâmetro
wal_leveldo cluster de source PolarDB for PostgreSQL definido comological. Consulte {{XREF_1}}.Um banco de dados criado na instância de destino AnalyticDB for PostgreSQL para receber os dados migrados. Consulte {{XREF_2}}.
Faturamento
|
Tipo de migração |
Taxa de configuração de link |
Taxa de transferência de dados |
|
Migração de schema e migração completa de dados |
Gratuita |
Gratuita |
|
Migração incremental de dados |
Cobrada. Consulte {{XREF_3}}. |
— |
Permissões de conta de banco de dados
|
Banco de dados |
Permissões necessárias |
Como conceder |
|
Cluster de source PolarDB for PostgreSQL |
Conta privilegiada |
{{XREF_4}} |
|
Instância de destino AnalyticDB for PostgreSQL |
Permissões de leitura e gravação no banco de dados de destino ou permissão RDS_SUPERUSER |
{{XREF_5}} e {{XREF_6}} |
Operações SQL suportadas para migração incremental
Operações DML
|
Operação |
Comportamento no destino |
|
INSERT |
Replicado conforme o original |
|
UPDATE |
Convertido para REPLACE INTO. Se a chave primária for atualizada, será convertido para DELETE + INSERT. |
|
DELETE |
Replicado conforme o original |
Operações DDL
A migração de DDL está disponível apenas em tarefas criadas após 1º de outubro de 2020.
Para tarefas criadas antes de 12 de maio de 2023, crie um trigger e uma função no banco de dados de source para capturar informações de DDL antes de configurar a tarefa. Consulte Usar triggers e funções para implementar migração incremental de DDL para PostgreSQL.
Operações DDL suportadas (requer uma conta privilegiada no banco de dados de source):
CREATE TABLE e DROP TABLE
ALTER TABLE, incluindo: RENAME TABLE, ADD COLUMN, ADD COLUMN DEFAULT, ALTER COLUMN TYPE, DROP COLUMN, ADD CONSTRAINT, ADD CONSTRAINT CHECK e ALTER COLUMN DROP DEFAULT
TRUNCATE TABLE (a versão do PostgreSQL de source deve ser 11 ou posterior)
CREATE INDEX ON TABLE
Cenários de DDL não suportados:
Palavras-chave adicionais, como CASCADE ou RESTRICT, em instruções DDL
Instruções DDL em sessões onde
SET session_replication_role = replicaé executadoInstruções DDL executadas chamando uma FUNCTION ou outros métodos
Lotes que contêm instruções DML e DDL simultaneamente (o DDL não é migrado)
Instruções DDL para objetos não incluídos no escopo da migração
Dados do tipo bit não são suportados durante a migração incremental de dados.
Limitações
Revise as limitações a seguir antes de configurar a tarefa de migração.
Limitações do banco de dados de source
As tabelas a serem migradas devem ter uma chave primária ou um índice único não nulo.
Se o banco de dados de source tiver transações de longa duração e a tarefa incluir migração incremental, o write-ahead log (WAL) gerado antes do commit dessas transações pode acumular e esgotar o espaço em disco no banco de dados de source.
-
O cluster PolarDB for PostgreSQL deve suportar e ter ativado o Failover de Slot de Replicação Lógica.
ImportanteSe o cluster de source não suportar Failover de Slot de Replicação Lógica — por exemplo, se o Database Engine for PostgreSQL 14 — um failover de alta disponibilidade (HA) na source poderá causar falha irrecuperável na tarefa de migração.
Não execute operações DDL que alterem a estrutura do banco de dados ou da tabela durante a migração de schema ou a migração completa de dados. Caso contrário, a tarefa de migração falhará.
Um único dado que exceda 256 MB após uma alteração incremental causará falha irrecuperável na tarefa de migração. Nesse caso, reconfigure a tarefa de migração.
Limitações de escopo
Uma única tarefa de migração migra apenas um banco de dados. Configure uma tarefa separada para cada banco de dados adicional.
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 migrados e não aparecem no console durante a configuração da tarefa.
O DTS não migra os seguintes tipos de objetos: DATATYPE, SEQUENCE, INDEX, PROCEDURE, FUNCTION, VIEW, OPERATOR, DEFAULT_CONSTRAINT, UK, PK, RULE, DOMAIN, AGGREGATE, EXTENSION, FK e TRIGGER.
As tabelas de destino não suportam tabelas AO (append-optimized).
Para tabelas particionadas, inclua tanto a tabela pai quanto todas as suas tabelas filhas como objetos de migração. No PostgreSQL, a tabela pai não armazena dados diretamente — todos os dados residem nas tabelas filhas. A omissão das tabelas filhas causa inconsistência de dados.
Limitações de consistência de dados
Durante a migração de schema, o DTS migra chaves estrangeiras da source para o destino.
Durante a migração completa e a migração incremental de dados, o DTS desativa temporariamente as verificações de restrições e as operações em cascata de chaves estrangeiras no nível da sessão. Se ocorrerem operações de atualização ou exclusão em cascata na source enquanto a tarefa estiver em execução, poderá haver inconsistência de dados.
A migração completa de dados utiliza operações INSERT concorrentes, o que causa fragmentação de tabela no destino. Como resultado, o espaço da tabela de destino fica maior do que o da source após a migração completa.
Se uma tabela possuir chave primária, a coluna de chave primária no destino deve corresponder à da source. Se a tabela não tiver chave primária, a coluna de chave primária no destino deve corresponder à chave de distribuição.
A chave única (incluindo a coluna de chave primária) da tabela de destino deve conter todas as colunas da chave de distribuição.
Se os schemas das tabelas de source e de destino forem inconsistentes, ou se você utilizar mapeamento de colunas para uma migração de tabela não completa, os dados das colunas que existem apenas na source serão perdidos.
O DTS valida o conteúdo dos dados, mas não valida metadados como sequences. Valide os metadados separadamente após a migração.
Requisitos para migração incremental
Antes de gravar dados no banco de dados de source para migração incremental, execute o seguinte comando em cada tabela a ser migrada:
do language plpgsql $$
declare
nsp name;
rel name;
val int8;
begin
for nsp,rel in select nspname,relname from pg_class t2 , pg_namespace t3 where t2.relnamespace=t3.oid and t2.relkind='S'
loop
execute format($_$select last_value from %I.%I$_$, nsp, rel) into val;
raise notice '%',
format($_$select setval('%I.%I'::regclass, %s);$_$, nsp, rel, val+1);
end loop;
end;
$$;
Substitua schema e table pelo nome real do schema e da tabela. Execute este comando fora do horário de pico e evite operações de bloqueio de tabela durante sua execução.
Execute este comando nos seguintes cenários:
Quando a tarefa de migração for executada pela primeira vez.
Quando o objeto de migração for um schema e uma nova tabela for criada nesse schema ou uma tabela existente for reconstruída usando RENAME.
Se você ignorar o item de pré-verificação relacionado, o DTS executará automaticamente este comando durante a inicialização da instância.
Tratamento de sequences pós-migração
Após alternar seus negócios para a instância de destino, as sequences não iniciam automaticamente a partir do valor máximo das sequences correspondentes na source. Antes da alternância, consulte os valores máximos das sequences no banco de dados de source e defina-os como valores iniciais no destino.
Execute o seguinte comando no banco de dados de source para obter todos os valores das sequences:
do language plpgsql $$
declare
nsp name;
rel name;
val int8;
begin
for nsp,rel in select nspname,relname from pg_class t2 , pg_namespace t3 where t2.relnamespace=t3.oid and t2.relkind='S'
loop
execute format($_$select last_value from %I.%I$_$, nsp, rel) into val;
raise notice '%',
format($_$select setval('%I.%I'::regclass, %s);$_$, nsp, rel, val+1);
end loop;
end;
$$;
A saída contém instruções SET para todas as sequences no banco de dados de source. Execute apenas as instruções relevantes para sua migração no banco de dados de destino.
Gerenciamento de slots de replicação
Durante a migração incremental, o DTS cria um slot de replicação com o prefixo dts_sync_ no banco de dados de source para replicar logs incrementais dos últimos 15 minutos. Quando uma tarefa de migração falha ou a instância é liberada, o DTS tenta limpar o slot de replicação automaticamente.
A limpeza manual é necessária nos seguintes casos:
Você alterou a senha da conta do banco de dados de source durante a migração.
Você removeu o endereço IP do DTS da lista de permissões de endereços IP do banco de dados de source durante a migração.
Ocorreu um failover no banco de dados de source — faça login no banco de dados secundário para limpar o slot manualmente.
Se o slot de replicação não for limpo, ele acumulará e consumirá espaço em disco continuamente, o que pode tornar o banco de dados de source indisponível.
Tabelas temporárias
O DTS cria as seguintes tabelas temporárias no banco de dados de source para obter instruções DDL, informações incrementais de estrutura de tabela e dados de heartbeat. Não exclua essas tabelas durante a migração — elas são excluídas automaticamente após a liberação da instância do DTS.
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 e public.aliyun_dts_instance
Configurar uma tarefa de migração
Etapa 1: Abrir a lista de tarefas de migração
Abra a lista de tarefas de migração usando um dos métodos a seguir.
Pelo console do DTS:
Faça login no console do DTS.
No painel de navegação à esquerda, clique em Data Migration.
No canto superior esquerdo, selecione a região onde a instância de migração está localizada.
Pelo console do DMS:
As etapas reais podem variar com base no modo e layout do seu console do DMS. Consulte Console do modo simples e Personalizar o layout e o estilo do console do DMS .
Faça login no console do DMS.
Na barra de menu superior, escolha Data + AI > Data Transmission (DTS) > Data Migration.
À direita de Data Migration Tasks, selecione a região onde a instância de migração está localizada.
Etapa 2: Configurar bancos de dados de source e de destino
Configure os seguintes parâmetros na página de conexão dos bancos de dados de source e de destino.
| Categoria | Parâmetro | Valor ou descrição |
|---|---|---|
| — | Task Name | O DTS gera um nome automaticamente. Insira um nome descritivo para facilitar a identificação. O nome não precisa ser único. |
| Source Database | Select Existing Connection | Selecione uma instância de banco de dados já registrada no sistema na lista suspensa para preencher automaticamente os campos de conexão. Se a instância não estiver registrada, preencha os campos manualmente. No console do DMS, este campo chama-se Select a DMS database instance. |
| Database Type | PolarDB for PostgreSQL | |
| Access Method | Alibaba Cloud Instance | |
| Instance Region | Região onde reside o cluster de source PolarDB for PostgreSQL | |
| Replicate Data Across Alibaba Cloud Accounts | No (migração na mesma conta) | |
| Instance ID | ID do cluster de source PolarDB for PostgreSQL | |
| Database Name | Nome do banco de dados que contém os objetos a serem migrados | |
| Database Account | Conta do cluster de source PolarDB for PostgreSQL. Consulte {{XREF_7}}. | |
| Database Password | Senha da conta do banco de dados | |
| Destination Database | Select Existing Connection | Selecione uma instância de banco de dados registrada ou preencha os campos manualmente. No console do DMS, este campo chama-se Select a DMS database instance. |
| Database Type | AnalyticDB for PostgreSQL | |
| Access Method | Alibaba Cloud Instance | |
| Instance Region | Região onde reside a instância de destino AnalyticDB for PostgreSQL | |
| Instance ID | ID da instância de destino AnalyticDB for PostgreSQL | |
| Database Name | Nome do banco de dados na instância de destino que receberá os dados migrados | |
| Database Account | Conta da instância de destino AnalyticDB for PostgreSQL. Consulte {{XREF_8}}. | |
| Database Password | Senha da conta do banco de dados |
Após concluir a configuração, clique em Test Connectivity and Proceed na parte inferior da página.
Certifique-se de que os intervalos de endereços IP do service DTS foram adicionados às configurações de segurança (lista de permissões) dos bancos de dados de source e de destino. Consulte Adicionar endereços IP de servidores DTS a uma lista de permissões .
Etapa 3: Configurar objetos de migração
Na página Configure Objects, defina os seguintes parâmetros.
|
Parâmetro |
Descrição |
|
Migration Types |
Selecione os tipos de migração adequados ao seu cenário. Consulte Escolher uma estratégia de migração. Se você não selecionar Schema Migration, certifique-se de que o destino já possui o banco de dados e as tabelas alvo. |
|
DDL and DML Operations to Be Synchronized |
Selecione as operações SQL para migração incremental no nível da instância. Para configurar no nível da tabela, clique com o botão direito em um objeto de migração na caixa Selected Objects e selecione as operações na caixa de diálogo. Consulte {{XREF_9}}. |
|
Processing Mode of Conflicting Tables |
Precheck and Report Errors: Verifica se há tabelas com o mesmo nome no destino. Relata um erro e interrompe a tarefa se um conflito for encontrado. Para resolver conflitos de nomenclatura sem excluir a tabela de destino, use o mapeamento de nomes de objetos. Ignore Errors and Proceed: Ignora a verificação de conflitos. Durante a migração completa, os registros existentes no destino são mantidos. Durante a migração incremental, os registros da source sobrescrevem os registros do destino. Se os schemas das tabelas forem inconsistentes, a migração poderá falhar ou resultar em dados parciais. Use com cautela. |
|
Storage Engine Type |
Mecanismo de armazenamento para as tabelas de destino. Padrão: Beam. Disponível apenas quando a versão do kernel do AnalyticDB for PostgreSQL de destino é v7.0.6.6 ou posterior e Schema Migration está selecionado. |
|
Capitalization of Object Names in Destination Instance |
Política de distinção entre maiúsculas e minúsculas para nomes de objetos migrados (bancos de dados, tabelas, colunas). Padrão: DTS default policy. Consulte Distinção entre maiúsculas e minúsculas de nomes de objetos no banco de dados de destino. |
|
Source Objects |
Clique nos objetos a serem migrados na caixa Source Objects e, em seguida, clique na seta para a direita para movê-los para a caixa Selected Objects. Os objetos de migração são selecionados no nível da tabela. |
|
Selected Objects |
Para renomear um único objeto no destino, clique com o botão direito nele na caixa Selected Objects. Consulte Mapeamento individual de colunas de tabela. Para renomear vários objetos de uma só vez, clique em Batch Edit no canto superior direito. Consulte Mapear vários nomes de objetos simultaneamente. Para filtrar linhas com uma cláusula WHERE, clique com o botão direito na tabela e defina a condição. Consulte {{XREF_10}}. |
O uso de mapeamento de nomes de objetos pode causar falha na migração de outros objetos que dependem do objeto renomeado.
Etapa 4: Configurar definições avançadas
Clique em Next: Advanced Settings para configurar os seguintes parâmetros.
| Parâmetro | Descrição |
|---|---|
| Dedicated Cluster for Task Scheduling | Por padrão, o DTS agenda tarefas em um cluster compartilhado. Para um desempenho mais estável, adquira um cluster dedicado para executar tarefas de migração. |
| Retry Time for Failed Connections | Duração durante a qual o DTS tenta reconectar se o banco de dados de source ou de destino estiver inacessível após o início da tarefa. Padrão: 720 minutos. Intervalo: 10–1440 minutos. Defina como mais de 30 minutos. Se o DTS reconectar dentro do período de nova tentativa, a tarefa será retomada automaticamente; caso contrário, a tarefa falhará. Nota
Para várias instâncias do DTS compartilhando a mesma source ou destino, o tempo de nova tentativa é determinado pela tarefa criada mais recentemente. Haverá cobrança durante o período de nova tentativa. |
| Retry Time for Other Issues | Duração durante a qual o DTS tenta novamente se ocorrer um erro que não seja de conectividade (como uma exceção DDL ou DML). Padrão: 10 minutos. Intervalo: 1–1440 minutos. Defina como mais de 10 minutos. Deve ser menor que Retry Time for Failed Connections. |
| Enable Throttling for Full Data Migration | Limite a carga de leitura/gravação na source e no destino durante a migração completa definindo 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 quando Full Data Migration estiver selecionado. O limitador também pode ser ajustado após o início da tarefa. |
| Enable Throttling for Incremental Data Migration | Limite a carga durante a migração incremental definindo RPS of Incremental Data Migration e Data migration speed for incremental migration (MB/s). Disponível apenas quando Incremental Data Migration estiver selecionado. O limitador também pode ser ajustado após o início da tarefa. |
| Environment Tag | Identifique a instância com um rótulo de ambiente para facilitar a identificação. Opcional. |
| Configure ETL | Ative o processamento de extração, transformação e carga (ETL). Selecione Yes para inserir instruções de processamento de dados no editor de código. Consulte Configurar ETL em uma tarefa de migração ou sincronização de dados. Selecione No para pular. Consulte O que é ETL? |
| Monitoring and Alerting | Selecione Yes para configurar um limiar de alerta e destinatários de notificação. O DTS envia alertas se uma migração falhar ou se a latência exceder o limiar. Selecione No para pular. |
Etapa 5: Configurar validação de dados
Clique em Next: Data Validation para configurar uma tarefa de validação de dados. Consulte Configurar validação de dados.
Etapa 6: Configurar campos da tabela de destino (opcional)
Clique em Next: Configure Database and Table Fields para definir o Type, a Primary Key Column e a Distribution Key para as tabelas de destino no AnalyticDB for PostgreSQL.
Esta etapa está disponível apenas quando Schema Migration estiver selecionado. Defina Definition Status como All para visualizar e editar todas as tabelas.
Primary Key Column: Selecione uma ou mais colunas. Várias colunas formam uma chave primária composta.
Distribution Key: Selecione uma ou mais colunas da Primary Key Column. Consulte {{XREF_11}} e {{XREF_12}}.
Etapa 7: Salvar configurações e executar pré-verificação
Clique em Next: Save Task Settings and Precheck.
Para visualizar os parâmetros da API para esta configuração, passe o mouse sobre o botão Next: Save Task Settings and Precheck e clique em Preview OpenAPI parameters .
Antes do início da tarefa de migração, o DTS realiza uma pré-verificação. A tarefa só começa após passar na pré-verificação.
Se a pré-verificação falhar, clique em View Details ao lado do item com falha, corrija o problema e clique em Precheck Again.
Se aparecer um aviso:
Para avisos que não podem ser ignorados, corrija o problema subjacente e execute a pré-verificação novamente.
Para avisos que podem ser ignorados, clique em Confirm Alert Details > Ignore > OK > Precheck Again para prosseguir. Ignorar avisos pode causar inconsistência de dados.
Etapa 8: Adquirir a instância
Quando a Success Rate atingir 100%, clique em Next: Purchase Instance.
-
Na página Purchase, defina os seguintes parâmetros.
Parâmetro
Descrição
Resource Group Settings
Grupo de recursos para a instância. Padrão: grupo de recursos padrão. Consulte O que é Resource Management?
Instance Class
Especificação do link de migração que determina a velocidade da migração. Consulte Especificações de link de migração de dados.
Leia e selecione 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.
Verificar status da migração
Após o início da tarefa, monitore seu progresso na página de lista Data Migration Tasks.
Apenas migração completa: A tarefa para automaticamente quando a migração completa é concluída. O Status muda para Completed.
Inclui migração incremental: A tarefa continua em execução após a migração completa. O Status mostra Running durante a migração incremental.
Antes de alternar seus negócios para a instância de destino:
Verifique se os dados estão consistentes entre a source e o destino.
Valide sequences e outros metadados manualmente — o DTS não valida metadados.
Encerre ou libere a tarefa do DTS, ou use o comando
REVOKEpara revogar as permissões de gravação do DTS no destino. Isso impede que a recuperação automática do DTS (que funciona por até 7 dias) sobrescreva os dados de destino.
Se a tarefa falhar, o suporte técnico do DTS tentará a recuperação dentro de 8 horas. Durante a recuperação, a tarefa pode ser reiniciada ou ter seus parâmetros ajustados. Apenas os parâmetros da tarefa do DTS são modificados — os parâmetros do banco de dados permanecem inalterados. Consulte {{XREF_13}} .
Próximos passos
Mapeamento de nomes de objetos — Renomeie objetos durante a migração
Ativar limitador para migração de dados — Ajuste a velocidade da migração após o início da tarefa
Configurar validação de dados — Verifique a consistência dos dados entre source e destino
{{XREF_14}} — Entenda os preços do DTS