我正在为DB2 Universal数据库使用JTOpen JDBC驱动程序。除了简单的陈述之外,我对SQL的经验很少。
从this question开始,我发现在尝试“在事务期间插入/更新非日记表中的行”时(抛弃),我会得到错误(SQL7008)。
根据项目负责人的说法,我们的数据库没有记录,也不会很快(不要问我为什么,我不是DBA)。但是,我正在开发一个能够commit
一次性完成任务的项目(而不是每次调用执行时自动提交)几乎是必要的(并非完全需要,但它可以解决很多问题)问题发生了。)
有没有办法解决erorr SQL7008而不启用Journalling?
答案 0 :(得分:18)
在不启用日记功能的情况下解决此问题的唯一方法是在连接字符串中禁用事务隔离,如下所示:
jdbc:as400://systemname;naming=sql;errors=full;transaction isolation=none;date format=iso
可以在IBM Toolbox for Java JDBC properties文档中找到JDBC属性的完整列表。
答案 1 :(得分:2)
我发现只有在使用INSERT时,在DB2语句末尾使用WITH NONE
才能解决问题。
当我尝试在删除语句上使用SET OPTION COMMIT=*NONE
时,它似乎跳过了where,并删除了所有内容,当我尝试使用WITH NC
或WITH NONE
要解决此问题,请执行以下操作之一:
为数据库表启用日记功能:Windows:添加CLI参数' TxnIsolation'价值' 32'内 您的ODBC设置在"管理工具"下。这个选项可以 发现于:"数据源" - > "高级设置" - > "添加" - > " TXNISOLATION"作为单选按钮" No Commit"。
AIX / Unix :在您的数据库上运行以下DB2命令:' DB2 使用TXNIsolation 32'更新cli cfg的部分。校验 使用以下命令进行这些设置:' db2 get cli cfg'
备用SQL解决方法:(不是特定于操作系统的):添加' WITH NONE'到最后 您的SQL UPDATE命令。
答案 2 :(得分:1)
可以将一个选项添加到disables commitment control。
的连接字符串中可能CommitMode=0
可行。
答案 3 :(得分:0)
SQL7008的官方列表是here(对于SQL7008,请执行CTRL-F)。看起来您可以从原因代码中获取更多信息。如果您获得了原因码3,除了启用日记之外,似乎没有其他选择。
如果你得到的不是原因代码3,那么我想你有更多的选择。
希望有所帮助。
答案 4 :(得分:0)
如果使用CL命令。 follow命令解决了这个问题:
RUNSQLSTM SRCFILE(LIBNAME/SRCFILE) SRCMBR(MBRFILE) COMMIT(*NONE) NAMING(*SQL)