在HANA数据库上运行事务时出错

时间:2018-01-15 05:52:29

标签: database multithreading transactions hana bulk

我正在HANA数据库上运行批量交易并收到以下错误:

2018-01-15 10:23:33,865 ERROR c.c.t.Payment [tpcc-thread-5] UPDATE district SET d_ytd = d_ytd + 1601.0 WHERE d_w_id = 1 AND d_id = 1
com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: [138]: transaction serialization failure: TrexUpdate failed on table 'SYSTEM:DISTRICT' with error: transaction order error, rc=4614
at com.sap.db.jdbc.exceptions.SQLExceptionSapDB._newInstance(SQLExceptionSapDB.java:193)
.......
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
2018-01-15 10:23:34,139 ERROR c.c.t.Payment [tpcc-thread-5] Payment error
java.lang.Exception: Payment update transaction error

任何人都知道可能出现什么问题?

1 个答案:

答案 0 :(得分:0)

我发现这是一个有效的错误。对于事务类型REPEATABLE_READ或SERIALIZABLE,当在一个事务结束之前,另一个事务修改了正在处理事务的相同数据时,可能会发生此问题。

为了摆脱这个错误,我们可以使用事务类型READ_COMMITTED,它在开始时获取数据的快照,并在整个事务中使用相同的数据。它还会锁定其工作的行,以便其他事务无法修改它。