Я получаю исключение ORA-01000 SQL. Поэтому у меня есть некоторые связанные с ним запросы.
- Являются ли максимальные открытые курсоры точно связанными с количеством подключений JDBC или связаны также с объектами оператора и результатов, которые мы создали для одного соединения? (Мы используем пул соединений)
- Есть ли способ настроить количество объектов statement/resultset в базе данных (например, соединения)?
- Целесообразно ли использовать объект экземпляра переменной/результат для объекта вместо объекта локального оператора/объекта результатов в одной потоковой среде?
-
Выполняет ли выполнение подготовленного оператора в цикле эту проблему? (Конечно, я мог бы использовать sqlBatch) Примечание: pStmt закрывается после завершения цикла.
{ //method try starts String sql = "INSERT into TblName (col1, col2) VALUES(?, ?)"; pStmt = obj.getConnection().prepareStatement(sql); pStmt.setLong(1, subscriberID); for (String language : additionalLangs) { pStmt.setInt(2, Integer.parseInt(language)); pStmt.execute(); } } //method/try ends { //finally starts pStmt.close() } //finally ends
-
Что произойдет, если conn.createStatement() и conn.prepareStatement(sql) вызываются несколько раз на одном объекте соединения?
Edit1: 6. Помогает ли использование объекта Weak/Soft reference statement в предотвращении утечки?
Edit2: 1. Есть ли способ, я могу найти все недостающие "statement.close()" в моем проекте? Я понимаю, что это не утечка памяти. Но мне нужно найти ссылку справки (где close() не выполняется), подходящей для сбора мусора? Любой инструмент доступен? Или мне нужно проанализировать его вручную?
Пожалуйста, помогите мне понять это.
Решение
Чтобы найти открытый курсор в Oracle DB для имени пользователя -VELU
Перейдите в машину ORALCE и запустите sqlplus как sysdba.
[[email protected] ~]$ sqlplus / as sysdba
Затем запустите
SELECT A.VALUE,
S.USERNAME,
S.SID,
S.SERIAL#
FROM V$SESSTAT A,
V$STATNAME B,
V$SESSION S
WHERE A.STATISTIC# = B.STATISTIC#
AND S.SID = A.SID
AND B.NAME = 'opened cursors current'
AND USERNAME = 'VELU';
Если возможно, пожалуйста, прочитайте мой ответ в конце.