MigratorXpress
What is MigratorXpress?
MigratorXpress is a CLI tool for database migrations between platforms. This documentation describes MigratorXpress v0.7.3. It translates schemas, transfers data, copies constraints, and validates results -- all from a single command. Under the hood it uses FastTransfer for streaming data transfer, so datasets of any size move without saturating memory.
Architecture
MigratorXpress connects three databases during a migration:
Source Database
The database you are migrating from. MigratorXpress reads schema metadata, profiles column types, and streams table data from the source.
Supported sources: Oracle, PostgreSQL, SQL Server, Netezza.
Target Database
The database that receives the translated schema and data. MigratorXpress creates tables, loads data via FastTransfer, and optionally copies constraints.
Supported targets: SQL Server and PostgreSQL. PostgreSQL targets can be loaded from Oracle, PostgreSQL and SQL Server sources (see Compatibility).
Migration Tracking DB
A SQL Server or PostgreSQL database where MigratorXpress logs every migration step -- table discovery, translation, transfer status, diff results, and constraint operations. This enables auditing, monitoring, and resuming failed migrations. The backend is auto-detected from the auth entry's ds_type (mssql or postgres); no CLI flag is required.
Key features
- Cross-platform -- native binaries for Windows and Linux.
- Multi-database -- Oracle, PostgreSQL, SQL Server, and Netezza as sources; SQL Server or PostgreSQL as target; SQL Server or PostgreSQL for migration tracking.
- Dual-level parallelism -- migrate multiple tables at once with
--n_jobsand partition large tables internally with--fasttransfer_p. - Schema translation -- automatic data type translation to SQL Server or PostgreSQL types, with column profiling for Oracle
NUMBER/DATEcolumns. - Data validation -- the
difftask compares row counts, column counts and per-column statistics between source and target. - Flexible task management -- run
translate,create,transfer,diff,copy_pk,copy_ak,copy_fk(or--task_list all); tasks always execute in this canonical order. - Scheduler-friendly exit codes --
0when every table succeeded,40/41when some or all tables failed (retry with--resume),10/20for configuration and validation errors detected before any connection.
Supported migration paths
| Database | As Source | As Target | Migration Tracking |
|---|---|---|---|
| Oracle | ✅ | ❌ | ❌ |
| PostgreSQL | ✅ | ✅ | ✅ |
| SQL Server | ✅ | ✅ | ✅ |
| Netezza | ✅ | ❌ | ❌ |
Quick example
A full Oracle-to-SQL Server migration on Linux (the database names come from the auth entries of credentials.json):
./MigratorXpress --auth ./credentials.json \
--source_db_auth_id oracle_prod \
--source_schema_name SALES \
--target_db_auth_id mssql_target \
--target_schema_name sales_copy \
--migration_db_auth_id ms_mig_log \
--n_jobs 2 \
--fasttransfer_p 2 \
--drop_tables_if_exists true \
--task_list translate create transfer diff
This single command translates the Oracle SALES schema to SQL Server data types, creates the tables, streams the data (two tables at a time, large tables split into two parallel streams), and validates the result with a diff.
Data transfer with FastTransfer
MigratorXpress delegates all data movement to FastTransfer, which uses a streaming architecture. Rows flow directly from source to target without being buffered entirely in memory. This design handles tables with billions of rows on modest hardware and avoids the out-of-memory failures common with dump-and-load approaches.
What's new in 0.7
- Per-run metadata snapshots (0.7.0) -- the catalog tables of the tracking database (
sources,sourcecolumns,sourceconstraints,targets,targetcolumns) now includerun_idin their primary keys. Each run keeps its own snapshot, and a run only acts on the tables discovered in that same run (no more "ghost" tables from earlier runs reported as failures). - Tracking database upgrade (0.7.0) -- tracking databases created by 0.6.x are upgraded in place, automatically on the first 0.7 run or manually with
--upgrade_migdb. Back up the tracking database first. See Upgrading the tracking database. - Diff fix (0.7.1) -- the
difftask no longer fails withReindexing only valid with uniquely valued Index objectson tracking databases holding several runs (SQL Server, Oracle and Netezza statistics queries are now scoped to the current run). - PostgreSQL target (0.7.2) -- data types are translated for the (source, target) pair, so SQL Server, Oracle and PostgreSQL sources can be migrated to PostgreSQL. Target schema, table and column names are lower-cased.
copy_fkstays SQL Server-only. Since 0.7.3, data is transferred exactly (binary, fractional seconds, time zones) anddiffworks against a PostgreSQL target. - More authentication modes (0.7.2) --
connection_string(PostgreSQL, SQL Server),trusted(SQL Server integrated authentication, Kerberos on Linux) andodbc(SQL Server source or tracking database). See Authentication modes. - Startup checks and exit codes (0.7.2, 0.7.3) -- auth entries and unsupported combinations are rejected before any connection (exit code
10), invalid task options exit with20, and a run with failed tables exits with40(some) or41(all) instead of0. See Exit Codes. - Database names from the auth file (0.7.2) --
--source_db_nameis deprecated and ignored, and--target_db_nameis optional (when given, it must match the target auth entry). --drop_tables_if_exists falsefixed (0.7.2) --false/no/0now disable the option; before, any value enabled it.- Constraint copy from PostgreSQL and SQL Server sources (0.7.3) --
copy_pk,copy_akandcopy_fkare no longer limited to Oracle sources. See Migration Tasks. - Safer FastTransfer calls (0.7.2) -- FastTransfer is started without a shell, so passwords with special characters or spaces reach it unchanged, and passwords and connection strings are masked in the logs.