Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

ORA-00028 1С:Предприятие и СУБД

Ошибка ORA-00028: your session has been killed — причины и устранение

Обновлено: 26.08.2026 · Официальная документация ↗
  • Клиентское приложение прерывает работу с текстом ORA-00028: your session has been killed.
  • Следующие команды в том же соединении возвращают ORA-01012: not logged on.
  • Внезапный разрыв длительных пакетных операций, фоновых заданий DBMS_SCHEDULER или транзакций 1С.

1. Анализ причин завершения сессии в alert.log

Откройте alert_<ORACLE_SID>.log и найдите записи за соответствующее время:

-- Просмотр пути к trace/alert файлам
SELECT value FROM v$diag_info WHERE name = 'Diag Trace';

2. Проверка лимитов профиля пользователя (IDLE_TIME, CONNECT_TIME)

SELECT p.profile, p.resource_name, p.limit
FROM dba_profiles p
JOIN dba_users u ON p.profile = u.profile
WHERE u.username = 'APP_USER'
  AND p.resource_name IN ('IDLE_TIME', 'CONNECT_TIME');

Если сессия завершается по таймауту бездействия, увеличьте лимит:

ALTER PROFILE DEFAULT LIMIT IDLE_TIME UNLIMITED;
ALTER PROFILE DEFAULT LIMIT CONNECT_TIME UNLIMITED;

3. Идентификация сессий в статусе KILLED / KILLED (marked for kill)

Если сессия долго остается в статусе KILLED, она откатывает незафиксированную транзакцию (Rollback):

SELECT s.sid, s.serial#, s.username, s.status, s.osuser, t.used_ublk
FROM v$session s
LEFT JOIN v$transaction t ON s.saddr = t.ses_addr
WHERE s.status = 'KILLED';

4. Корректный перехват разрыва в приложении

Приложение должно корректно переподключаться к базе данных (Retry logic) при получении ORA-00028, так как дескриптор соединения становится невалидным.

💡 Практика специалистов: Не завершайте процессы со статусом KILLED жестким `kill -9` на уровне ОС, если у сессии в v$transaction есть занятые блоки (used_ublk > 0). Это передаст откат SMON, что вызовет резкую нагрузку на I/O и долгую блокировку строк.

Частые вопросы (FAQ)

Почему после команды ALTER SYSTEM KILL SESSION сессия переходит в статус KILLED, но не исчезает?

Сессия ожидает, пока процесс откатит (rollback) свои активные изменения в табличных пространствах Undo, или пока клиент не сделает следующий сетевой вызов, чтобы получить ошибку ORA-00028.

Может ли Resource Manager автоматически вызывать ORA-00028?

Да. Если в директивах Consumer Group настроен параметр SWITCH_TIME (например, лимит выполнения SQL более 3600 секунд) с действием KILL_SESSION, Oracle принудительно завершит выполнение тяжелого запроса.

Что происходит с транзакцией, прерванной ошибкой ORA-00028?

Ядро СУБД (процесс PMON/SMON) полностью откатывает все незафиксированные изменения транзакции до состояния на момент последнего COMMIT.

В чем разница между KILL SESSION и DISCONNECT SESSION?

KILL SESSION отправляет сигнал прерывания и ждет подтверждения от клиента, а ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' POST_TRANSACTION (или IMMEDIATE) принудительно уничтожает серверный процесс (OS kill) после освобождения ресурсов.

Полезные материалы
Рекомендуем