Ошибка ORA-00600: internal error code — диагностика багов ядра Oracle
- Ошибка
ORA-00600: internal error code, arguments: [string], [string], ...в логах или сессиях. - Внезапное аварийное падение фоновых процессов СУБД (PMON, SMON, DBWR, LGWR).
- Автоматическая генерация полного Incident Dump в каталоге
/diag/rdbms/.../incident.
1. Определение первого аргумента и номера инцидента
Первый аргумент в квадратных скобках (например, [kcbzwb_1], [2662], [13013]) определяет подсистему ядра Oracle, зафиксировавшую внутреннее исключение.
2. Сбор диагностического пакета через ADRCI
# Запуск утилиты автоматической диагностики
adrci
# Просмотр списка инцидентов
adrci> show incident
# Просмотр детальной информации по инциденту
adrci> show incident -mode detail -p "incident_id=12345"
# Упаковка инцидента в zip-архив для анализа
adrci> ips pack incident 12345 to /tmp3. Проверка повреждений блоков данных и словаря
Если ошибка связана с повреждением структур памяти или диска, выполните диагностику таблиц:
-- Проверка целостности таблицы и индексов
ANALYZE TABLE schema_name.table_name VALIDATE STRUCTURE CASCADE ONLINE;4. Поиск патча в My Oracle Support (MOS Lookup)
Используйте инструмент ORA-600/ORA-07445/ORA-04030 Error Lookup Tool (Doc ID 153788.1) на портале My Oracle Support, указав первый аргумент ошибки и версию вашей СУБД (например, 19.18.0.0.0) для подбора необходимого RU (Release Update) или Interim Patch (One-off patch).
Частые вопросы (FAQ)
Означает ли ошибка ORA-00600 обязательное повреждение данных (Corruption)?
Нет. ORA-00600 означает, что проверка внутренним assertion ядра Oracle вернула false. Это может быть как обычный баг оптимизатора CBO или парсера SQL, так и физическое повреждение блока в оперативной памяти/диске.
Как быстро собрать все логи для службы поддержки через Trace File Analyzer (TFA)?
Запустите команду tfactl diagcollect -srdc ora600 от имени root или oracle. Утилита автоматически соберет alert.log, system stats, trace и incident-файлы в единый архив.
Что делать, если ORA-00600 возникает только при выполнении одного конкретного SQL-запроса?
Часто причиной является баг Cost-Based Optimizer. Попробуйте временно отключить проблемную трансформацию запроса через подсказки (Hints), например /*+ NO_QUERY_TRANSFORMATION */ или изменив параметр optimizer_features_enable на уровне сессии.
В чем разница между ORA-00600 и ORA-07445?
ORA-00600 вызывается внутренней проверкой кода Oracle (программное исключение), а ORA-07445 вызывается исключением уровня ОС (например, Segmentation Fault SIGSEGV или Bus Error SIGBUS при обращении к некорректному адресу памяти).