Error Reference
Quick fixes for every error you might encounter during migration — grouped by category with exact error codes and actionable solutions.
Jump to section
Connection Errors
Oracle listener is not running or host/port is incorrect.
Verify host and port (default 1521). Run lsnrctl status on the Oracle server to check listener state.
Credentials are incorrect. Oracle 12c+ passwords are case-sensitive by default.
Verify username and password. In Oracle 12c+, passwords are case-sensitive — check exact casing.
The PostgreSQL username specified does not exist in the target database.
Create the role: CREATE ROLE username LOGIN PASSWORD 'pass'; — or verify the username in connection settings.
The target database has not been created yet.
Create the database first: CREATE DATABASE dbname; — then re-test the connection.
TCP connection to the database port times out — firewall or VPN blocking the route.
Check firewall rules, security groups, and VPN. Test with: nc -zv hostname port from the DBMigrateAIPro host.
Migration Errors
Target table column name does not match source — often a case-sensitivity issue.
PostgreSQL lowercases unquoted identifiers. Check DDL in ddl/ folder and ensure column names match.
A NUMBER column value exceeds the precision/scale of the mapped NUMERIC type.
Review the type mapping. Override in config/column_overrides.json with a wider NUMERIC(p, s) or use DOUBLE PRECISION.
A child row was inserted before its parent row — common with unordered parallel loads.
Enable defer_fks_during_load: true in migration settings. This drops FKs before load and recreates them after.
Source Oracle table has duplicate values in a column that becomes a unique key in PostgreSQL.
Run a deduplication query on the source first: SELECT col, COUNT(*) FROM table GROUP BY col HAVING COUNT(*) > 1.
Batch size is too large for available memory on the DBMigrateAIPro host.
Reduce batch_size from 10000 to 1000 in performance settings. Also check memory_limit_mb.
CDC Errors
LogMiner cannot find the archive log containing the requested SCN — it has been purged.
Increase LOG_ARCHIVE_DEST retention policy. If logs are gone, restart migration from a fresh SCN.
Oracle version does not support the LogMiner option used by an older DBMigrateAIPro build.
Upgrade to DBMigrateAIPro v2.0+. This option is no longer used in the LogMiner call signature.
The start_scn set in CDC config is before the oldest available archive log on disk.
Archive logs for that SCN no longer exist. Restart the full migration to capture a current SCN.
The MySQL user used for CDC does not have the REPLICATION SLAVE privilege.
Grant the privilege: GRANT REPLICATION SLAVE ON *.* TO 'cdc_user'@'%'; FLUSH PRIVILEGES;
MySQL is not configured with binary logging — required for CDC row capture.
Add log_bin=ON and binlog_format=ROW to my.cnf, then restart MySQL. Verify with SHOW VARIABLES LIKE 'log_bin';
Schema Conversion Errors
Oracle XMLTYPE has no direct PostgreSQL equivalent — requires extraction and type decision.
Export as CLOB first: UPDATE table SET xml_col = xml_col.getClobVal(); — then map to JSONB or TEXT.
Oracle CONNECT BY / PRIOR syntax is not valid in PostgreSQL.
Replace with a recursive CTE: WITH RECURSIVE cte AS (base_case UNION ALL recursive_case) SELECT * FROM cte;
Oracle package body references package-level variables or pragma that have no PL/pgSQL equivalent.
Flatten package procedures to standalone functions: CREATE OR REPLACE FUNCTION schema.pkg_proc_name() ...
INTERVAL YEAR TO MONTH is not directly supported in PostgreSQL integer or interval types.
Map to INTEGER and store months as an integer. Document the semantic change in the migration notes.
Table A → FK → Table B → FK → Table A creates a load deadlock with FKs enabled.
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.