вторник, 1 сентября 2015 г.

ORACLE. "ORA-01075: Вы уже зарегистрированы" после получения ошибки ORA-04031 ["ORA-01075: you are currently logged on" with ORA-04031]

Описание:
Рассмотрим случай когда на БД появилось сообщение вида:

ORA-00604: error occurred at recursive SQL level 2
ORA-04031: unable to allocate 3896 bytes of shared memory ("shared
pool","select t.ts#,t.file#,t.block...","sga heap(1,0)","kglsim object batch")

Аналогично это сообщение будет отображено в alert.log.

После этого пытаемся подключиться к БД под SYS и получаем ошибку:

>sqlplus / as sysdba
ERROR:
ORA-01075: you are currently logged on 



Не получается и зайти обычным пользователем.
Для начала нужно решить проблему ORA-04031, т.к. ORA-01075 является её следствием.

Решение №1:

Подключиться под пользователем SYSTEM и выполнить команду alter system flush shared_pool;, если выполнение заканчивается ошибкой:

SQL> alter system flush shared_pool; alter system flush shared_pool * ERROR at line 1: ORA-02002: error while writing to audit trail ORA-00604: error occurred at recursive SQL level 2 ORA-04031: unable to allocate 3896 bytes of shared memory ("shared pool","select t.ts#,t.file#,t.block...","sga heap(1,0)","kglsim object batch")
Переходим к другому способу.
 
Решение №2:

Убьем процесс БД, перезагрузимся и увеличим размер shared_pool.
 Шаг 1. Найдем и убьем процесс БД.

> ps -ef|grep pmon|grep usbs09
oracle    4465     1  0 May10 ?        00:06:30 ora_pmon_usbs09

> kill -9 4465

USBS09 в данном случае SID_NAME, указанный в listener.ora:
----
SID_LIST_LISTENER=
 (SID_LIST=
 (SID_DESC=
 (ORACLE_HOME=/u/app/oracle/product/11.2.0/dbhome_1)
 (SID_NAME=usbs09)
 )
----

Шаг 2. Подключаемся к БД и поднимаем инстанс.

sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Mon Mar 24 01:25:05 2014
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to an idle instance.  
SQL> startup
ORACLE instance started.
Database mounted.
Database opened.


Шаг 3. Увеличиваем размер shared_pool_size 
Команда:
alter system set shared_pool_size=524288000  scope=both sid='usbs09';

Выставит значение shared_pool_size = 512MB
Примечание.
Параметр shared_pool_size не может превышать значения sga_max_size.

Иначе получим сообщение об ошибке:

SQL> alter system set shared_pool_size=3145728000  scope=both sid='usbs09';
alter system set shared_pool_size=3145728000  scope=both sid='usbs09'
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-04033: Insufficient memory to grow pool


Версия Oracle:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0

Переведено и дополнено со статьи:
http://satishvchandran.blogspot.ru/2014/03/ora-01075-you-are-currently-logged-on.html

1 комментарий:


  1. По указанной линке содержиться скрипт для генерации текущих переменных окружения (environment) для базы данных.
    Так же в нем имеется хороший пример файла среды для базы данных.

    http://dbpilot.net/2018/01/30/generating-an-enviroment-file-from-pl-sql/

    ...

    ОтветитьУдалить