O Data Transmission Service (DTS) permite migrar dados de bancos de dados PostgreSQL, como instâncias autogerenciadas ou ApsaraDB RDS for PostgreSQL, para o ApsaraDB for SelectDB, destinado a análises de dados em larga escala. Este tópico detalha todo o fluxo de trabalho de migração, incluindo migração de esquema, migração completa de dados e a migração incremental opcional.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma instância de destino ApsaraDB for SelectDB com espaço de armazenamento superior ao da instância RDS PostgreSQL de origem. Consulte Crie uma instância.
Uma conta de banco de dados privilegiada na instância RDS PostgreSQL de origem que seja proprietária do banco de dados a ser migrado. Consulte Crie uma conta e Crie um banco de dados.
Uma conta de banco de dados na instância SelectDB de destino com as seguintes permissões: Usage_priv, Select_priv, Load_priv, Alter_priv, Create_priv e Drop_priv. Consulte Cluster Permission Management e Basic Permission Management.
Escolher um tipo de migração
O DTS oferece duas estratégias de migração. Use as orientações abaixo para escolher a opção adequada antes de configurar a tarefa.
|
Tipo de migração |
Quando usar |
Faturamento |
|
Migração de esquema + migração completa de dados |
Migração única com tempo de inatividade aceitável. Interrompa as gravações na origem antes de iniciar a migração. |
Gratuito |
|
Migração de esquema + migração completa + migração incremental |
Migração sem tempo de inatividade. O DTS mantém o destino sincronizado enquanto a origem continua recebendo gravações. |
A migração incremental é cobrada. Consulte Billing overview. |
Se você selecionar a migração incremental de dados, não grave novos dados na instância de origem durante o período de migração, pois isso pode causar inconsistência nos dados.
Limitações
Revise todas as limitações aplicáveis ao seu cenário antes de iniciar.
Requisitos 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. Caso contrário, a velocidade de migração de dados será afetada.
-
Tabelas com chaves primárias ou restrições UNIQUE: Garanta que os campos da tabela sejam únicos. Do contrário, poderão existir dados duplicados no banco de dados de destino.
Se a tabela de destino que recebe os dados não for criada pelo DTS (ou seja, Schema Migration não estiver selecionado), garanta que a tabela de destino tenha a mesma chave primária ou restrição UNIQUE não nula da tabela de origem. Caso contrário, dados duplicados podem aparecer no banco de dados de destino.
Tabelas sem chave primária ou restrição UNIQUE: Selecione Schema Migration ao configurar a tarefa e defina o mecanismo da tabela como duplicate.
Nome do banco de dados: O nome do banco de dados não pode conter hífen (-). Por exemplo,
dts-testdatanão é suportado.Quantidade de tabelas: Ao migrar no nível de tabela com mapeamento de nomes de colunas, uma única tarefa suporta no máximo 1.000 tabelas. Para migrações maiores, divida as tabelas em várias tarefas ou migre o banco de dados inteiro.
Operações DDL: Não execute operações DDL no banco de dados de origem durante a migração completa de dados.
Tamanho dos dados: Se uma única linha de dados de alteração incremental exceder 256 MB, a instância de migração falhará e não poderá ser recuperada. Será necessário reconfigurar a instância de migração.
-
Write-Ahead Logging (WAL):
Defina
wal_levelcomological.Para migração apenas incremental: retenha logs WAL por mais de 24 horas.
Para migração completa + incremental: retenha logs WAL por pelo menos 7 dias. É possível alterar o período de retenção de log para mais de 24 horas após a conclusão da migração completa.
ImportanteSe a retenção de logs WAL for inferior à exigida pelo DTS e a tarefa falhar devido à falta de logs, essa situação não será coberta pelo Acordo de Nível de Serviço (SLA) do DTS.
Failover de Slot de Replicação Lógica: A instância RDS PostgreSQL deve suportar e ter o Failover de Slot de Replicação Lógica ativado. Consulte Logical Replication Slot Failover.
Transações de longa duração: Se o banco de dados de origem tiver transações de longa duração e a tarefa incluir migração incremental, os dados WAL acumularão até que a transação seja confirmada. Monitore o espaço em disco da origem para evitar que ele se esgote.
Atualizações de versão principal: Não atualize a versão principal do banco de dados de origem enquanto a instância de migração estiver em execução. Essa ação causa falha permanente na instância.
Requisitos do SelectDB de destino
As tabelas devem usar o mecanismo Unique ou Duplicate. Consulte Data Model para obter orientações.
Se a tabela de destino usar o mecanismo Unique, todas as chaves exclusivas da tabela de destino também devem existir na tabela de origem e estar incluídas nos objetos de migração.
Os nomes de bancos de dados e tabelas devem começar com uma letra. Use o recurso de mapeamento de nomes de objetos para renomear objetos que não atendam a esse requisito.
Nomes de objetos contendo caracteres chineses devem ser renomeados para equivalentes ASCII usando o mapeamento de nomes de objetos. Caso contrário, a tarefa poderá falhar.
Uma instância de migração pode migrar apenas um banco de dados. Para migrar vários bancos de dados, configure uma instância de migração separada para cada um.
Não adicione nós de backend (BE) ao banco de dados SelectDB durante a migração. Se a tarefa falhar devido a isso, reinicie a instância de migração para retomar.
Não crie clusters na instância SelectDB de destino durante a migração. Se a tarefa falhar devido a isso, reinicie a instância de migração para retomar.
O DTS valida o conteúdo dos dados, mas não valida metadados como Sequences. Valide esses metadados manualmente.
Requisitos de migração incremental
-
Execute o seguinte comando em cada tabela a ser migrada antes de gravar dados na origem:
ALTER TABLE schema.table REPLICA IDENTITY FULL;Substitua
schemaetablepelo nome real do esquema e da tabela. Execute este comando fora do horário de pico e não bloqueie as tabelas durante a execução para evitar deadlocks.Se você ignorar o item de pré-verificação relacionado, o DTS executará automaticamente este comando durante a inicialização da instância. Isso se aplica quando a instância é executada pela primeira vez, ou quando a granularidade do objeto de migração está definida como Schema e uma nova tabela é criada ou uma tabela existente é reconstruída usando o comando RENAME.
-
As operações SQL suportadas para migração incremental são:
Tipo de operação
Instruções SQL
DML
INSERT, UPDATE, DELETE
DDL
ADD COLUMN, DROP COLUMN
O DTS converte instruções UPDATE e DELETE em instruções INSERT para tabelas que usam o mecanismo Duplicate.
O DTS não consegue migrar tabelas de extensão TimescaleDB ou tabelas com herança entre esquemas.
Ao migrar tabelas particionadas, inclua tanto a tabela pai quanto todas as tabelas filhas nos objetos de migração. A tabela pai em si não armazena dados, mas excluí-la causa inconsistência de dados.
Para cenários de mesclagem de várias tabelas (várias tabelas de origem para uma tabela de destino), todas as tabelas de origem devem ter esquemas idênticos.
Casos especiais
|
Cenário |
Requisito |
|
A origem é ApsaraDB RDS for PostgreSQL |
Não altere o endpoint ou a zona da instância durante a migração. |
|
A origem é uma instância PostgreSQL autogerenciada |
Um failover primário/secundário causa falha na tarefa de migração de dados. Além disso, certifique-se de que |
|
A origem é Google Cloud Platform Cloud SQL for PostgreSQL |
Use uma conta com permissões |
Comportamento interno do DTS
Durante a migração, o DTS cria os seguintes objetos no banco de dados de origem. Não os exclua — eles são removidos automaticamente quando a instância DTS é liberada:
Tabelas temporárias:
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-
Slot de replicação (prefixo:
dts_sync_): Usado para buscar logs incrementais dos últimos 15 minutos. O DTS limpa esse slot quando a migração falha ou a instância é liberada.Se você alterar a senha da conta do banco de dados de origem ou remover endereços IP do DTS da lista de permissões durante a migração, o slot de replicação não poderá ser limpo automaticamente. Limpe-o manualmente para evitar acúmulo em disco. Se ocorrer um failover primário/secundário, faça login no banco de dados secundário para realizar a limpeza.
Criar uma tarefa de migração
Etapa 1: Acessar a página Data Migration
Use um dos consoles a seguir para acessar a página Data Migration.
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 residirá.
Console do DMS
Nota
As etapas reais podem variar dependendo do modo e layout do console do DMS. Consulte Simple mode e Customize the layout and style of the DMS console.
Faça login no console do DMS
Na barra de navegação superior, passe o ponteiro sobre Data + AI > DTS (DTS) > Data Migration.
Na lista suspensa à direita de Data Migration Tasks, selecione a região onde a instância de migração residirá.
Etapa 2: Configurar bancos de dados de origem e destino
Clique em Create Task para abrir a página de configuração da tarefa e configure os parâmetros a seguir.
Nome da tarefa
|
Parâmetro |
Descrição |
|
Task Name |
O DTS gera um nome automaticamente. Especifique um nome descritivo para identificar a tarefa. O nome não precisa ser único. |
Banco de dados de origem
|
Parâmetro |
Descrição |
|
Select Existing Connection |
Se a instância de origem já estiver registrada no DTS, selecione-a na lista. O DTS preenche os parâmetros restantes automaticamente. Caso contrário, configure os parâmetros abaixo. |
|
Database Type |
Selecione PostgreSQL. |
|
Access Method |
Selecione Alibaba Cloud Instance. |
|
Instance Region |
Selecione a região onde a instância RDS PostgreSQL de origem reside. |
|
Replicate Data Across Alibaba Cloud Accounts |
Selecione No se as instâncias de origem e destino pertencerem à mesma conta Alibaba Cloud. |
|
Instance ID |
Selecione o ID da instância RDS PostgreSQL de origem. |
|
Database Name |
Insira o nome do banco de dados que contém os objetos a serem migrados. |
|
Database Account |
Insira a conta do banco de dados da instância de origem. Consulte Pré-requisitos para ver as permissões necessárias. |
|
Database Password |
Insira a senha da conta do banco de dados. |
Banco de dados de destino
|
Parâmetro |
Descrição |
|
Select Existing Connection |
Se a instância de destino já estiver registrada no DTS, selecione-a na lista. O DTS preenche os parâmetros restantes automaticamente. Caso contrário, configure os parâmetros abaixo. |
|
Database Type |
Selecione SelectDB. |
|
Access Method |
Selecione Alibaba Cloud Instance. |
|
Instance Region |
Selecione a região onde a instância SelectDB de destino reside. |
|
Replicate Data Across Alibaba Cloud Accounts |
Selecione No se ambas as instâncias pertencerem à mesma conta Alibaba Cloud. |
|
Instance ID |
Selecione o ID da instância SelectDB de destino. |
|
Database Account |
Insira a conta do banco de dados da instância de destino. Consulte Pré-requisitos para ver as permissões necessárias. |
|
Database Password |
Insira a senha da conta do banco de dados. |
Etapa 3: Testar conectividade e configurar objetos
-
Clique em Test Connectivity and Proceed.
Certifique-se de que os blocos CIDR dos servidores DTS foram adicionados às configurações de segurança dos bancos de dados de origem e de destino. Consulte Add DTS server IP addresses to a whitelist .
-
Na página Configure Objects, defina os seguintes parâmetros:
Parâmetro
Descrição
Migration Types
Selecione com base na sua estratégia de migração. Consulte Escolher um tipo de migração. Para migração sem tempo de inatividade, selecione Schema Migration, Full Data Migration e Incremental Data Migration. Para migração única, selecione Schema Migration e Full Data Migration.
Processing Mode of Conflicting Tables
Precheck and Report Errors (padrão): A tarefa falha durante a pré-verificação se existirem tabelas com o mesmo nome no destino. Ignore Errors and Proceed: O DTS ignora a verificação. Use com cautela — pode ocorrer inconsistência de dados se os esquemas forem diferentes.
Capitalization of Object Names in Destination Instance
Determina como os nomes de bancos de dados, tabelas e colunas serão capitalizados no destino. DTS default policy é selecionado por padrão. Consulte Specify the capitalization of object names in the destination instance.
Source Objects
Selecione os objetos a serem migrados no nível de esquema ou tabela e clique no ícone para adicioná-los aos Selected Objects.
Selected Objects
Clique com o botão direito em um objeto para renomeá-lo, definir condições de filtro ou selecionar operações SQL para migração incremental. Para definir o parâmetro
bucket_count, clique com o botão direito em uma tabela, vá para Parameter Settings, ative a configuração e especifique um valor. Para remover um objeto, clique nele e depois clique no ícone de remoção.- O parâmetro
bucket_countdeve ser um número inteiro positivo. O valor padrão é auto . - Se você renomear um objeto usando o mapeamento de nomes de objetos, outros objetos dependentes dele poderão falhar na migração. - Para filtrar linhas, clique com o botão direito em uma tabela em Selected Objects e especifique condições WHERE. Consulte Specify filter conditions . -
Clique em Next: Advanced Settings e configure os seguintes parâmetros opcionais:
Parâmetro
Descrição
Dedicated Cluster for Task Scheduling
Por padrão, as tarefas são executadas no cluster compartilhado. Para maior estabilidade, adquira um cluster dedicado. Consulte What is a DTS dedicated cluster.
Retry Time for Failed Connections
Tempo durante o qual o DTS tenta novamente antes de marcar a tarefa como falha devido a problemas de conexão. Intervalo: 10–1.440 minutos. Padrão: 720 minutos. Defina para pelo menos 30 minutos.
Retry Time for Other Issues
Tempo durante o qual o DTS tenta novamente antes de falhar devido a erros DDL ou DML. Intervalo: 1–1.440 minutos. Padrão: 10 minutos. Deve ser menor que Retry Time for Failed Connections.
Enable Throttling for Full Data Migration
Limita o throughput de leitura/gravação durante a migração completa para reduzir a carga no banco de dados. Configure Queries per second (QPS) to the source database, RPS of Full Data Migration e Data migration speed for full migration (MB/s).
Enable Throttling for Incremental Data Migration
Limita o throughput durante a migração incremental. Configure RPS of Incremental Data Migration e Data migration speed for incremental migration (MB/s).
Environment Tag
Opcional. Adicione uma tag à instância para identificação do ambiente.
Configure ETL
Selecione Yesalert notification settings para ativar o recurso de extração, transformação e carregamento (ETL). Consulte Configure ETL in a data migration or data synchronization task.
Monitoring and Alerting
Selecione Yes para receber alertas quando a tarefa falhar ou a latência de migração exceder um limiar. Consulte Configure monitoring and alerting.
-
(Opcional) Clique em Next: Configure Database and Table Fields para definir a Primary Key Column, Distribution Key e Engine das tabelas de destino.
- Esta etapa está disponível apenas se você selecionou Schema Migration para Migration Types . Defina Definition Status como All para editar todas as tabelas. - A Primary Key Column pode ser uma chave primária composta. Selecione uma ou mais colunas da Primary Key Column como Distribution Key . - Para tabelas sem chave primária ou restrição UNIQUE, defina Engine como duplicate . Caso contrário, a instância de migração pode falhar ou dados podem ser perdidos.
Etapa 4: Executar a pré-verificação
-
Clique em Next: Save Task Settings and Precheck.
Para visualizar os parâmetros da API para esta configuração de tarefa, passe o ponteiro sobre Next: Save Task Settings and Precheck e clique em Preview OpenAPI parameters .
-
Aguarde a conclusão da pré-verificação. Se algum item falhar:
Clique em View Details ao lado de cada item com falha, resolva o problema e clique em Precheck Again.
Para itens de alerta que podem ser ignorados, clique em Confirm Alert Details, depois clique em Ignore > OK > Precheck Again.
ImportanteIgnorar itens de alerta pode causar inconsistência de dados. Prossiga com cautela.
Etapa 5: Adquirir a instância e iniciar a migração
Aguarde até que a Success Rate atinja 100%, então clique em Next: Purchase Instance.
-
Na página Purchase Instance, configure a classe da instância:
Parâmetro
Descrição
Resource Group
O grupo de recursos para a instância de migração. Padrão: default resource group. Consulte What is Resource Management?
Instance Class
Controla a velocidade da migração. Consulte Instance classes of data migration instances.
Leia e aceite os Data Transmission Service (Pay-as-you-go) Service Terms, depois clique em Buy and Start > OK.
Verificar status da migração
Após o início da tarefa, acesse a página Data Migration para monitorar o progresso:
Apenas migração completa: A tarefa para automaticamente quando concluída. O Status muda para Completed.
Migração completa + incremental: A fase incremental é executada continuamente. O Status mostra Running. Pare a tarefa manualmente quando estiver pronto para alternar para o destino.
Considerações de desempenho
Durante a migração completa, execute a tarefa quando a carga de CPU na origem e no destino estiver abaixo de 30%.
-
O DTS usa sincronização em lote para migração incremental. Por padrão, o DTS grava em cada objeto no máximo uma vez a cada 5 segundos, resultando em uma latência de sincronização típica dentro de 10 segundos. Para reduzir a latência, ajuste o parâmetro
selectdb.reservoir.timeout.millisecondsno console do DTS. Intervalo válido: 1.000–10.000 milissegundos.Reduzir o intervalo de lote aumenta a frequência de gravação no destino, o que pode elevar a carga do destino e o tempo de resposta de gravação. Ajuste conforme a capacidade do seu destino.
Se a instância de migração falhar, o suporte do DTS tentará recuperá-la dentro de 8 horas. A recuperação pode envolver o reinício da instância ou o ajuste de seus parâmetros. Apenas os parâmetros da instância DTS são modificados — os parâmetros do banco de dados não são alterados.
Mapeamentos de tipos de dados
A tabela a seguir mostra como os tipos de dados do PostgreSQL são mapeados para os tipos de dados do SelectDB após a migração.
| Categoria | Tipo de dados PostgreSQL | Tipo de dados SelectDB | Observações |
|---|---|---|---|
| Numérico | SMALLINT | SMALLINT | |
| INTEGER | INT | ||
| BIGINT | BIGINT | ||
| DECIMAL | DECIMAL | ||
| NUMERIC | DECIMAL | ||
| REAL | DOUBLE | ||
| DOUBLE | DOUBLE | ||
| SMALLSERIAL | SMALLINT | ||
| SERIAL | INT | ||
| BIGSERIAL | BIGINT | ||
| Monetário | MONEY | STRING | |
| Caractere | CHAR(n), VARCHAR(n) | VARCHAR | Convertido para VARCHAR(4*n) para evitar perda de dados. Se nenhum comprimento for especificado, o padrão é VARCHAR(65533). Se o comprimento exceder 65533, convertido para STRING. |
| TEXT | STRING | ||
| Binário | BYTEA | STRING | |
| Data e hora | TIMESTAMP [(P)] WITHOUT TIME ZONE | DATETIMEV2 | |
| TIMESTAMP [(P)] WITH TIME ZONE | DATETIMEV2 | ||
| DATE | DATEV2 | ||
| TIME [(P)] WITHOUT TIME ZONE | VARCHAR(50) | ||
| TIME [(P)] WITH TIME ZONE | VARCHAR(50) | ||
| INTERVAL [FIELDS] [(P)] | STRING | ||
| Booleano | BOOLEAN | BOOLEAN | |
| Geométrico | POINT, LINE, LSEG, BOX, PATH, POLYGON, CIRCLE | STRING | |
| Endereço de rede | CIDR, INET, MACADDR, MACADDR8 | STRING | |
| Busca de texto | TSVECTOR | STRING | |
| XML | XML | STRING | |
| JSON | JSON | JSON |
Colunas adicionais para o modelo Duplicate
Para tabelas de destino que usam o modelo Duplicate, o DTS adiciona automaticamente as seguintes colunas. Use essas colunas para identificar e remover dados duplicados após novas tentativas ou reinícios.
|
Coluna |
Tipo de dados |
Valor padrão |
Descrição |
|
|
Int |
0 |
|
|
|
Bigint |
0 |
|
|
|
Bigint |
0 |
|
Dados duplicados podem aparecer nos seguintes casos:
Ocorreu uma operação de nova tentativa na instância de migração.
A instância de migração foi reiniciada.
Duas ou mais operações DML foram realizadas na mesma linha após o início da migração.
Para tabelas que usam o mecanismo Duplicate, o DTS converte instruções UPDATE e DELETE em instruções INSERT.
Próximos passos
Para mapear nomes de objetos entre origem e destino, consulte Map object names.
Para gerenciar conexões de banco de dados registradas no DTS, consulte Manage database connections.
Para modificar parâmetros da instância após o início da tarefa, consulte Modify instance parameters.