DBAtlas · Atlas de operaciones de bases de datos

Migrar a otra base de datos (heterogénea)

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 GoldenGate

Para la migración heterogénea desde Oracle (sobre todo a PostgreSQL), la herramienta open source más habitual es Ora2Pg: convierte tablas, restricciones, PL/SQL y datos al dialecto de destino; --estimate_cost estima el esfuerzo de migración. Para una migración en línea/con poca indisponibilidad, se usa AWS DMS u Oracle GoldenGate (con 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 DMS

pgloader es la herramienta estándar para migrar a PostgreSQL desde otros motores (MySQL, SQLite, MS SQL): con cadenas de conexión crea el esquema en un solo comando, mapea los tipos y copia los datos rápidamente; las transformaciones/mapeos de tipos personalizados se definen en un script .load. Si el origen es Oracle, se prefiere Ora2Pg; para migraciones en línea, 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 shop

No hay una única herramienta abierta dominante para migrar a MySQL desde otros motores; la solución más habitual es AWS DMS (gestionado, con soporte de CDC) o adaptar el dump de origen en sintaxis/tipos y cargarlo con el cliente mysql. MySQL y MariaDB son en gran medida compatibles; la salida de mysqldump suele migrar directamente.

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 DMS

pgloader (origen mssql://) se usa para migrar de SQL Server a PostgreSQL; si quiere conservar T-SQL sin modificar la aplicación, Babelfish for Aurora PostgreSQL ofrece una capa de compatibilidad. La herramienta SSMA de Microsoft automatiza la migración desde otros motores (Oracle, MySQL, DB2) a SQL Server. Para migraciones en línea, 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)

La migración entre MongoDB y motores SQL requiere una transformación del modelo fila<->documento (ETL); no hay un comando único automático. De SQL a MongoDB, MongoDB Relational Migrator mapea las tablas a un esquema de documentos; en casos sencillos, genere CSV/JSON desde el origen y cárguelo con mongoimport. En sentido inverso, la salida de mongoexport se carga en la tabla relacional de destino con 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-export

En una migración heterogénea, Redis suele ser la capa de caché como destino/origen; para cargar datos en Redis desde fuentes relacionales o archivos se usa la herramienta oficial RIOT de Redis (db-import mapea el resultado de una consulta SQL a estructuras HSET/SET). Para Redis a Redis o a un archivo existen los 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" } }

La herramienta más habitual para migrar desde otras bases de datos a Elasticsearch es Logstash (entrada JDBC/file -> salida elasticsearch); también se usan los connectors/Beats propios de Elastic. Al pasar de un clúster Elasticsearch antiguo a uno nuevo, es habitual el remote reindex (_reindex con un origen 'remote'); reindex.remote.whitelist debe estar definido en el destino.

Abrir en DBAtlas →