Migrar para outro banco de dados (heterogêneo)
Oracle
# Oracle -> PostgreSQL: Ora2Pg (schema + data + PL/SQL conversion)
ora2pg -c ora2pg.conf -t TABLE -o schema.sql
ora2pg -c ora2pg.conf -t COPY -o data.sql # data in COPY format
ora2pg -t SHOW_REPORT --estimate_cost # migration cost estimate
# Oracle -> (multiple targets) managed/online: AWS DMS or Oracle GoldenGatePara migração heterogênea a partir do Oracle (especialmente para PostgreSQL), a ferramenta open source mais comum é o Ora2Pg: converte tabelas, constraints, PL/SQL e dados para o dialeto de destino; --estimate_cost estima o esforço de migração. Para migração online/com baixo downtime, usa-se AWS DMS ou Oracle GoldenGate (com CDC).
PostgreSQL
# MySQL -> PostgreSQL: pgloader (schema+data+type conversion in one command)
pgloader mysql://app_user:password@source/shop \
postgresql://app_user:password@target/shop
# Also from SQLite/MSSQL sources: with a pgloader ./migration.load script
# For a managed/online PostgreSQL target: AWS DMSO pgloader é a ferramenta padrão para migrar para o PostgreSQL a partir de outros engines (MySQL, SQLite, MS SQL): com connection strings, cria o schema em um único comando, mapeia os tipos e copia os dados rapidamente; transformações/mapeamentos de tipos personalizados são definidos em um script .load. Se a origem for Oracle, prefere-se o Ora2Pg; para migração online, o AWS DMS.
MySQL
# PostgreSQL/Oracle/MSSQL -> MySQL: AWS DMS (managed) is the most common path
# or adapt the source-specific export for MySQL:
# pg_dump --inserts ... | (type/syntax fixes) | mysql shop
# MySQL <-> MariaDB (compatible): mysqldump output loads directly
mysqldump --single-transaction shop | mysql -h target_mariadb shopNão há uma única ferramenta aberta dominante para migrar para o MySQL a partir de outros engines; a solução mais comum é o AWS DMS (gerenciado, com suporte a CDC) ou adaptar o dump da origem quanto a sintaxe/tipos e carregá-lo com o cliente mysql. MySQL e MariaDB são amplamente compatíveis; a saída do mysqldump geralmente migra diretamente.
SQL Server
# SQL Server -> PostgreSQL: with pgloader
pgloader mssql://app_user:password@source/shop \
postgresql://app_user:password@target/shop
# SQL Server -> PostgreSQL compatibility layer: Babelfish for Aurora PostgreSQL
# (runs T-SQL and the TDS protocol on top of PostgreSQL)
# To other targets: SSMA (SQL Server Migration Assistant) or AWS DMSO pgloader (origem mssql://) é usado para migrar do SQL Server para o PostgreSQL; se você quiser manter o T-SQL sem alterar a aplicação, o Babelfish for Aurora PostgreSQL oferece uma camada de compatibilidade. A ferramenta SSMA da Microsoft automatiza a migração de outros engines (Oracle, MySQL, DB2) para o SQL Server. Para migração online, o AWS DMS.
MongoDB
# Relational <-> MongoDB conversion requires schema mapping (ETL):
# - Relational Migrator (official MongoDB tool): maps tables to the document model
# - or generate JSON from the source -> load with mongoimport
mongoexport --db=shop --collection=customer --type=csv --fields=id,name > c.csv
# (To an SQL target: mongoexport CSV -> relational COPY/LOAD DATA)A migração entre o MongoDB e engines SQL exige uma transformação do modelo linha<->documento (ETL); não há um comando único automático. De SQL para MongoDB, o MongoDB Relational Migrator mapeia tabelas para um schema de documentos; em casos simples, gere CSV/JSON a partir da origem e carregue com mongoimport. No sentido inverso, a saída do mongoexport é carregada na tabela relacional de destino com COPY/LOAD DATA.
Redis
# With RIOT (Redis Input/Output Tools), to/from Redis from other sources:
# Relational -> Redis:
riot db-import --jdbc-url "jdbc:postgresql://host/shop" \
--sql "SELECT * FROM customer" hset --keyspace customer --keys id
# Redis -> another Redis / file: riot replicate / riot file-exportNa migração heterogênea, o Redis geralmente é a camada de cache como destino/origem; para carregar dados no Redis a partir de fontes relacionais ou de arquivos, usa-se a ferramenta oficial RIOT do Redis (db-import mapeia um resultado SQL para estruturas HSET/SET). Para Redis para Redis ou para arquivo, existem os comandos riot replicate / file-export.
Elasticsearch
# Relational/other source -> Elasticsearch: Logstash (JDBC input)
# logstash.conf: input { jdbc { statement => "SELECT * FROM customer" } }
# output { elasticsearch { index => "customer" } }
# ES -> ES (version/cluster upgrade): reindex from a remote source
POST _reindex
{ "source": { "remote": { "host": "http://old:9200" }, "index": "customer" },
"dest": { "index": "customer" } }A ferramenta mais comum para migrar de outros bancos para o Elasticsearch é o Logstash (input JDBC/file -> output elasticsearch); os connectors/Beats da própria Elastic também são usados. Ao passar de um cluster Elasticsearch antigo para um novo, o remote reindex (_reindex com origem 'remote') é comum; reindex.remote.whitelist deve estar definido no destino.