executeUpdate работает бесконечно для oracle 12c - PullRequest
0 голосов
/ 20 января 2020

У меня следующий код запроса на обновление 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)

Чтобы убедиться, что данные, которые я пишу, не вызывают проблему, я изменил строку.

Я пытался зафиксировать соединение перед его использованием, просто чтобы проверить, не приостановлены ли некоторые другие изменения транзакции, все равно она застряла.

Я понятия не имею, что мне не хватает, и у меня нет больших знаний в базе данных, поэтому, пожалуйста, дайте мне какое-то направление.

...