Что я делаю
Я работаю над драйвером Oracle, включающим OCI.Чтобы проверить это (в основном стабильность и устранение утечек памяти), я использую Oracle Database 11g Express Edition (я не эксперт Oracle, поэтому я не знаю, подходит ли эта версия для работы).Для этого ему необходимо совершить много транзакций одновременно: десятки соединений одновременно, каждое из которых поддерживает пул сеансов, в котором десятки сеансов одновременно создают таблицы, вставляют большое количество данных и удаляют таблицы.
В любом случае, я быстро получил следующую ошибку:
ORA-12516: TNS: слушателю не удалось найти доступный обработчик с соответствующим стеком протоколов
Как оказалось,Это связано с тем, что ограничения Процессы / Сеансы / Транзакции недостаточно высоки.В поисках в Интернете мне сказали, что их можно установить следующим образом:
alter system set processes=1000 scope=spfile;
alter system set sessions=1000 scope=spfile;
alter system set transactions=1000 scope=spfile;
Очевидно, правда сложнее, чем это, потому что эти значения устанавливаются в зависимости друг от друга, и как это работает, кажется,быть разными в каждой версии.Согласно документации Oracle здесь все зависит от Процессы :
Значения по умолчанию для параметров SESSIONS и TRANSACTIONS получены из этого параметра.
И Процессы НЕ МОГУТ быть изменены:
Изменяемый №
... в то же время он говорит о том, что происходит при измененииit:
Поэтому, если вы измените значение PROCESSES [...]
Так что это не очень полезно.Или, может быть, я что-то здесь неправильно понимаю.В любом случае, с помощью вызовов alter system
, указанных выше, я изменил значения, и изменения прошли успешно.Когда я делаю этот вызов
(select 'sessions', current_utilization, limit_value from v$resource_limit where resource_name='sessions')
union
(select 'processes', current_utilization, limit_value from v$resource_limit where resource_name='processes')
union
(select 'transactions', current_utilization, limit_value from v$resource_limit where resource_name='transactions');
, я получаю следующий результат:
'SESSIONS' CURRENT_UTILIZATION LIMIT_VALUE
------------ ------------------- ----------------------------------------
processes 314 1000
sessions 317 1524
transactions 2 UNLIMITED
Похоже, что процессы могут изменяться в отличие от документации Oracle, сеансы установлены на 2 больше, чемprocesses * 1.5 + 22
правило описано здесь , и транзакции кажутся неограниченными.Изменения вступили в силу, теперь я могу установить гораздо больше подключений и сеансов, не обнаружив ошибки ORA-12516
.Пока все хорошо.
Моя проблема
Я хотел еще больше подключений, поэтому я попытался установить его на 10000. Однако, когда я это сделал, база данных даже не запустилась должным образом.Когда я пытаюсь подключиться к нему с помощью sqlplus, я получаю следующее сообщение:
Подключен к бездействующему экземпляру
Я не могу использовать базу данных в любом случае,и startup
тоже не сработает.Я переустановил базу данных, установил ее на 1000, перезагрузился, и это сработало.Переустановка и перезагрузка без изменения настроек также работает.Однако переустановка, установка 10000 и перезагрузка не работает.Это заставляет меня поверить, что есть предел того, насколько высокими могут быть установлены эти значения, и что превышение этого предела сделает базу данных не способной к правильному запуску.
Поэтому мой вопрос: каковы максимальные процессы / сеансы /Ограничения транзакций, которые я могу установить для Oracle Database 11g Express Edition?Существуют ли факторы, влияющие на такой предел, который я мог бы контролировать / изменять?Или я ужасно неправильно понимаю все это, и решение - это нечто совершенно другое?Машина, на которой я работаю, это довольно мощная машина под управлением Windows 10, поэтому проблема с питанием не должна быть проблемой.За исключением, может быть, если в программном обеспечении установлен искусственный лимит, и я нашел такие комментарии в своем поиске.
Заранее спасибо.