Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

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

Ошибка ORA-06512: at line — трассировка стека вызовов в Oracle PL/SQL

Обновлено: 26.08.2026  ·  Официальная база знаний
  • В консоли отображается сообщение вида ORA-06512: at "SCHEMA.PACKAGE_NAME", line 145.
  • Ошибка ORA-06512 всегда идет в связке с корневой ошибкой (например, ORA-01403: no data found, ORA-00001 или ORA-01476: divisor is equal to zero).
  • Сбой в выполнении триггеров или хранимых функций 1С/Oracle.

1. Анализ полного стека ошибок

Обратите внимание на самую первую строку в стеке исключений — именно она указывает на реальную причину сбоя, а последующие ORA-06512 лишь показывают путь распространения ошибки по стеку вызовов.

2. Просмотр исходного кода на указанной строке

SELECT text 
FROM all_source 
WHERE owner = 'SCHEMA_NAME' 
  AND name = 'PACKAGE_NAME' 
  AND type = 'PACKAGE BODY' 
  AND line = 145;

3. Использование корректной обработки исключений в PL/SQL

Используйте FORMAT_ERROR_BACKTRACE в блоках EXCEPTION, чтобы не терять исходную строку при перехвате:

BEGIN
    -- Бизнес-логика
    NULL;
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
        DBMS_OUTPUT.PUT_LINE('Backtrace: ' || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
        RAISE;
END;
Практический опыт инженера: Не используйте конструкцию WHEN OTHERS THEN NULL; — это скрывает корневые ошибки и превращает поиск источника проблемы в сложный и длительный процесс.

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

Является ли ORA-06512 самостоятельной ошибкой?

Нет, ORA-06512 — это информационная запись стека вызовов (Stack Trace), которая лишь указывает номер строки и имя объекта, где произошло необработанное исключение.

Почему номер строки в ORA-06512 иногда не совпадает с кодом?

Это происходит, если перед просмотром кода пакет был изменен без компиляции, либо если ошибка возникла внутри анонимного динамического SQL-блока (EXECUTE IMMEDIATE).

Как узнать параметры запроса, вызвавшего ошибку?

Включите расширенное логирование через триггер AFTER SERVERERROR или используйте трассировку событий через DBMS_MONITOR / SQL Trace.

Как защитить код от падения по ORA-01403 (No data found)?

Всегда оборачивайте одиночные операторы SELECT INTO в блок BEGIN ... EXCEPTION WHEN NO_DATA_FOUND THEN ... END.