Skip to main content

Quick start guide

Three steps: create a credentials file, run a full migration, then add constraints.

Prerequisites

  1. MigratorXpress binary (Windows or Linux) downloaded from arpe.io
  2. Database access -- read access on the source, write access on the target, and a SQL Server database for migration tracking
  3. FastTransfer binary (>= 0.15.0) -- MigratorXpress calls FastTransfer for data movement. Trial distributions include FastTransfer in the engine/ directory. Otherwise, place it in a known directory and pass --fasttransfer_dir_path

Step 1: Create a credentials file

Save the connection details for every database involved in the migration. Each entry has a unique ID that you reference on the command line.

{
"oracle_prod": {
"ds_type": "oracle",
"auth_mode": "classic",
"info": {
"username": "$env{ORA_USER}",
"password": "$env{ORA_PASSWORD}",
"server": "oracle-host.example.com",
"port": 1521,
"database": "ORCL"
}
},
"postgres_dev": {
"ds_type": "postgres",
"auth_mode": "classic",
"info": {
"username": "$env{PG_USER}",
"password": "$env{PG_PASSWORD}",
"server": "pg-host.example.com",
"port": 5432,
"database": "analytics"
}
},
"mssql_target": {
"ds_type": "mssql",
"auth_mode": "classic",
"info": {
"username": "$env{MSSQL_USER}",
"password": "$env{MSSQL_PASSWORD}",
"server": "sql-host.example.com",
"port": 1433,
"database": "target_db"
}
},
"ms_mig_log": {
"ds_type": "mssql",
"auth_mode": "classic",
"info": {
"username": "$env{MIG_LOG_USER}",
"password": "$env{MIG_LOG_PASSWORD}",
"server": "sql-host.example.com",
"port": 1433,
"database": "migration_log"
}
},
"netezza_source": {
"ds_type": "netezza",
"auth_mode": "classic",
"info": {
"username": "$env{NZ_USER}",
"password": "$env{NZ_PASSWORD}",
"server": "nz-host.example.com",
"port": 5480,
"database": "PROD_DB"
}
}
}

Save the file as credentials.json in a secure location.

Environment variables

Use $env{VAR_NAME} in any string value to reference an environment variable at runtime. MigratorXpress raises an error if the variable is not set. Plain-text values also work if you prefer.

# Linux
export ORA_USER="system"
export ORA_PASSWORD="your_password"

# Windows (PowerShell)
$env:ORA_USER = "system"
$env:ORA_PASSWORD = "your_password"

Step 2: Run a full migration

Migrate an Oracle schema to PostgreSQL -- translate the DDL, create tables, transfer data, and validate.

Linux

./MigratorXpress --auth ./credentials.json \
--source_db_auth_id oracle_prod \
--source_schema_name SALES \
--target_db_auth_id postgres_dev \
--target_schema_name sales \
--migration_db_auth_id ms_mig_log \
--n_jobs 4 \
--fasttransfer_p 2 \
--drop_tables_if_exists true \
--task_list translate create transfer diff

Windows (PowerShell)

.\MigratorXpress.exe --auth .\credentials.json `
--source_db_auth_id oracle_prod `
--source_schema_name SALES `
--target_db_auth_id postgres_dev `
--target_schema_name sales `
--migration_db_auth_id ms_mig_log `
--n_jobs 4 `
--fasttransfer_p 2 `
--drop_tables_if_exists true `
--task_list translate create transfer diff

The task_list parameter controls which steps run. The four tasks above cover schema translation, table creation, data transfer, and row-count validation.

Step 3: Add constraints

Once data is transferred and validated, copy primary keys, alternate keys, and foreign keys in a separate step. This avoids constraint violations during the initial load.

Linux

./MigratorXpress --auth ./credentials.json \
--source_db_auth_id oracle_prod \
--source_schema_name SALES \
--target_db_auth_id postgres_dev \
--target_schema_name sales \
--migration_db_auth_id ms_mig_log \
--task_list copy_pk copy_ak copy_fk

Windows (PowerShell)

.\MigratorXpress.exe --auth .\credentials.json `
--source_db_auth_id oracle_prod `
--source_schema_name SALES `
--target_db_auth_id postgres_dev `
--target_schema_name sales `
--migration_db_auth_id ms_mig_log `
--task_list copy_pk copy_ak copy_fk

Advanced: Multi-schema migration

Starting with v0.6.12, you can migrate multiple schemas in one run using SQL LIKE patterns for --source_schema_name:

Linux

# Migrate all schemas starting with "app_"
./MigratorXpress --auth ./credentials.json \
--source_db_auth_id oracle_prod \
--source_schema_name "app_%" \
--target_db_auth_id postgres_dev \
--target_schema_name "app_%" \
--migration_db_auth_id ms_mig_log \
--n_jobs 4 \
--drop_tables_if_exists true \
--task_list translate create transfer diff

Windows (PowerShell)

# Migrate all schemas starting with "app_"
.\MigratorXpress.exe --auth .\credentials.json `
--source_db_auth_id oracle_prod `
--source_schema_name "app_%" `
--target_db_auth_id postgres_dev `
--target_schema_name "app_%" `
--migration_db_auth_id ms_mig_log `
--n_jobs 4 `
--drop_tables_if_exists true `
--task_list translate create transfer diff

Pattern examples:

  • app_% -- all schemas starting with app_
  • %_prod -- all schemas ending with _prod
  • % -- every schema in the database

Next steps

Copyright © 2026 Architecture & Performance.