|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Добрый день. Есть функция в оракловом пакете Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Есть модуль в Delphi, который отвечает за связь с БД и в нем вызов функции (она на всех формах вызывается): Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9.
При запуске АРМа хожу по формам, делаю разные действия, через какое-то время вылетает ошибка превышения кол-ва открытых курсоров. Возникает вопрос: я ведь закрыл курсор еще в пакете, почему он остается висеть в открытых? В v$open_cursor вызов представлен как Код: plsql 1.
Как мне закрыть его? Ни Commit, ни Rollback не помогают. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2020, 12:12 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Леонов Юрий, имхо причина в чем-то другом (не в mop_isua_0) напр где-то есть рекурсивный вызов, или в цикле dbms_sql наоткрывал оракл не сразу закрывает курсор (по крайней мере в древних версиях) можна проверить напр на Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
ps nvl(l_ret, 0); nvl лишний ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2020, 16:11 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Подозреваю, что если в Delphi коде есть "инициализация", то должна быть еще и операция "ДЕинициализация" (как минимум закрытие курсора) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2020, 16:16 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Подозреваю, что если в Delphi коде есть "инициализация", то должна быть еще и операция "ДЕинициализация" (как минимум закрытие курсора) Наскоко я понял речь идет о вызове ф-ции в ф-ции курсор закрывается явно, даж если бы не было close CheckAtom; он бы "закрылся" при выходе из зоны видимости я к тому многократный вызов ф-ция mop_isua_0 не должен приводить к "превышения кол-ва открытых курсоров" (ora-1000) зы в принципе ж легко проверить вызвать mop_isua_0 в цыкле делфи больше чем макс-опен-курсор .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2020, 16:34 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Stax Наскоко я понял речь идет о вызове ф-ции Вызов это в любом случае Statement или PreparedStatement (в терминологии Java) Если statement'ы не закрывать, то понятно, что открытые курсоры будут плодиться Код: pascal 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2020, 16:37 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, зря набрал огромную простыню и стер прикинул, мож с точки зрения оракля "Statement" могут выглядеть как курсоры, и "ДЕинициализация" их закроет .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2020, 16:52 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Ситуация разрешилась (не знаю, временно ли или нет). При уничтожении компонента StoredProc я делал Код: pascal 1.
Видно, что-то шло не так и курсоры оставались жить. Когда заменил на Код: pascal 1.
то всё заработало как надо. Единственный минус этой конструкции применимо к компонентам ODAC, это то что после использования сторонних dll вылетает ошибка "Assertion failure". Сейчас сделал костыль такого вида: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Вроде работает... Вопрос можно считать закрытым. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2020, 18:05 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Леонов ЮрийЕдинственный минус этой конструкции применимо к компонентам ODAC, это то что после использования сторонних dll вылетает ошибка "Assertion failure". то есть ты время жизни объекта не контролируешь, память у тебя течёт и портится, но это всё фигня пока Оракул не выдаёт ошибки. По-моему, время перейти с Дельфи на Яву или С#. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2020, 18:31 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Если компонент - это компонент на форме, то вообще не понятно, зачем его руками создавать/уничтожать. Delphi не знаю, сталкивался с ним лет 15 назад. IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2020, 18:41 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
По-моему, время перейти с Дельфи на Яву или С#. Только хуже будет. В Java вообще нет диструкторов, т.ч. resource leak отследить еще сложнее, чем в Delphi. Есть try with resource но IMHO это костыль. Не всегда им можно воспользоваться и код начинает выглядеть многобуквенно. IMHO ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2020, 18:46 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
авторПри уничтожении компонента StoredProc я делал StoredProc := nil; Это НЕ уничтожение компонента. Это просто потеря ссылки на него, объект остается в памяти. Делай Код: pascal 1. 2.
или Код: pascal 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2020, 19:04 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
И вообще все вот эти танцы Код: pascal 1. 2. 3. 4. 5. 6. 7.
можно спокойно заменить на Код: pascal 1.
Эта процедура и так всё это внутри делает сама. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.03.2020, 20:34 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Правильный Вася Эта процедура и так всё это внутри делает сама. 22108946 авторЕдинственный минус этой конструкции применимо к компонентам ODAC, это то что после использования сторонних dll вылетает ошибка "Assertion failure". ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2020, 08:27 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, время жизни я как раз контролирую, это все зашито в процедуре GetStoreProc Компонент создается динамически, используется более чем в 200 процедурах и функциях.\ Создание, очищение и своевременное освобождение протестировано жизнью. Переходить на другие языки смысла не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2020, 08:55 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Правильный Вася И вообще все вот эти танцы Код: pascal 1. 2. 3. 4. 5. 6. 7.
можно спокойно заменить на Код: pascal 1.
Эта процедура и так всё это внутри делает сама. Она так и работала, пока не налетел на баг ODACа по работе с dll-ками ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2020, 08:59 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Леонов ЮрийСоздание, очищение и своевременное освобождение протестировано жизнью. Угу, ты уже говорил про "освобождение присваиванием nil". Жизнь можешь засунуть куда подальше, на обнаружение утечек используются специализированные инструменты класса FastMM или DrMemory. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2020, 12:42 |
|
Почему висят открытые курсоры?
|
|||
---|---|---|---|
#18+
Леонов Юрий Она так и работала, пока не налетел на баг ODACа по работе с dll-ками Обновись до версии >= 9.6.21 и передавай в dll коннект к бд вместо объекта StoredProc ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2020, 12:42 |
|
|
start [/forum/topic.php?fid=52&fpage=49&tid=1881394]: |
0ms |
get settings: |
10ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 287ms |
total: | 419ms |
0 / 0 |