Ошибка ORA-01012: not logged on в Oracle DB — диагностика сбоев сессий
- Клиент получает ошибку
ORA-01012: not logged onпри выполнении любых SQL-запросов. - Попытка выполнить команду в существующем окне терминала после падения сессии или перезагрузки базы.
- Ошибка при локальном запуске утилит
sqlplus / as sysdbaна сервере СУБД.
1. Проверка состояния локального экземпляра СУБД
# Проверка процессов Oracle на хосте
ps -ef | grep pmon
# Проверка переменной окружения ORACLE_SID
echo $ORACLE_SID2. Проверка аварийного завершения сессии администратором
Если сессия была убита (ALTER SYSTEM KILL SESSION) или отключена по таймауту, дескриптор соединения становится невалидным. Приложению требуется выполнить переподключение (Reconnect).
3. Диагностика сегментов разделяемой памяти (IPC / POSIX Semaphores)
Если ошибка возникает при локальном входе под SYSDBA (sqlplus / as sysdba -> ORA-01012), причиной могут быть зависшие сегменты памяти Shared Memory / Семафоры после некорректного падения экземпляра:
# Поиск осиротевших сегментов памяти пользователя oracle
ipcs -m | grep oracle
# Очистка зависшего сегмента памяти по ID (shmid)
ipcrm -m <SHMID>
ipcrm -s <SEMID>4. Корректный перезапуск экземпляра
sqlplus / as sysdba
SHUTDOWN ABORT;
STARTUP; Частые вопросы (FAQ)
Почему ORA-01012 возникает сразу после выполнения команды ALTER SYSTEM KILL SESSION?
Команда KILL удаляет состояние сессии из памяти ядра. Первый последующий вызов из клиентского соединения возвращает ORA-00028, а все последующие — ORA-01012 (сессия больше не авторизована).
Может ли переполнение файловой системы /tmp вызывать ORA-01012?
Да. При локальном бессетевом подключении через IPC (Bequeath Protocol) Oracle использует сокеты и блокировки в /tmp и /var/tmp. Их недоступность приводит к сбою логина.
Что означает ORA-01012 во время работы утилиты RMAN?
Это означает, что целевая база данных была остановлена или упала в процессе выполнения резервного копирования.
Как избежать ORA-01012 в пулах соединений серверов приложений (WildFly, WebLogic, Tomcat)?
Включите валидацию соединений перед использованием из пула (Connection Validation Query, например: SELECT 1 FROM DUAL или метод isValid() в JDBC4).