Skip to main content
Version: 0.7 (Latest)

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_jobs and 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/DATE columns.
  • Data validation -- the diff task 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 -- 0 when every table succeeded, 40/41 when some or all tables failed (retry with --resume), 10/20 for configuration and validation errors detected before any connection.

Supported migration paths​

DatabaseAs SourceAs TargetMigration 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 include run_id in 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 diff task no longer fails with Reindexing only valid with uniquely valued Index objects on 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_fk stays SQL Server-only. Since 0.7.3, data is transferred exactly (binary, fractional seconds, time zones) and diff works against a PostgreSQL target.
  • More authentication modes (0.7.2) -- connection_string (PostgreSQL, SQL Server), trusted (SQL Server integrated authentication, Kerberos on Linux) and odbc (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 with 20, and a run with failed tables exits with 40 (some) or 41 (all) instead of 0. See Exit Codes.
  • Database names from the auth file (0.7.2) -- --source_db_name is deprecated and ignored, and --target_db_name is optional (when given, it must match the target auth entry).
  • --drop_tables_if_exists false fixed (0.7.2) -- false/no/0 now disable the option; before, any value enabled it.
  • Constraint copy from PostgreSQL and SQL Server sources (0.7.3) -- copy_pk, copy_ak and copy_fk are 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.

Next steps​

Copyright © 2026 Architecture & Performance.