Migration from Oracle to Postgres fails with—Protocol violation: [ 14, 116, ]
Summary
A database migration from Oracle to PostgreSQL could fail with the following errors preventing the migration from succeeding.
Problem
Database migration from Oracle to Postgres fails and the following is found in the atlassian-fisheye-YYYY-MM-DD.log
:
2020-08-08 14:00:45,688 ERROR [ThreadPool1 ] fisheye DBEditHelper-doGet - Database migration failed: java.sql.SQLException: Protocol violation: [ 14, 116, ]
java.sql.SQLException: Protocol violation: [ 14, 116, ]
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:669) [ojdbc7-12.1.0.1.jar:12.1.0.1.0]
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249) [ojdbc7-12.1.0.1.jar:12.1.0.1.0]
at oracle.jdbc.driver.T4C8TTIClob.read(T4C8TTIClob.java:245) [ojdbc7-12.1.0.1.jar:12.1.0.1.0]
at oracle.jdbc.driver.T4CConnection.getChars(T4CConnection.java:3901) [ojdbc7-12.1.0.1.jar:12.1.0.1.0]
at oracle.sql.CLOB.getChars(CLOB.java:517) [ojdbc7-12.1.0.1.jar:12.1.0.1.0]
at oracle.sql.CLOB.getSubString(CLOB.java:354) [ojdbc7-12.1.0.1.jar:12.1.0.1.0]
at oracle.jdbc.driver.ClobAccessor.getString(ClobAccessor.java:454) [ojdbc7-12.1.0.1.jar:12.1.0.1.0]
at oracle.jdbc.driver.GeneratedStatement.getString(GeneratedStatement.java:327) [ojdbc7-12.1.0.1.jar:12.1.0.1.0]
at oracle.jdbc.driver.GeneratedScrollableResultSet.getString(GeneratedScrollableResultSet.java:882) [ojdbc7-12.1.0.1.jar:12.1.0.1.0]
at com.atlassian.crucible.migration.item.DBExporter$OracleColumnExporter.export(DBExporter.java:271) [fisheye.jar:?]
at com.atlassian.crucible.migration.item.DBExporter.exportRow(DBExporter.java:361) [fisheye.jar:?]
at com.atlassian.crucible.migration.item.DBExporter.exportTable(DBExporter.java:164) [fisheye.jar:?]
at com.atlassian.crucible.migration.item.DBExporter.exportData(DBExporter.java:103) [fisheye.jar:?]
at com.atlassian.crucible.actions.admin.database.DBEditHelper$ExportRunner.call(DBEditHelper.java:120) [fisheye.jar:?]
at com.atlassian.crucible.actions.admin.database.DBEditHelper$ExportRunner.call(DBEditHelper.java:99) [fisheye.jar:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_252]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_252]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.8.0_252]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_252]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_252]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252]
And
2020-08-08 14:00:45,972 ERROR [ThreadPool1 ] fisheye DBEditHelper-doGet - Database migration failed: com.cenqua.crucible.hibernate.CruDBException: Problem with constraints script <FISHEYE_HOME>/sql/POSTGRESQL/schema/constraints_108.sql
com.cenqua.crucible.hibernate.CruDBException: Problem with constraints script <FISHEYE_HOME>/sql/POSTGRESQL/schema/constraints_108.sql
at com.cenqua.crucible.hibernate.DefaultDBControl.addConstraints(DefaultDBControl.java:377) [fisheye.jar:?]
at com.atlassian.crucible.migration.item.DBImporter.importData(DBImporter.java:145) [fisheye.jar:?]
at com.atlassian.crucible.actions.admin.database.DBEditHelper$ImportRunner.call(DBEditHelper.java:91) [fisheye.jar:?]
at com.atlassian.crucible.actions.admin.database.DBEditHelper$ImportRunner.call(DBEditHelper.java:73) [fisheye.jar:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_252]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_252]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [?:1.8.0_252]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_252]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_252]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252]
Caused by: com.cenqua.crucible.hibernate.CruDBException: SQL script error on line 4: "alter table cru_comment add constraint FKE5A1D10674DF349C foreign key (cru_reply_to_comment_id) references cru_comment;"
(ERROR: insert or update on table "cru_comment" violates foreign key constraint "fke5a1d10674df349c"
Detail: Key (cru_reply_to_comment_id)=(418841) is not present in table "cru_comment".), please contact http://www.atlassian.com/support/
at com.cenqua.crucible.hibernate.DefaultDBControl.executeScript(DefaultDBControl.java:595) [fisheye.jar:?]
at com.cenqua.crucible.hibernate.DefaultDBControl.executeScript(DefaultDBControl.java:524) [fisheye.jar:?]
at com.cenqua.crucible.hibernate.DefaultDBControl.addConstraints(DefaultDBControl.java:371) [fisheye.jar:?]
... 9 more
Caused by: org.postgresql.util.PSQLException: ERROR: insert or update on table "cru_comment" violates foreign key constraint "fke5a1d10674df349c"
Detail: Key (cru_reply_to_comment_id)=(418841) is not present in table "cru_comment".
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2468) [postgresql-42.2.6.jar:42.2.6]
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2211) [postgresql-42.2.6.jar:42.2.6]
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:309) [postgresql-42.2.6.jar:42.2.6]
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:446) [postgresql-42.2.6.jar:42.2.6]
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:370) [postgresql-42.2.6.jar:42.2.6]
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:311) [postgresql-42.2.6.jar:42.2.6]
at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:297) [postgresql-42.2.6.jar:42.2.6]
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:274) [postgresql-42.2.6.jar:42.2.6]
at org.postgresql.jdbc.PgStatement.executeUpdate(PgStatement.java:246) [postgresql-42.2.6.jar:42.2.6]
at com.cenqua.crucible.hibernate.DefaultDBControl.executeScript(DefaultDBControl.java:566) [fisheye.jar:?]
... 11 more
Diagnosis
Environment
Your Fisheye 4.8.X instance is configured to use Oracle ojdbc7.jar
version 12.1.0.1
to connect to Oracle 12c Database.
Cause
This issue is caused by the JDBC driver ojdbc7 version 12.1.0.1, while reading a clob data of length 4193 that is selected from a table in a UTF-8/AL32UTF8 Oracle database.
More details can be found at Oracle support center below.
Oracle Support java.sql.SQLException: Protocol violation When Reading CLOB (Doc ID 1616830.1)
Resolution
Update the JDBC driver to ojdbc8-12.2.0.1
- Download the ojdbc8-12.2.0.1 driver;
- Move the driver to
<FISHEYE_INST>/lib
(Create the folder if it doesn't exist); - Restart the application;
- Try the database migration again.
Additional information on how to perform a database migration to PostgreSQL can be found at article below