2013-11-28 2 views
0

У меня есть две установки Oracle 11G. Я могу запустить скрипт, который импортирует базу данных 37 МБ в один из них без проблем (установка A). В другом (установка B), когда я запускаю тот же самый скрипт с тем же самым файлом, он получает «ORA-01000: максимальные открытые курсоры превышены». Я увеличил максимальные открытые курсоры до 20 000, но когда скрипт попадает в строку 20 000, он останавливается с той же ошибкой ORA-01000. Устанавливаемая работа имеет максимальные открытые курсоры, установленные на 300.Какая настройка Oracle препятствует закрытию открытых курсоров?

Очевидно, что нет проблем с сценарием или SQL, потому что он работает в одной базе данных Oracle. Таким образом, в другом экземпляре Oracle должен быть параметр, который предотвращает закрытие открытых курсоров. Что бы это могло быть?

Установка A работает. База данных = Oracle Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production С параметрами разделов, OLAP, интеллектуального анализа данных и реального тестирования приложений. Драйвер = драйвер JDBC Oracle 11.2.0.1.0.

Установка B не работает. База данных = Oracle Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production С разделением, автоматическим управлением хранением данных, OLAP, Data Mining и Real Application Testing. Драйвер = драйвер JDBC Oracle 11.2.0.3.0.

+1

Я думаю, что этот вопрос должен быть: «Почему Oracle открывает новый курсор для (очевидно) каждой записи Вы можете сравнить все параметры Oracle с этим view 'SELECT * FROM V $ PARAMETER'. Посмотрите на параметр Oracle [cursor_sharing] (http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams035.htm) –

+0

Привет, не могли бы вы описать, как вы могли решить эту проблему.Это будет очень полезно, мы тоже в аналогичной ситуации.Спасибо заранее.Однако –

+0

Прошло много времени. Я не помню, как это было решено. – Rubicksman

ответ

0

Я бы рекомендовал проверить, какие курсоры открыты в сеансе. Если вы видите 10.000 операторов, все одинаковые, с открытыми курсорами, в коде что-то не так.

Я сам найти самый простой способ сделать это:

connect sys 

alter system flush shared_pool; /* Removes everything can be finished, the trees hinder my view of the forest. */ 

/* Overall overview. */ 
select * 
from v$sqlarea 

/* Open cursors per session. */ 

select * 
from v$open_cursor 
Смежные вопросы