Reference

Error Reference

Quick fixes for every error you might encounter during migration — grouped by category with exact error codes and actionable solutions.

Connection

Connection Errors

ORA-12541TNS: no listener

Oracle listener is not running or host/port is incorrect.

Fix:

Verify host and port (default 1521). Run lsnrctl status on the Oracle server to check listener state.

ORA-01017invalid username/password; logon denied

Credentials are incorrect. Oracle 12c+ passwords are case-sensitive by default.

Fix:

Verify username and password. In Oracle 12c+, passwords are case-sensitive — check exact casing.

pg FATAL: role does not existPostgreSQL role not found

The PostgreSQL username specified does not exist in the target database.

Fix:

Create the role: CREATE ROLE username LOGIN PASSWORD 'pass'; — or verify the username in connection settings.

pg FATAL: database does not existPostgreSQL database not found

The target database has not been created yet.

Fix:

Create the database first: CREATE DATABASE dbname; — then re-test the connection.

Connection timeoutNetwork timeout on port 1521 / 5432

TCP connection to the database port times out — firewall or VPN blocking the route.

Fix:

Check firewall rules, security groups, and VPN. Test with: nc -zv hostname port from the DBMigrateAIPro host.

Migration

Migration Errors

psycopg2.errors.UndefinedColumnColumn name mismatch after DDL conversion

Target table column name does not match source — often a case-sensitivity issue.

Fix:

PostgreSQL lowercases unquoted identifiers. Check DDL in ddl/ folder and ensure column names match.

DataError: invalid input for type numericOracle NUMBER scale mismatch

A NUMBER column value exceeds the precision/scale of the mapped NUMERIC type.

Fix:

Review the type mapping. Override in config/column_overrides.json with a wider NUMERIC(p, s) or use DOUBLE PRECISION.

ForeignKeyViolationFK constraint violated during data load

A child row was inserted before its parent row — common with unordered parallel loads.

Fix:

Enable defer_fks_during_load: true in migration settings. This drops FKs before load and recreates them after.

UniqueViolationDuplicate key on migration target

Source Oracle table has duplicate values in a column that becomes a unique key in PostgreSQL.

Fix:

Run a deduplication query on the source first: SELECT col, COUNT(*) FROM table GROUP BY col HAVING COUNT(*) > 1.

MemoryError during bulk copyOut of memory during COPY operation

Batch size is too large for available memory on the DBMigrateAIPro host.

Fix:

Reduce batch_size from 10000 to 1000 in performance settings. Also check memory_limit_mb.

CDC

CDC Errors

ORA-01291Missing log file — archive log deleted

LogMiner cannot find the archive log containing the requested SCN — it has been purged.

Fix:

Increase LOG_ARCHIVE_DEST retention policy. If logs are gone, restart migration from a fresh SCN.

ORA-06550 / PLS-00302NO_ROWID_IN_REDO — option not supported

Oracle version does not support the LogMiner option used by an older DBMigrateAIPro build.

Fix:

Upgrade to DBMigrateAIPro v2.0+. This option is no longer used in the LogMiner call signature.

LogMiner: SCN too oldStart SCN predates oldest archive log

The start_scn set in CDC config is before the oldest available archive log on disk.

Fix:

Archive logs for that SCN no longer exist. Restart the full migration to capture a current SCN.

MySQL: Access denied for REPLICATION SLAVEMySQL CDC user missing replication grant

The MySQL user used for CDC does not have the REPLICATION SLAVE privilege.

Fix:

Grant the privilege: GRANT REPLICATION SLAVE ON *.* TO 'cdc_user'@'%'; FLUSH PRIVILEGES;

Binlog not enabledMySQL binary logging is off

MySQL is not configured with binary logging — required for CDC row capture.

Fix:

Add log_bin=ON and binlog_format=ROW to my.cnf, then restart MySQL. Verify with SHOW VARIABLES LIKE 'log_bin';

Schema

Schema Conversion Errors

XMLTYPE columnXMLTYPE not mappable to PostgreSQL

Oracle XMLTYPE has no direct PostgreSQL equivalent — requires extraction and type decision.

Fix:

Export as CLOB first: UPDATE table SET xml_col = xml_col.getClobVal(); — then map to JSONB or TEXT.

CONNECT BYHierarchical query not supported in PL/pgSQL

Oracle CONNECT BY / PRIOR syntax is not valid in PostgreSQL.

Fix:

Replace with a recursive CTE: WITH RECURSIVE cte AS (base_case UNION ALL recursive_case) SELECT * FROM cte;

Package body parse errorPL/SQL package cannot be parsed

Oracle package body references package-level variables or pragma that have no PL/pgSQL equivalent.

Fix:

Flatten package procedures to standalone functions: CREATE OR REPLACE FUNCTION schema.pkg_proc_name() ...

Unsupported type: INTERVAL YEAR TO MONTHOracle interval type has no direct mapping

INTERVAL YEAR TO MONTH is not directly supported in PostgreSQL integer or interval types.

Fix:

Map to INTEGER and store months as an integer. Document the semantic change in the migration notes.

Circular FK detectedCircular foreign key graph cannot load sequentially

Table A → FK → Table B → FK → Table A creates a load deadlock with FKs enabled.

Fix:

Enable defer_fks_during_load: true — or manually create FKs after data load with ALTER TABLE ... ADD CONSTRAINT.

Error not listed here?

Check the logs/ folder for the full stack trace, then open an issue on GitHub.

Open a GitHub Issue →