Database Configuration

MigratorXpress requires three database connections for migrations: a source database, a target database, and a migration tracking database.

Supported Databases

Source Databases

Database Support Status Notes
PostgreSQL Supported Full support with Ctid-based parallel transfer
Oracle Supported Supports thin and thick modes, Rowid-based parallel transfer
SQL Server Supported Full support
Netezza Supported NZDataSlice-based parallel transfer

Target Databases

Database Support Status Notes
PostgreSQL Supported Full support
SQL Server Supported Full support with columnstore index options

Migration Tracking Database

Database Support Status Notes
SQL Server Supported Recommended for production

Authentication File Format

Create a JSON file containing your database credentials:

{
  "source_oracle": {
    "ds_type": "oracle",
    "auth_mode": "classic",
    "info": {
      "username": "oracle_user",
      "password": "oracle_password",
      "server": "oracle-server.com",
      "port": 1521,
      "database": "orclpdb1"
    }
  },
  "source_postgres": {
    "ds_type": "postgres",
    "auth_mode": "classic",
    "info": {
      "username": "postgres",
      "password": "your_password",
      "server": "localhost",
      "port": 5432,
      "database": "production_db"
    }
  },
  "source_mssql": {
    "ds_type": "mssql",
    "auth_mode": "classic",
    "info": {
      "username": "sa",
      "password": "mssql_password",
      "server": "mssql-server.com",
      "port": 1433,
      "database": "sales_db"
    }
  },
  "source_netezza": {
    "ds_type": "netezza",
    "auth_mode": "classic",
    "info": {
      "username": "admin",
      "password": "netezza_password",
      "server": "netezza-server.com",
      "port": 5480,
      "database": "system"
    }
  },
  "target_postgres": {
    "ds_type": "postgres",
    "auth_mode": "classic",
    "info": {
      "username": "postgres",
      "password": "your_password",
      "server": "localhost",
      "port": 5432,
      "database": "target_db"
    }
  },
  "target_mssql": {
    "ds_type": "mssql",
    "auth_mode": "classic",
    "info": {
      "username": "sa",
      "password": "mssql_password",
      "server": "mssql-target.com",
      "port": 1433,
      "database": "target_db"
    }
  },
  "migration_db": {
    "ds_type": "mssql",
    "auth_mode": "classic",
    "info": {
      "username": "sa",
      "password": "mssql_password",
      "server": "mssql-server.com",
      "port": 1433,
      "database": "migration_tracking"
    }
  }
}

PostgreSQL Configuration

Connection Parameters

Parameter Required Description
ds_type Yes Must be "postgres"
auth_mode Yes "classic" or "odbc"
username Yes PostgreSQL username
password Yes PostgreSQL password
server Yes Server hostname or IP
port Yes Port number (default: 5432)
database Yes Database name

Required Permissions

As Source:

-- Source database user needs:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO migratorxpress_user;
GRANT USAGE ON SCHEMA public TO migratorxpress_user;

As Target:

-- Target database user needs:
GRANT CREATE ON DATABASE target_db TO migratorxpress_user;
GRANT ALL PRIVILEGES ON SCHEMA public TO migratorxpress_user;

Example

{
  "postgres_source": {
    "ds_type": "postgres",
    "auth_mode": "classic",
    "info": {
      "username": "dataexport",
      "password": "SecureP@ssw0rd",
      "server": "pg-prod.company.com",
      "port": 5432,
      "database": "analytics"
    }
  }
}

ODBC Mode

For PostgreSQL connections using ODBC:

{
  "postgres_odbc": {
    "ds_type": "postgres",
    "auth_mode": "odbc",
    "info": {
      "dsn": "PostgreSQL",
      "username": "user",
      "password": "pass"
    }
  }
}

Oracle Configuration

Connection Parameters

Parameter Required Description
ds_type Yes Must be "oracle"
auth_mode Yes Must be "classic"
username Yes Oracle username
password Yes Oracle password
server Yes Server hostname or IP
port Yes Port number (default: 1521)
database Yes Service name or SID
lib_dir No Client library directory (for thick mode)

Thin vs Thick Mode

Thin Mode (Recommended):

  • No client libraries required
  • Works with Oracle 12.1 and later
  • Omit the lib_dir parameter

Thick Mode:

  • Required for Oracle 11.2 and earlier
  • Requires Oracle Instant Client
  • Specify lib_dir pointing to Instant Client directory

Required Permissions

For optimal FastTransfer performance with parallel RowID-based transfers:

-- Connect as Oracle DBA (e.g., sys as sysdba)
GRANT SELECT_CATALOG_ROLE TO your_username;

This role provides access to:

  • Table and column metadata discovery
  • RowID range partitioning for parallel transfers
  • Optimal transfer method selection

Example: Thin Mode

{
  "oracle_prod": {
    "ds_type": "oracle",
    "auth_mode": "classic",
    "info": {
      "username": "EXPORT_USER",
      "password": "OracleP@ss",
      "server": "oracle-prod.company.com",
      "port": 1521,
      "database": "PRODPDB"
    }
  }
}

Example: Thick Mode

{
  "oracle_legacy": {
    "ds_type": "oracle",
    "auth_mode": "classic",
    "info": {
      "username": "LEGACY_USER",
      "password": "OracleP@ss",
      "server": "oracle-11g.company.com",
      "port": 1521,
      "database": "LEGACY",
      "lib_dir": "/opt/oracle/instantclient_19_8"
    }
  }
}

SQL Server Configuration

Connection Parameters

Parameter Required Description
ds_type Yes Must be "mssql"
auth_mode Yes "classic" or "odbc"
username Yes SQL Server username (for classic auth)
password Yes SQL Server password (for classic auth)
server Yes Server hostname or IP
port Yes Port number (default: 1433)
database Yes Database name

Required Permissions

As Source:

-- Source database user needs:
GRANT SELECT ON SCHEMA::dbo TO migratorxpress_user;
GRANT VIEW DEFINITION ON SCHEMA::dbo TO migratorxpress_user;

As Target:

-- Target database user needs:
GRANT CREATE TABLE ON DATABASE::target_db TO migratorxpress_user;
GRANT ALTER ON SCHEMA::dbo TO migratorxpress_user;
GRANT INSERT, UPDATE, DELETE ON SCHEMA::dbo TO migratorxpress_user;

As Migration Tracking:

-- Migration database user needs full access:
GRANT CREATE TABLE, ALTER, INSERT, UPDATE, DELETE, SELECT ON SCHEMA::dbo TO migratorxpress_user;

Example: Classic Authentication

{
  "mssql_prod": {
    "ds_type": "mssql",
    "auth_mode": "classic",
    "info": {
      "username": "sa",
      "password": "StrongP@ssw0rd",
      "server": "mssql-prod.company.com",
      "port": 1433,
      "database": "SalesDB"
    }
  }
}

Example: Windows Trusted Authentication

{
  "mssql_trusted": {
    "ds_type": "mssql",
    "auth_mode": "odbc",
    "info": {
      "trusted": true,
      "instance": "server.domain.com\\INSTANCE",
      "database": "dbname"
    }
  }
}

Connection String Mode

For advanced scenarios:

{
  "mssql_custom": {
    "ds_type": "mssql",
    "auth_mode": "classic",
    "info": {
      "connect_string": "mssql+pymssql://user:pass@host:port/database"
    }
  }
}

Netezza Configuration

Connection Parameters

Parameter Required Description
ds_type Yes Must be "netezza"
auth_mode Yes Must be "classic"
username Yes Netezza username
password Yes Netezza password
server Yes Server hostname or IP
port Yes Port number (default: 5480)
database Yes Database name

Example

{
  "netezza_source": {
    "ds_type": "netezza",
    "auth_mode": "classic",
    "info": {
      "username": "admin",
      "password": "NetezzaP@ss",
      "server": "netezza.company.com",
      "port": 5480,
      "database": "SYSTEM"
    }
  }
}

Usage Examples

Oracle to PostgreSQL Migration

./MigratorXpress --auth credentials.json \
  --source_db_auth_id source_oracle \
  --source_schema_name SALES \
  --target_db_auth_id target_postgres \
  --target_schema_name sales \
  --migration_db_auth_id migration_db \
  --fasttransfer_dir_path ./FastTransfer_linux-x64/ \
  --task_list translate create transfer diff

SQL Server to PostgreSQL Migration

./MigratorXpress --auth credentials.json \
  --source_db_auth_id source_mssql \
  --source_schema_name dbo \
  --target_db_auth_id target_postgres \
  --target_schema_name public \
  --migration_db_auth_id migration_db \
  --fasttransfer_dir_path ./FastTransfer_linux-x64/ \
  --task_list translate create transfer diff

Netezza to SQL Server Migration

./MigratorXpress --auth credentials.json \
  --source_db_auth_id source_netezza \
  --source_schema_name ADMIN \
  --target_db_auth_id target_mssql \
  --target_schema_name dbo \
  --migration_db_auth_id migration_db \
  --fasttransfer_dir_path ./FastTransfer_linux-x64/ \
  --task_list translate create transfer diff

Troubleshooting

PostgreSQL

Problem: Connection refused

Solution:

  • Check PostgreSQL is running: systemctl status postgresql
  • Verify pg_hba.conf allows connections from your IP
  • Check firewall rules: sudo ufw allow 5432/tcp

Problem: Authentication failed

Solution:

  • Verify username and password
  • Check password encryption method in pg_hba.conf
  • Ensure user exists: SELECT * FROM pg_user WHERE usename='your_user';

Oracle

Problem: ORA-12154: TNS:could not resolve the connect identifier

Solution:

  • Verify service name is correct
  • Check tnsnames.ora configuration
  • Use IP address instead of hostname
  • Ensure Oracle listener is running

Problem: ORA-28000: the account is locked

Solution:

-- Unlock user account
ALTER USER your_username ACCOUNT UNLOCK;

Problem: Thick mode library not found

Solution:

  • Verify lib_dir path is correct
  • Check Oracle Instant Client is installed
  • Ensure library files have correct permissions
  • Set LD_LIBRARY_PATH environment variable (Linux)

SQL Server

Problem: Login failed for user

Solution:

  • Verify SQL Server authentication is enabled (not Windows-only)
  • Check user exists and has correct permissions
  • Verify password is correct
  • Check if user is allowed to connect from your IP

Problem: Cannot open database requested by the login

Solution:

  • Verify database name is correct
  • Check user has access to the database
  • Ensure database is online: SELECT state_desc FROM sys.databases WHERE name='YourDB'

Netezza

Problem: Connection refused

Solution:

  • Verify Netezza server is running
  • Check port 5480 is accessible
  • Verify firewall rules allow connection

Problem: Authentication failed

Solution:

  • Verify username and password
  • Check user has appropriate permissions
  • Ensure database exists and is accessible

Security Best Practices

1. Credential Storage

  • Never commit credentials to version control
  • Store credentials.json in secure location with restricted permissions:
    chmod 600 credentials.json
    
  • Use environment-specific auth files (dev, staging, prod)

2. Least Privilege

  • Create dedicated database users for MigratorXpress
  • Grant only necessary permissions for each role (source, target, migration)
  • Use read-only credentials for source databases

3. Network Security

  • Use SSL/TLS connections when possible
  • Restrict database access by IP address
  • Use VPN or private networks for database connections

4. Password Management

  • Use strong passwords (minimum 12 characters, mixed case, numbers, symbols)
  • Rotate passwords regularly
  • Consider using secret management tools (AWS Secrets Manager, HashiCorp Vault)

See Also