У меня следующий код запроса на обновление java, который очень хорошо работает в oracle 11, но по какой-то причине executeUpdate работает неопределенно долго для oracle 12.
for (String strField : hmColumnData.keySet()) {
String strUpdateQuery = "UPDATE MODEL_DATA SET " + strField + " = ? WHERE CONNECTION_ID = ?";
try {
pStmt = conn.prepareStatement(strUpdateQuery);
Clob clob = conn.createClob();
if (clob != null) {
String dataString = hmColumnData.get(strField);
dataString = dataString == null ? "" : dataString;
clob.setString(1, "Test string");
pStmt.setClob(1, clob);
}
pStmt.setLong(2, iConnId);
pStmt.executeUpdate();
conn.commit();
} catch (SQLException e) {
Logger.error("Error occured while updating the CLOB data field from the DataBase", e);
conn.rollback();
}
}
Ниже приведен дамп потока этого конкретного потока.
"model-thread-0" #407 prio=5 os_prio=0 tid=0x000000002ba43000 nid=0x558c runnable [0x000000007c71e000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at oracle.net.ns.Packet.receive(Packet.java:282)
at oracle.net.ns.DataPacket.receive(DataPacket.java:103)
at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:230)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:175)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:100)
at oracle.net.ns.NetInputStream.read(NetInputStream.java:85)
at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:122)
at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:78)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1179)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1155)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:279)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1008)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3530)
- locked <0x000000062378b910> (a oracle.jdbc.driver.T4CConnection)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
at com.eqtechnologic.eqube.mapper.init.eQModelDataManager.updateClobData(eQModelDataManager.java:731)
at com.eqtechnologic.eqube.mapper.init.eQModelWriteObserverImpl.updateSemanticDataInDB(eQModelWriteObserverImpl.java:123)
at com.eqtechnologic.eqube.mapper.init.eQModelWriteObserverImpl.saveCustomXML(eQModelWriteObserverImpl.java:156)
at com.eqtechnologic.eqube.modelutil.ModelLoaderTask.b(ModelLoaderTask.java:120)
at com.eqtechnologic.eqube.modelutil.ModelLoaderTask.execute(ModelLoaderTask.java:67)
at com.eqtechnologic.eqube.concurrent.AbstractThread.run(AbstractThread.java:279)
at com.eqtechnologic.eqube.concurrent.wrapper.RunnableWrapper.execute(RunnableWrapper.java:30)
at com.eqtechnologic.eqube.concurrent.AbstractThread.run(AbstractThread.java:279)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- <0x0000000685d9b8b0> (a java.util.concurrent.ThreadPoolExecutor$Worker)
Чтобы убедиться, что данные, которые я пишу, не вызывают проблему, я изменил строку.
Я пытался зафиксировать соединение перед его использованием, просто чтобы проверить, не приостановлены ли некоторые другие изменения транзакции, все равно она застряла.
Я понятия не имею, что мне не хватает, и у меня нет больших знаний в базе данных, поэтому, пожалуйста, дайте мне какое-то направление.