Troubleshooting
Common issues encountered during MigratorXpress migrations and how to resolve them.
Connection Issues
Cannot connect to source database
Symptoms: Connection timeout or authentication error when MigratorXpress starts.
Solutions:
- Verify that the credentials file is valid JSON and that the
--source_db_auth_idmatches a key in the file. - Test connectivity independently (e.g.,
psql,sqlplus,sqlcmd) before running MigratorXpress. - Check that environment variables referenced with
$env{VAR_NAME}are set in the current shell session. - Confirm the server hostname, port, and database name are correct.
# Verify environment variables are set
echo $ORA_USER
echo $ORA_PASSWORD
# Test Oracle connectivity
sqlplus $ORA_USER/$ORA_PASSWORD@//oracle-host:1521/ORCL
# Test PostgreSQL connectivity
psql -h pg-host -p 5432 -U $PG_USER -d analytics
# Test SQL Server connectivity
sqlcmd -S sql-host,1433 -U $MSSQL_USER -P $MSSQL_PASSWORD -d target_db
Migration database not accessible
Symptoms: Error connecting to the migration tracking database or error creating tables.
Solutions:
- The migration database must be SQL Server -- other database types are not supported for migration tracking.
- Enable mixed-mode authentication (SQL Server Authentication + Windows Authentication) on the SQL Server instance.
- The connecting user must have CREATE TABLE permissions in the target database.
- Verify the
--migration_db_auth_idreferences a validmssqlentry in the credentials file.
-- Grant CREATE TABLE permission
USE migration_log;
GRANT CREATE TABLE TO your_migration_user;
GRANT ALTER ON SCHEMA::dbo TO your_migration_user;
GRANT INSERT, UPDATE, DELETE, SELECT ON SCHEMA::dbo TO your_migration_user;
PostgreSQL Issues
Connection refused
Symptoms: could not connect to server: Connection refused
Solutions:
- Verify PostgreSQL is running:
systemctl status postgresql - Check that
pg_hba.confallows connections from your IP address. Add a line such as:Then reload the configuration:host all all 10.0.0.0/8 md5sudo systemctl reload postgresql - Check firewall rules:
sudo ufw allow 5432/tcp - Confirm PostgreSQL is listening on the correct interface. Check
listen_addressesinpostgresql.conf:listen_addresses = '*'
Authentication failed
Symptoms: FATAL: password authentication failed for user
Solutions:
- Verify the username and password are correct.
- Check the password encryption method in
pg_hba.conf(md5vsscram-sha-256). - Confirm the user exists:
SELECT * FROM pg_user WHERE usename = 'your_user'; - If using
$env{PG_PASSWORD}, verify the environment variable does not contain trailing whitespace or special characters that need escaping.
Oracle Issues
ORA-12154: TNS could not resolve connect identifier
Symptoms: Connection fails with TNS resolution error.
Solutions:
- Verify the service name or SID in the credentials file matches the Oracle listener configuration.
- Check
tnsnames.oraif using TNS aliases. - Try using the IP address instead of the hostname.
- Confirm the Oracle listener is running:
lsnrctl status - If using Oracle thick mode, verify that
$ORACLE_HOME/network/admin/tnsnames.oraor$TNS_ADMIN/tnsnames.orais correctly configured.
ORA-28000: account is locked
Symptoms: Login fails because the Oracle account is locked.
Solutions:
- Unlock the account as a DBA:
ALTER USER your_username ACCOUNT UNLOCK; - Check if the account was locked due to too many failed login attempts. Review the account profile:
SELECT profile FROM dba_users WHERE username = 'YOUR_USER';
SELECT resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'FAILED_LOGIN_ATTEMPTS';
Thick mode library not found
Symptoms: Error loading Oracle client libraries, typically DPI-1047: Cannot locate a 64-bit Oracle Client library.
Solutions:
- Verify the
lib_dirpath in the credentials file points to a valid Oracle Instant Client directory. - Confirm the Instant Client version matches the platform (64-bit required).
- Check file permissions on the Instant Client directory.
- On Linux, set
LD_LIBRARY_PATH:export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_8:$LD_LIBRARY_PATH - On Linux, you may also need
libaio:sudo apt-get install libaio1 # Debian/Ubuntu
sudo yum install libaio # RHEL/CentOS
SQL Server Issues
Login failed for user
Symptoms: Login failed for user 'username'
Solutions:
- Confirm SQL Server is configured for SQL Server Authentication (mixed mode), not Windows Authentication only.
- Verify the username and password are correct.
- Check that the user exists and is not disabled:
SELECT name, is_disabled FROM sys.sql_logins WHERE name = 'your_user'; - Check for IP restrictions or firewall rules blocking the connection.
Cannot open database requested by the login
Symptoms: Cannot open database "dbname" requested by the login. The login failed.
Solutions:
- Verify the database name in the credentials file is spelled correctly (case-sensitive on Linux-hosted SQL Server).
- Confirm the user has access to the database:
USE your_database;
SELECT * FROM sys.database_principals WHERE name = 'your_user'; - Check the database is online:
SELECT name, state_desc FROM sys.databases WHERE name = 'your_database';
Netezza Issues
Connection refused
Symptoms: could not connect to server: Connection refused on port 5480.
Solutions:
- Verify the Netezza appliance is powered on and the NPS service is running.
- Confirm the correct port (default: 5480, not 5432).
- Check network connectivity:
telnet nz-host 5480 - Verify firewall rules allow traffic to port 5480.
- Confirm the ODBC driver for Netezza is installed on the MigratorXpress host.
Authentication failed
Symptoms: FATAL: password authentication failed
Solutions:
- Verify the username and password.
- Confirm the user exists in the Netezza system:
SELECT username FROM _v_user WHERE username = 'YOUR_USER'; - Check that the user has access to the target database:
SELECT * FROM _v_object_data WHERE objname = 'YOUR_DATABASE';
General Tips
Enable debug logging
Set --log_level DEBUG to capture detailed diagnostics including SQL statements, FastTransfer commands, and connection details:
./MigratorXpress --auth ./credentials.json \
--log_level DEBUG \
--log_dir /tmp/mig_debug \
...
Check the log file
Every migration run creates a log file named migratorxpress_YYYYMMDD_HHMMSS_<run_id>.log. Review the full log for error context that may not appear in the terminal summary.
Resume after failure
If a migration fails partway through, use --resume to continue from the last successful table rather than starting over:
./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 \
--resume
Verify FastTransfer binary
Confirm the FastTransfer binary is executable and the path is correct:
ls -la ./FastTransfer_linux-x64_v0.12.4/
./FastTransfer_linux-x64_v0.12.4/FastTransfer --version
See Also
- CLI Reference -- all command-line options
- Logging and Monitoring -- log format and database tracking
- Database Configuration -- connection setup
- PostgreSQL -- PostgreSQL-specific configuration
- Oracle -- Oracle-specific configuration
- SQL Server -- SQL Server-specific configuration