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_dirparameter
Thick Mode:
- Required for Oracle 11.2 and earlier
- Requires Oracle Instant Client
- Specify
lib_dirpointing 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.confallows 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.oraconfiguration - 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_dirpath is correct - Check Oracle Instant Client is installed
- Ensure library files have correct permissions
- Set
LD_LIBRARY_PATHenvironment 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.jsonin 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
- Quick Start Guide - Getting started
- CLI Reference - Command-line options
- FastTransfer Configuration - Performance tuning
- Troubleshooting - Common issues and solutions