【完全ガイド】ORA-00600: internal error code の原因と解決方法|引数の読み方・MOS 検索・AHF/TFA まで徹底解説
- 作成日 2026.07.24
- Oracle Database その他
Oracle DBA が最も恐れるエラー:
ORA-00600: internal error code, arguments: [kdsgrp1], [12], [], [], [], [], [], [], [], [], [], []
一般的な Oracle エラーとは違い、Oracle カーネル内部で予期せぬ状態を検出した際に発生する汎用内部エラー。日本では「オラろく」とも呼ばれ、以下の特徴があります:
- Oracle バグの可能性が高い(未パッチ)
- データ破損の兆候
- 本番 DB が停止するリスク
ORA-07445と混同されがち(ORA-07445 は OS シグナルエラー)- 日本語での解説が少ない
- エラーメッセージだけでは何もわからない(引数を解読する必要)
現場では:
- 深夜バッチで突然発生し停止
- DB 起動時に発生(ORA-00600: kcratr_nab_less_than_odr 等)
- 特定 SQL でのみ発生
- RU/PSU 適用後に消える or 発生
- RAC 環境で片ノードだけ発生
- My Oracle Support(MOS)を検索しても該当なし
- サポート契約なしで対処法が分からない
さらに、多くの記事は「MOS を確認しろ」で終わっているが、実務では:
- 引数の意味を理解する
- トレースファイルを解析する
- AHF/TFA で診断情報自動収集
- Automatic Diagnostic Repository (ADR) の活用
- Data Recovery Advisor の使用
- ADRCI の使い方
- サポート契約 (SR) の開き方
- Rails/Java/Python でのハンドリング
など、深い知識が必要です。
本記事では、ORA-00600: internal error code の完全な原因と解決方法を、リファレンスとして実用的に整理します。ORA-00600 vs ORA-07445 の違い、引数の読み解き方、トレースファイル場所、MOS 検索テクニック、AHF/TFA 使用法、パッチ管理戦略、サポート契約の重要性、Rails/Java/Python 対応、実践シナリオ、予防のベストプラクティス、FAQまで完全網羅。この1本で ORA-00600 に冷静に対処できるようになります。
- 1. 結論:まず引数と alert log を確認
- 2. まず理解する:ORA-00600 の本質
- 3. エラーメッセージから情報を抽出
- 4. MOS ORA-600 Lookup Tool の使い方
- 5. AHF / TFA の使用
- 6. ADRCI の使い方
- 7. 【原因①】Oracle バグ(最頻出)
- 8. 【原因②】データ破損
- 9. 【原因③】メモリ問題
- 10. 【原因④】UNDO 関連
- 11. 【原因⑤】DB 起動時(Redo Recovery)
- 12. 【原因⑥】特定 SQL 起因
- 13. Service Request (SR) オープン
- 14. Rails / Java / Python 対応
- 15. 実践シナリオ
- 16. 予防のベストプラクティス
- 17. トラブルシューティング
- 18. よくある質問(FAQ)
- 19. 参考リンク
- 20. まとめ
結論:まず引数と alert log を確認
時間がない方向けに、最速の対処を先に示します。
3つのアクション
1. alert log を確認 → トレースファイルの場所を特定
2. 第一引数を Web / MOS で検索
3. パッチ適用可能性を検討 or SR オープン
まず現状把握
# alert log の場所
find $ORACLE_BASE/diag -name "alert*.log" 2>/dev/null
# または SQL で
SELECT value FROM v$diag_info WHERE name = 'Diag Alert';
# トレースファイルの場所
SELECT value FROM v$diag_info WHERE name = 'Diag Trace';
# 直近のインシデント
SELECT incident_id, error_facility, error_number, create_time
FROM v$diag_incident
ORDER BY create_time DESC
FETCH FIRST 10 ROWS ONLY;
エラーメッセージの構造
ORA-00600: internal error code, arguments: [第一引数], [第二引数], ...
例:
ORA-00600: internal error code, arguments: [kdsgrp1], [12], [], [], ...
↑最重要!
- 第一引数: 内部関数名 or エラー種別(最重要、これで検索)
- 第二引数以降: コンテキスト情報
5大対処法
| # | 対処 | 使う場面 |
|---|---|---|
| ① | MOS ORA-600 Lookup Tool | 既知バグの検索 |
| ② | パッチ適用(RU/PSU) | 既知バグの解決 |
| ③ | DBMS_STATS 再収集 | 統計情報起因 |
| ④ | データファイル整合性 | データ破損 |
| ⑤ | SR オープン | 上記で解決しない |
ORA-00600 vs ORA-07445
| エラー | 意味 |
|---|---|
| ORA-00600 | Oracle 内部の予期せぬ状態(アサート違反等) |
| ORA-07445 | OS レベルのシグナル(SEGV, ABRT 等) |
両方とも重大、両方ともサポート対応。
詳細は以下で解説します。
まず理解する:ORA-00600 の本質
メッセージ全文
ORA-00600: internal error code, arguments: [string], [string], [string],
[string], [string], [string], [string], [string], [string], [string],
[string], [string]
汎用内部エラー、Oracle カーネルの様々な場所で使用。
Oracle 公式の説明
Cause: This is the generic internal error number for Oracle program exceptions.
Note: The cause of this message may manifest itself as different errors
at different times. Be aware of the history of errors that occurred
before this internal error.
Action: Visit My Oracle Support to access the ORA-00600 Lookup tool
(reference Note 600.1)
翻訳: 「汎用内部エラー番号。エラーの原因は時により異なる形で現れる。この内部エラーの前に発生したエラー履歴に注意」
発生の意味
Oracle カーネル内部でアサート違反(assert):
- 「これは絶対起きないはず」の条件が発生
- Oracle が安全のため停止(プロセス、時にはインスタンス)
- バグの可能性が最も高い
ORA-00600 vs ORA-07445 の完全比較
| 項目 | ORA-00600 | ORA-07445 |
|---|---|---|
| 発生元 | Oracle カーネル | OS シグナル |
| 例 | [kdsgrp1], [12700] | [SIGSEGV], [SIGABRT] |
| 原因 | アサート違反、内部状態不整合 | OS 例外(メモリアクセス違反等) |
| 対処 | MOS 検索、パッチ | 同じ |
| 重大度 | 高 | 高 |
両方とも SR オープン対象。
第一引数の意味
[kdsgrp1] ← 関数名(kernel data ...)
[12700] ← エラー番号
[qcsprc] ← Query Compilation ...
[kcratr_nab_less_than_odr] ← Kernel Cache Recovery ...
[6006] ← 特定のエラーコード
[4193] ← Undo 関連
先頭の文字/数字で内部モジュールが分かる(DBA なら少しずつ推測できる)。
エラーメッセージから情報を抽出
Alert Log 確認
# 場所(19c/23ai 例)
$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_<SID>.log
# 直近のORA-00600を検索
grep -B 2 -A 10 "ORA-00600" alert_ORCL.log | tail -50
例:
Wed Jun 15 03:14:17 2026
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_12345.trc (incident=37785):
ORA-00600: internal error code, arguments: [kdsgrp1], [12], [], [], ...
Incident details in: /u01/app/oracle/diag/rdbms/orcl/orcl/incident/incdir_37785/orcl_ora_12345_i37785.trc
キー情報:
orcl_ora_12345.trc: プロセス トレースincident=37785: インシデント番号incdir_37785: インシデント ディレクトリ
トレースファイル解析
# トレースファイルの冒頭
head -100 /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_12345.trc
情報:
- エラー発生時の SQL
- バインド変数の値
- セッション情報
- コールスタック(内部関数呼び出し)
インシデント パッケージ (IPS)
# ADRCI で全情報を圧縮
adrci
adrci> show homes
adrci> set home diag/rdbms/orcl/orcl
adrci> ips create package incident 37785
adrci> ips generate package 1 in /tmp
# → 圧縮 zip ファイルが生成
Oracle Support へ送信する情報の完全パッケージ。
V$DIAG_INFO
SELECT name, value FROM v$diag_info;
情報:
- ADR Base:
/u01/app/oracle - ADR Home:
/u01/app/oracle/diag/rdbms/orcl/orcl - Diag Trace: トレースディレクトリ
- Diag Alert: alert log ディレクトリ
- Diag Incident: インシデント ディレクトリ
MOS ORA-600 Lookup Tool の使い方
アクセス
My Oracle Support (MOS) の有償契約が必要:
https://support.oracle.com
ORA-600 Lookup Tool (Note 600.1)
MOS で検索:
ORA-600 Lookup Tool
または直接 Note 600.1 を開く。
検索方法
1. Oracle Version: 19.20.0.0.0 等
2. First Argument: kdsgrp1 等(大文字小文字区別しない)
3. Search
結果:
- 関連する Bug 番号
- Known Issue Note
- 修正済み Release Update (RU) / Patch Set Update (PSU)
- Workaround(あれば)
引数の意味を推測
第一引数の先頭文字でモジュール推測:
| 先頭 | モジュール | 例 |
|---|---|---|
kc- | Kernel Cache | kcratr_… (recovery) |
kd- | Kernel Data | kdsgrp1 |
kg- | Kernel Generic | kgkprrpicknext1 |
kk- | Kernel Kompile | kkslgop |
kq- | Kernel Query | kqllsc |
ks- | Kernel Service | ksfdmp |
kt- | Kernel Transaction | ktcx |
q- | Query | qerpx |
Oracle エンジニアの推測補助。
AHF / TFA の使用
AHF(Autonomous Health Framework)とは
Oracle 提供の無償診断ツール:
- TFA(Trace File Analyzer) を含む
- 自動診断・トラブルシューティング
- MOS への SR オープン支援
インストール確認
# インストール済みか確認
tfactl print status
未インストールなら:
# ダウンロード(MOS)
# インストール
$ORACLE_HOME/suptools/tfa/release/tfa_home/install/tfa_setup.sh -silent
診断収集
# 過去2時間の診断情報収集
tfactl diagcollect -since 2h
# 特定 SQL_ID
tfactl diagcollect -sql_id abc123def456
# ORA-00600 検出時
tfactl analyze -search "ORA-00600" -since 1d
障害分析
# TFA の分析
tfactl orachk -a
# 結果
# → 潜在的な問題、既知バグ、推奨パッチをレポート
プロアクティブな障害検出が可能。
ADRCI の使い方
起動
adrci
基本コマンド
# ホーム表示
show homes
# ホーム選択
set home diag/rdbms/orcl/orcl
# alert log 確認
show alert
# 最近の incidents
show incident
# 特定 incident の詳細
show incident -mode DETAIL -p "incident_id=37785"
# トレースファイル一覧
show trace
# インシデント パッケージ作成
ips create package incident 37785
ips generate package 1 in /tmp
インシデント削除(古いもの)
purge -age 43200 -type INCIDENT
# 30日以上前のインシデントを削除
ディスク圧迫を防ぐ。
【原因①】Oracle バグ(最頻出)
症状
ORA-00600: internal error code, arguments: [17069], [0x2CD46F050], ...
診断
- バージョン確認
SELECT * FROM v$version;
SELECT banner_full FROM v$version;
- 適用済みパッチ確認
SELECT patch_id, patch_uid, version, action, status, action_time
FROM dba_registry_sqlpatch
ORDER BY action_time DESC;
- MOS 検索
ORA-600 Lookup Tool → 第一引数入力
解決:パッチ適用
Quarterly Release Update (RU) 適用:
# opatch でパッチ確認
$ORACLE_HOME/OPatch/opatch lspatches
# パッチ適用(一般的な手順)
$ORACLE_HOME/OPatch/opatch apply
パッチ管理関連の詳細は Oracle パラメータ確認(V$PARAMETER)の記事、バージョン確認は Oracle バージョン確認の記事も参照してください。
予防:定期的パッチ
Oracle 推奨: 四半期ごとに RU 適用。
- 1月、4月、7月、10月に Oracle が公開
- 多くの ORA-00600 は既存 RU で修正済み
【原因②】データ破損
症状
ORA-00600: internal error code, arguments: [kdsgrp1], [12], ...
-- ブロック不整合の可能性
診断
DBVERIFY で物理検証:
dbv file=/u01/app/oracle/oradata/orcl/users01.dbf blocksize=8192
論理検証:
-- テーブルの整合性
ANALYZE TABLE customers VALIDATE STRUCTURE CASCADE;
-- インデックス
ANALYZE INDEX customers_pk VALIDATE STRUCTURE;
解決
RMAN での復旧:
-- 対象ブロック特定
SELECT * FROM v$database_block_corruption;
RMAN> RECOVER DATAFILE 5 BLOCK 12345;
Data Recovery Advisor:
RMAN> LIST FAILURE;
RMAN> ADVISE FAILURE;
RMAN> REPAIR FAILURE;
Data Pump 関連の詳細は Oracle Data Pump 使い方の記事も参照してください。
【原因③】メモリ問題
症状
ORA-00600: internal error code, arguments: [kglsim_get_new_hp:1], ...
共有メモリ関連 or メモリ破損の可能性。
診断
-- SGA サイズ
SELECT * FROM v$sga;
-- Shared Pool 使用状況
SELECT * FROM v$sgastat WHERE pool = 'shared pool';
-- Free Memory
SELECT bytes/1024/1024 mb, name FROM v$sgastat
WHERE name = 'free memory';
解決
- SGA 増加(ORA-04031 と同様の対応)
- DB 再起動でメモリクリア
- hugepages 有効化
メモリ関連の詳細は ORA-04031: shared memory の記事、ORA-04030: process memory の記事も参照してください。
【原因④】UNDO 関連
症状
ORA-00600: internal error code, arguments: [4193], [1234], [5678], ...
ORA-00600: internal error code, arguments: [6006], [1], ...
UNDO tablespace の破損 or 不整合。
診断
-- UNDO tablespace 状態
SELECT tablespace_name, status, contents
FROM dba_tablespaces
WHERE contents = 'UNDO';
-- UNDO セグメント
SELECT segment_name, status, tablespace_name
FROM dba_rollback_segs;
解決
新しい UNDO tablespace 作成:
-- 新規 UNDO 作成
CREATE UNDO TABLESPACE undotbs2
DATAFILE '/u01/app/oracle/oradata/orcl/undotbs02.dbf' SIZE 400M
AUTOEXTEND ON NEXT 100M MAXSIZE 4G;
-- 切り替え
ALTER SYSTEM SET undo_tablespace = 'UNDOTBS2' SCOPE = BOTH;
-- 古い UNDO 削除
DROP TABLESPACE undotbs1 INCLUDING CONTENTS AND DATAFILES;
DB 起動時の UNDO 問題
-- undo_management を MANUAL に変更
ALTER SYSTEM SET undo_management = MANUAL SCOPE = SPFILE;
-- 再起動
STARTUP FORCE MOUNT;
-- 新 UNDO 作成後
ALTER SYSTEM SET undo_management = AUTO SCOPE = SPFILE;
【原因⑤】DB 起動時(Redo Recovery)
症状
ORA-00600: internal error code, arguments: [kcratr_nab_less_than_odr],
[1], [210], [39496], [39684], ...
Crash Recovery or Media Recovery 時の Redo 不整合。
診断
-- alert log で復旧履歴確認
grep "kcratr" alert_ORCL.log
解決
Hidden parameter で強制起動(サポート推奨手順に従う):
ALTER SYSTEM SET "_allow_resetlogs_corruption" = TRUE SCOPE = SPFILE;
STARTUP MOUNT;
ALTER DATABASE OPEN RESETLOGS;
⚠️ 危険なパラメータ、必ずサポートに確認。データ損失の可能性あり。
バックアップからのリストアが根本策。
【原因⑥】特定 SQL 起因
症状
ORA-00600: internal error code, arguments: [17182], [0x123], ...
-- 特定 SQL でのみ発生
診断
-- SQL 特定
SELECT * FROM v$sqlarea WHERE sql_id = '<問題のsql_id>';
-- 実行計画
EXPLAIN PLAN FOR <問題の SQL>;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
解決
SQL 書き換え or 統計情報更新:
-- 統計情報再収集
EXEC DBMS_STATS.GATHER_TABLE_STATS('HR', 'EMPLOYEES', CASCADE => TRUE);
-- または SQL Plan Baseline で固定
EXEC DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(sql_id => '<sql_id>');
分析関数関連は Oracle ROWNUM vs ROW_NUMBER の記事、集計クエリは ORA-00979: not a GROUP BY の記事も参考になります。
Service Request (SR) オープン
いつオープンするか
- MOS で該当情報なし
- パッチ適用でも再発
- ビジネスクリティカル
- 本番停止
必要な情報
1. Oracle バージョン (v$version)
2. 適用済みパッチ (dba_registry_sqlpatch)
3. Alert log (ORA-00600 前後)
4. トレースファイル
5. インシデント パッケージ (IPS)
6. OS / ハードウェア情報
7. 再現手順(可能なら)
8. ビジネスインパクト
手順
1. MOS ログイン
2. Create Service Request
3. Category 選択(Database → RDBMS)
4. Severity 設定(本番停止なら1)
5. IPS パッケージ添付
6. 状況説明
AHF 経由の SR オープン
# AHF が自動でSRサポート
tfactl uploadfile <パッケージ.zip> -sr <SR番号>
Rails / Java / Python 対応
アプリでのハンドリング
ORA-00600 は基本的にアプリ側で対処不可、ログして通知が現実的:
Rails ActiveRecord
class ApplicationRecord < ActiveRecord::Base
around_action :handle_ora_600 if respond_to?(:around_action)
end
module Ora600Handler
def handle_db_operation
yield
rescue ActiveRecord::StatementInvalid => e
if e.message.include?("ORA-00600")
Rails.logger.fatal("ORA-00600 発生: #{e.message}")
# Slack 通知等
DBA_NOTIFIER.notify(e)
end
raise
end
end
Rails 8 系の詳細は Rails 8 アップグレードガイドの記事、find/find_by/where の記事、Solid Queue 使い方の記事も参照してください。
Java (JDBC)
try {
stmt.execute("...");
} catch (SQLException e) {
if (e.getErrorCode() == 600) {
logger.fatal("ORA-00600 detected", e);
// アラート
alertingService.sendCritical("ORA-00600: " + e.getMessage());
}
throw e;
}
Python (oracledb)
try:
cursor.execute("...")
except oracledb.DatabaseError as e:
error_obj, = e.args
if error_obj.code == 600:
logger.critical(f"ORA-00600 detected: {error_obj.message}")
# PagerDuty 等
alerting.critical(error_obj.message)
raise
プロダクトメトリクスとして ORA-00600 発生数を監視。
実践シナリオ
シナリオ1:本番深夜バッチでの ORA-00600
# 1. Alert log で確認
tail -100 alert_ORCL.log | grep -B 2 -A 20 "ORA-00600"
# 2. インシデント特定
adrci
adrci> show incident
# 3. トレースファイル取得
adrci> show trace
# 4. IPS パッケージ作成
adrci> ips create package incident 37785
adrci> ips generate package 1 in /tmp
# 5. MOS 検索 or SR オープン
# → tfactl uploadfile ...
シナリオ2:予兆監視の実装
#!/bin/bash
# monitor_ora600.sh
ALERT_LOG=$(sqlplus -s / as sysdba <<EOF
SET HEADING OFF FEEDBACK OFF
SELECT value FROM v\$diag_info WHERE name = 'Diag Alert';
EXIT;
EOF
)/alert_$ORACLE_SID.log
# 過去1時間の ORA-00600
COUNT=$(tail -10000 $ALERT_LOG | grep "ORA-00600" | wc -l)
if [ $COUNT -gt 0 ]; then
echo "ORA-00600 detected: $COUNT occurrences"
# Slack / PagerDuty 通知
curl -X POST $SLACK_WEBHOOK -d "{\"text\":\"ORA-00600 alert\"}"
fi
crontab で監視。crontab の詳細は crontab 使い方の記事、シェルスクリプト運用は systemctl vs service の記事も参考にしてください。
シナリオ3:RAC 環境での対応
# 全ノードの alert log 確認
srvctl status database -db orcl
# 各ノードで
ssh node1 tail -100 /path/alert_ORCL1.log | grep ORA-00600
ssh node2 tail -100 /path/alert_ORCL2.log | grep ORA-00600
# TFA で全ノード同時収集
tfactl diagcollect -since 2h -nodes all
シナリオ4:Docker Oracle での確認
# コンテナ内で alert log
docker exec -it oracle-xe tail -100 \
/opt/oracle/diag/rdbms/xe/XE/trace/alert_XE.log \
| grep ORA-00600
Docker 関連は docker daemon 接続エラーの記事、Docker no space left on device の記事も参照してください。
シナリオ5:Kamal デプロイ後の障害
# デプロイ後の起動確認
docker exec -it db-container sqlplus -s / as sysdba <<EOF
SELECT COUNT(*) FROM v\$diag_incident
WHERE create_time > SYSDATE - 1;
EXIT;
EOF
Kamal 2 デプロイの詳細は Kamal 2 デプロイの記事を参照してください。
シナリオ6:AWS RDS Oracle での対処
RDS は SYS 権限制限あり
→ AWS サポート経由で対応
→ ログエクスポート機能で alert log 取得
→ RDS モニタリングでインシデント検出
シナリオ7:DBMS_STATS 起因の SQL エラー
-- 特定 SQL で ORA-00600
-- 統計情報を疑う
-- 現在の統計取得日
SELECT table_name, last_analyzed
FROM user_tables
WHERE table_name = 'ORDERS';
-- 統計を再収集
EXEC DBMS_STATS.GATHER_TABLE_STATS('HR', 'ORDERS',
CASCADE => TRUE,
METHOD_OPT => 'FOR ALL COLUMNS SIZE AUTO');
-- SQL 実行を再試行
シナリオ8:計画的パッチ適用
# パッチ計画
# 1. 現在のパッチレベル確認
$ORACLE_HOME/OPatch/opatch lspatches
# 2. 最新 RU ダウンロード(MOS)
# 3. 適用前バックアップ
rman target / <<EOF
BACKUP DATABASE PLUS ARCHIVELOG;
EOF
# 4. DB 停止
srvctl stop database -db orcl
# 5. パッチ適用
cd /path/to/patch
$ORACLE_HOME/OPatch/opatch apply
# 6. データベース SQL パッチ
sqlplus / as sysdba <<EOF
STARTUP;
@?/OPatch/datapatch -verbose
EOF
# 7. 検証
SELECT * FROM dba_registry_sqlpatch;
シナリオ9:ADRCI での日常管理
adrci
# 週次で古いインシデント削除
adrci> purge -age 43200 -type INCIDENT
# ログサイズ確認
adrci> show alert -tail -n 50
シナリオ10:TFA 定期監視
# TFA コレクション設定(cron)
tfactl setupmail user@company.com
# 定期実行
0 6 * * * tfactl orachk -a -m
プロアクティブに問題検出。
予防のベストプラクティス
1. 定期パッチ適用
Oracle 推奨: 四半期ごとに RU 適用:
1月、4月、7月、10月に公開
少なくとも年2回は適用
本番前に開発環境で検証
2. 自動診断ツール
# AHF のインストール・定期実行
tfactl orachk -a
3. Alert log 監視
# 日常監視
grep -c "ORA-00600\|ORA-07445" alert_ORCL.log
4. バックアップ戦略
-- RMAN で日次バックアップ
BACKUP DATABASE PLUS ARCHIVELOG;
-- Data Guard で高可用性
5. ハードウェア監視
- Memory ECC エラー
- Disk SMART 監視
- OS ログ(/var/log/messages)
6. 統計情報の適切な管理
-- 自動統計収集
EXEC DBMS_STATS.SET_GLOBAL_PREFS('AUTOSTATS_TARGET', 'AUTO');
7. データファイル整合性チェック
# 週次でDBVERIFY
for datafile in /u01/app/oracle/oradata/orcl/*.dbf; do
dbv file=$datafile blocksize=8192
done
8. サポート契約
本番 DB は必ず MOS 契約を維持。ORA-00600 対処に必須。
9. ドキュメント化
- 発生日時
- エラーメッセージ(引数含む)
- 対処手順
- 結果
- 影響
10. テスト環境での再現
本番で ORA-00600 発生時、テスト環境で再現試行
→ 恒久対策の検証
トラブルシューティング
頻繁に発生する場合
- パッチ適用を最優先
- ハードウェア問題の可能性
- アプリ側のクエリ最適化
DB が起動しない
-- Mount 状態から診断
STARTUP MOUNT;
-- Data Recovery Advisor
LIST FAILURE;
ADVISE FAILURE;
発生プロセス特定
-- 直近のインシデントとプロセス
SELECT incident_id, error_number, create_time,
problem_key
FROM v$diag_incident
WHERE create_time > SYSDATE - 1
ORDER BY create_time DESC;
ADR 領域の圧迫
# 古いトレース削除
adrci
adrci> purge -age 43200
# または OS レベル
find $ORACLE_BASE/diag -name "*.trc" -mtime +30 -delete
RAC 環境での GRD 問題
Global Cache サービス関連の ORA-00600
→ 全ノードで同時分析
→ Interconnect ネットワーク検査
Timeout / Hang
-- Blocked セッション
SELECT * FROM v$session WHERE status = 'ACTIVE' AND blocking_session IS NOT NULL;
-- ハングセッション KILL
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;
よくある質問(FAQ)
Q1. ORA-00600 は必ずバグか?
多くはバグ、しかし:
- ハードウェア障害
- リソース枯渇
- データ破損
- 予期しない操作
も原因になり得る。
Q2. ORA-07445 との違い
- ORA-00600: Oracle 内部(アサート違反)
- ORA-07445: OS シグナル(SEGV等)
両方とも SR オープン対象。
Q3. 無視して良いか
絶対に無視しない。データ破損、DB クラッシュのリスク。
Q4. サポート契約なし
MOS 検索できない場合:
- Google / Stack Overflow で第一引数検索
- Oracle 公式ドキュメント
- バグ番号が公開されている場合あり
しかし、本番運用は必ず MOS 契約推奨。
Q5. 開発環境で発生
再現手順を記録、SR オープン。開発環境の情報も MOS で価値あり。
Q6. Autonomous DB では発生する?
理論上は発生し得る、しかし Oracle が自動対処。ユーザーは基本的に気にしなくて良い。
Q7. AWS RDS での対処
AWS サポート経由でOracle Support対応。RDS ではSYS権限制限あり。
Q8. DBMS_STATS で解決するケース
統計情報の異常 → オプティマイザが誤った実行計画 → 内部で不整合 → ORA-00600。統計再収集で解決することあり。
Q9. インスタンス再起動で解決
一時的なメモリ状態起因なら解決。しかし根本原因不明のまま、再発の可能性。
Q10. 第一引数の解読
Oracle エンジニアでないと完全には難しい。MOS Lookup Tool 依存が現実的。
Q11. パッチ適用のリスク
- 本番前に開発環境で検証
- ロールバック計画
- RMAN バックアップ
Q12. 予防のための投資
- MOS サポート契約(必須)
- AHF/TFA(無償)
- 定期パッチ管理
- DBA 教育
参考リンク
Oracle 公式
- Oracle Database Error Messages: ORA-00600
- Autonomous Health Framework – ORA-00600
- Oracle Blog – ORA-00600
- My Oracle Support
- Automatic Diagnostic Repository (ADR)
まとめ
ORA-00600: internal error code の要点を再整理します。
エラーの本質
ORA-00600 = Oracle カーネル内部の予期せぬ状態
→ アサート違反(絶対起きないはずが起きた)
→ Oracle が安全のため停止
→ バグの可能性が最も高い
ORA-00600 vs ORA-07445
| エラー | 発生元 |
|---|---|
| ORA-00600 | Oracle 内部 |
| ORA-07445 | OS シグナル |
エラーメッセージの構造
ORA-00600: internal error code, arguments:
[第一引数], [第二引数], ...
第一引数: 最重要(MOS 検索キー)
例: [kdsgrp1], [12700], [4193]
5大対処法
| # | 対処 | 使う場面 |
|---|---|---|
| ① | MOS ORA-600 Lookup Tool | 既知バグ検索 |
| ② | パッチ適用(RU/PSU) | 既知バグ解決 |
| ③ | DBMS_STATS 再収集 | 統計起因 |
| ④ | データファイル整合性 | データ破損 |
| ⑤ | SR オープン | 上記で解決しない |
診断ツール
# ADRCI
adrci
> show incident
> ips create package incident <id>
# AHF/TFA
tfactl diagcollect -since 2h
tfactl orachk -a
6大発生パターン
| # | パターン | 対処 |
|---|---|---|
| ① | Oracle バグ | パッチ適用 |
| ② | データ破損 | RMAN 復旧 |
| ③ | メモリ問題 | SGA チューニング |
| ④ | UNDO 関連 | 新規 UNDO 作成 |
| ⑤ | DB 起動時 | Redo 復旧 |
| ⑥ | 特定 SQL | 統計 or SQL 書換 |
SR オープン時の情報
- Oracle バージョン
- 適用済みパッチ
- Alert log
- トレースファイル
- IPS パッケージ
- OS 情報
- 再現手順
予防のベストプラクティス
- 定期パッチ適用(四半期ごとに RU)
- AHF/TFA 導入
- Alert log 監視
- バックアップ戦略
- ハードウェア監視
- 統計情報の適切管理
- データファイル整合性チェック
- MOS サポート契約
- ドキュメント化
- テスト環境での再現
事故防止
- 無視しない(データ破損リスク)
- アプリ側でハンドル & 通知
- 本番は必ず MOS 契約
- RAC は全ノード分析
- RDS は AWS サポート経由
これらの知識は、Oracle DBA としての障害対応・本番運用・パッチ管理・監視設計・SR オープン・Rails / Java / Python 開発など、あらゆる場面で活用できます。本記事をブックマークしておけば、ORA-00600 に出会っても冷静に的確に対処できるようになります。
本記事は2026年6月時点の情報をもとに、Oracle Database 19c〜23ai での動作確認・公式ドキュメントに基づき作成しています。Oracle のバージョンにより挙動が異なる場合があるため、最新の情報は Oracle 公式ドキュメント(docs.oracle.com)もあわせてご確認ください。
-
前の記事
【完全ガイド】ORA-01031: insufficient privileges の原因と解決方法|GRANT・ROLE・PL/SQL の罠まで徹底解説 2026.07.23
-
次の記事
【完全ガイド】Oracle PIVOT / UNPIVOT 徹底解説|クロス集計・動的PIVOT・実践パターンまで 2026.07.24
コメントを書く