尝试从 Oracle 导入到 H2 时出现 Temenos DBImport 错误

Posted

技术标签:

【中文标题】尝试从 Oracle 导入到 H2 时出现 Temenos DBImport 错误【英文标题】:Temenos DBImport error when trying to import from Oracle to H2 【发布时间】:2020-03-09 09:38:48 【问题描述】:

我正在尝试使用以下设置将 Temenos T24 数据库从 Oracle 导入 H2:


目标数据库:H2 网址:jdbc:h2:tcp…data/temenos/h2/TAFJDB1 驱动程序:org.h2.Driver 用户 ID:**** 密码:**** 布局:TEXT -> VARCHAR / VARCHAR 使用 XMLBinary:否 保留 TAF_VOC:是 zOS 模式:否

源数据库:Oracle 网址:jdbc:oracle:thin:@...:ORA12C 驱动程序:oracle.jdbc.driver.OracleDriver 用户 ID:**** 密码:****

待办事项 创建表:是 清除表:否 插入记录:是 创建视图:是的

表 进程:全部 排除: 不插入: 从 XML 中排除:F.JOB.LIST.* UD 例外:[F.DL.DATA、DW.EXPORT、&HOLD&、&COMO&]


按继续...

导入运行了大约 50%,然后在错误日志中出现以下错误而停止:

[INFO ] 2020-03-06 09:50:13,683 [Thread-11] DBIMPORT  - Creating TAFJ_CACHE table ...
[ERROR] 2020-03-06 09:50:13,698 [Thread-11] DBIMPORT  - Exception while creating TAFJ_CACHE : 
org.h2.jdbc.JdbcSQLException: Table "TAFJ_CACHE" already exists; SQL statement:
CREATE TABLE TAFJ_CACHE (RECID VARCHAR(255) NOT NULL PRIMARY KEY, CACHENAME VARCHAR(255), WRITEBATCHROWS VARCHAR(5)) [42101-161]
                at org.h2.engine.SessionRemote.done(SessionRemote.java:538) ~[h2-1.3.161.jar:1.3.161]
                at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:183) ~[h2-1.3.161.jar:1.3.161]
                at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:177) ~[h2-1.3.161.jar:1.3.161]
                at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:152) ~[h2-1.3.161.jar:1.3.161]
                at com.temenos.dbi.oracle.DBImport.createTAFJCacheTable(DBImport.java:3144) [TAFJDBImport.jar:19.30.0]
                at com.temenos.dbi.oracle.DBImport.doItForTwoDatabases(DBImport.java:1453) [TAFJDBImport.jar:19.30.0]
                at com.temenos.dbi.gui.MainWindow$4$1.run(MainWindow.java:330) [TAFJDBImport.jar:19.30.0]
                at java.lang.Thread.run(Thread.java:748) [?:1.8.0_241]
[INFO ] 2020-03-06 14:05:36,723 [Thread-11] DBIMPORT  - Processing table :F.STANDARD.SELECTION
[INFO ] 2020-03-06 14:05:36,727 [Thread-11] DBIMPORT  -  Processing table : F.STANDARD.SELECTION
[INFO ] 2020-03-06 14:05:37,449 [Thread-11] DBIMPORT  - Adding table into currentWork : F_STANDARD_SELECTION
[INFO ] 2020-03-06 14:08:31,604 [Thread-11] DBIMPORT  - Adding table into currentWork : D_F_STANDARD_SELECTION
[INFO ] 2020-03-06 14:08:36,998 [Thread-11] DBIMPORT  - Processing table :F.PGM.FILE
[INFO ] 2020-03-06 14:08:36,999 [Thread-11] DBIMPORT  -  Processing table : F.PGM.FILE
[INFO ] 2020-03-06 14:08:37,015 [Thread-11] DBIMPORT  - Adding table into currentWork : F_PGM_FILE
[ERROR] 2020-03-06 14:08:37,017 [Thread-11] DBIMPORT  - Failed Executing: CREATE TABLE "F_PGM_FILE" (RECID VARCHAR(255) NOT NULL PRIMARY KEY, XMLRECORD VARCHAR)
org.h2.jdbc.JdbcSQLException: Table "F_PGM_FILE" already exists; SQL statement:
CREATE TABLE "F_PGM_FILE" (RECID VARCHAR(255) NOT NULL PRIMARY KEY, XMLRECORD VARCHAR) [42101-161]
                at org.h2.engine.SessionRemote.done(SessionRemote.java:538) ~[h2-1.3.161.jar:1.3.161]
                at org.h2.command.CommandRemote.executeUpdate(CommandRemote.java:183) ~[h2-1.3.161.jar:1.3.161]
                at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:177) ~[h2-1.3.161.jar:1.3.161]
                at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:152) ~[h2-1.3.161.jar:1.3.161]
                at com.temenos.dbi.oracle.DBImport.insertDDLSQL(DBImport.java:4438) [TAFJDBImport.jar:19.30.0]
                at com.temenos.dbi.oracle.DBImport.createTable(DBImport.java:2822) [TAFJDBImport.jar:19.30.0]
                at com.temenos.dbi.oracle.DBImportWorker.doWork(DBImportWorker.java:336) [TAFJDBImport.jar:19.30.0]
                at com.temenos.dbi.oracle.DBImport.doItForTwoDatabases(DBImport.java:1494) [TAFJDBImport.jar:19.30.0]
                at com.temenos.dbi.gui.MainWindow$4$1.run(MainWindow.java:330) [TAFJDBImport.jar:19.30.0]
                at java.lang.Thread.run(Thread.java:748) [?:1.8.0_241]
[ERROR] 2020-03-06 14:08:37,018 [Thread-11] DBIMPORT  - Failed to create : 'F_PGM_FILE' Layout : 'TEXT' : org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "F_PGM_FILE" already exists; SQL statement:
CREATE TABLE "F_PGM_FILE" (RECID VARCHAR(255) NOT NULL PRIMARY KEY, XMLRECORD VARCHAR) [42101-200]
                at org.h2.message.DbException.getJdbcSQLException(DbException.java:453)
                at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
                at org.h2.message.DbException.get(DbException.java:205)
                at org.h2.message.DbException.get(DbException.java:181)
                at org.h2.command.ddl.CreateTable.update(CreateTable.java:89)
                at org.h2.command.CommandContainer.update(CommandContainer.java:198)
                at org.h2.command.Command.executeUpdate(Command.java:251)
                at org.h2.server.TcpServerThread.process(TcpServerThread.java:406)
                at org.h2.server.TcpServerThread.run(TcpServerThread.java:183)
                at java.lang.Thread.run(Unknown Source)

[ERROR] 2020-03-06 14:08:37,018 [Thread-11] DBIMPORT  - SQL = :
[ERROR] 2020-03-06 14:08:37,020 [Thread-11] DBIMPORT  - Exception on F.PGM.FILE/F_PGM_FILE : Error creating table in destination connection:F_PGM_FILE
[ERROR] 2020-03-06 14:08:37,021 [Thread-11] DBIMPORT  - Exception on F.PGM.FILE/F_PGM_FILE : Failed to create pgm table.  Terminating.

如果您对我可以做些什么来解决这个问题有任何想法,请告诉我。

谢谢你, 船底座

【问题讨论】:

【参考方案1】:

确保您为此任务使用空白的 H2 数据库/数据文件。使用 tCreateDB 脚本创建一个空白的 TAFJ H2 数据库。此脚本与 TAFJFunctions.jar 一起位于 TAFJ_HOME/dbscripts/h2 中,需要在运行 DBImport 之前将其加载到 DB 中。

如果您要重新启动先前终止的 DBImport,请使用“-startwithfile”选项并输入上次运行 DBImport 处理的最后一个文件(未):

DBImport -startwithfile FBNK.ACCOUNT

还有一个“-endwithfile”选项。

来自 Temenos "TAFJ-DB Setup.pdf" 文档:

-startwithfile DBImport 可以从特定的起点开始创建文件(即,如果您的 DBImport 程序由于某种原因崩溃并且您不想从头开始,这很有用)。请注意,选项后的文件名是 VOC(J4 文件名)而不是 ORACLE 文件名

【讨论】:

我已经加载了 TAFJFunctions.jar 并且数据库是空白的。第二次运行导入时出现此错误,因为它在第一次运行时没有完成,我已经杀死了该进程并在第二天再次运行它。选中“保持 TAF_VOC:是”,该过程应从最后一个表恢复。我在另一篇文章中读到这里有一个 schema.sql,我可以在其中将语句从 CREATE TABLE 更改为 CREATE IF NOT EXIST TABLE。知道该脚本在哪里吗?我试过在那里问这个问题,但它被删除了。 在这种情况下,您是否尝试使用 DBImport 选项“-startwithfile”?我已经更新了我对此的回答。我不确定您是否可以修改 Temenos DBImport 以使用 CREATE IF NOT EXIST ... 是的,我已经尝试过这个选项并且我已经完成了导入。谢谢

以上是关于尝试从 Oracle 导入到 H2 时出现 Temenos DBImport 错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试连接到 Activiti 的 H2 数据库设置时出现异常

尝试在 H2 数据库中创建表时出现 Liquibase 错误

尝试将 json 导入 mongodb 云集合时出现语法错误

尝试将项目从 bitbucket 导入 android studio 时出现问题“存储库测试失败”

尝试将 xml 导入到 android 时出现 OutOfMemoryException

将 mongo 导入到 Azure Cosmos 模拟器时出现问题