🎯 対象読者
- Oracle Database 初学者〜中級者
- ORAエラーの原因と対処を体系的に理解したい方
- DBA・インフラ・開発者
- OCP試験対策をしている方
🧠 Oracle エラー調査の基本フロー
ORAエラーが発生した場合、以下の順序で確認します:
① Listener(接続)
② Instance(インスタンス状態)
③ Storage(表領域・UNDO・REDO)
④ Transaction(一貫性・UNDO)
🔥 ORA-12514
TNS: listener does not currently know of service requested
📌 原因
Listener が指定された Service Name を認識していません。
つまり:
Client → Listener → Service Name 解決失敗
📊 よくある原因
原因① Instance が起動していない
確認:
SELECT status FROM v$instance;
解決:
STARTUP;
原因② Service Name が間違っている
確認:
SELECT value FROM v$parameter WHERE name='service_names';
tnsnames.ora 確認:
SERVICE_NAME = ORCL
原因③ Listener 未登録(動的登録失敗)
Listener 確認:
lsnrctl status
Service が表示されない場合:
lsnrctl reload
または:
ALTER SYSTEM REGISTER;
🧠 動的登録の仕組み
Instance 起動
│
▼
LREG Process
│
▼
Listener に Service 登録
✅ 解決まとめ
① Instance 起動確認
② Service Name 確認
③ listener status 確認
④ ALTER SYSTEM REGISTER
🔥 ORA-01034
ORACLE not available
📌 原因
Instance が起動していません。
つまり:
Oracle Instance = STOPPED
📊 確認方法
SQL*Plus 接続:
sqlplus / as sysdba
状態確認:
SELECT status FROM v$instance;
✅ 解決方法
STARTUP;
成功例:
ORACLE instance started.
Database mounted.
Database opened.
📊 Instance 状態
STOPPED
STARTED(NOMOUNT)
MOUNTED
OPEN
OPEN 状態が正常です。
🧠 よくある原因
- DB 再起動後に未起動
- サーバ再起動
- SHUTDOWN 実行後未起動
🔥 ORA-01555
snapshot too old
📌 原因
UNDO 表領域不足により、読み取り一貫性を維持できない。
Oracle は過去のデータを UNDO から取得します:
Query 実行中
│
▼
必要な過去データがUNDOにない
│
▼
ORA-01555
📊 よくある発生ケース
- 長時間 SELECT
- 大量 UPDATE / DELETE 同時実行
- UNDO 表領域が小さい
📊 確認方法
UNDO サイズ:
SELECT tablespace_name, bytes/1024/1024 MB
FROM dba_data_files
WHERE tablespace_name='UNDOTBS1';
UNDO 設定:
SHOW PARAMETER undo_retention;
✅ 解決方法① UNDO_RETENTION(秒) 増加
例:
ALTER SYSTEM SET undo_retention = 1800;
✅ 解決方法② UNDO 表領域拡張
ALTER DATABASE DATAFILE
'/u01/app/oracle/oradata/ORCL/undotbs01.dbf'
RESIZE 2G;
または:
ALTER DATABASE DATAFILE
'/u01/app/oracle/oradata/ORCL/undotbs01.dbf'
AUTOEXTEND ON;
✅ 解決方法③ 長時間トランザクション回避
- 小分け commit
- 長時間 SELECT 回避
🧠 読み取り一貫性の仕組み
Datafile(現在)
UNDO(過去)
│
▼
Oracle が過去状態を再構築
🔎 実務で最も重要な確認コマンド
Instance 状態
SELECT status FROM v$instance;
Listener 状態
lsnrctl status
Service 確認
SELECT name FROM v$services;
UNDO 確認
SHOW PARAMETER undo;
🏢 実務ベストプラクティス
接続エラー対策
・Listener 起動確認
・Service Name 統一
・動的登録確認
Instance 管理
・サーバ起動時にDB自動起動
・SHUTDOWN IMMEDIATE 使用
UNDO 管理
・UNDO AUTOEXTEND ON
・undo_retention 適切設定
🧠 エラー分類まとめ
| エラー | 分類 | 原因 |
|---|---|---|
| ORA-12514 | 接続 | Listener |
| ORA-01034 | Instance | 未起動 |
| ORA-01555 | Storage | UNDO不足 |
✅ まとめ
重要ポイント:
ORA-12514 → Listener / Service 確認
ORA-01034 → Instance 起動
ORA-01555 → UNDO 拡張
🎉 これでできること
- Oracle 接続エラー対応
- Instance 起動トラブル対応
- UNDO 問題解決
- 実務レベルの障害対応
📚 対象DB
本記事は Oracle Database 12c / 19c / 21c / 23c に対応しています。