Oracleエラー対応(ORA-08103):ORA-08103発生時の対処方法

現役DBAが解説-Oracleエラー対応
SELECT文などの読み込み処理の実施中、他セッションでの操作が影響し、ORA-08103が発生することがあります。
本ブログではORA-08103発生時の原因および対処方法を解説します。
1. エラーメッセージ
ORA-08103: 現在、指定したオブジェクトは存在しません。
2. 事象
SELECT文などの読み込み処理の実施中、他ユーザーセッションによってオブジェクト(下記例ではテーブル)が削除された場合などにORA-08103が発生します。
SQL> SELECT * FROM TEST_TABLE; COL1 COL2 COL3 ------- ------- ------- test1 test2 1 test1 test2 1 test1 test2 1 ERROR: ORA-08103: object no longer exists
3. 原因と対処方法
ORA-08103の発生原因と各対処方法をご紹介します。
①該当オブジェクトのDROP/TRUNCATEにより発生
SELECT文などのSQL文の実行中に、他ユーザーセッションにてオブジェクトのDROPまたはTRUNCATE処理が実行された場合、参照していたデータブロックが存在しないため、処理途中でORA-08103が発生します。
その場合、まずは該当オブジェクトの存在有無を確認します。
該当オブジェクトがDROPされていないことが確認できた場合は、TRUNCATEされている可能性があるため、データ件数を確認します。
状況を確認後、オブジェクトの復旧(オブジェクトの再作成・データ再投入・バックアップデータからの復元)をご検討ください。
<オブジェクト存在有無の確認例>
SQL> SELECT owner, object_name FROM dba_objects WHERE object_name = 'TEST_TABLE';
<データ件数の確認例>
SQL> SELECT count(*) FROM TEST_TABLE;
②データブロック破損により発生
データブロックの破損が原因でORA-08103が発生している可能性があります。
以下のようなANALYZEコマンドを実行してもエラーが繰り返し発生する場合は、その可能性が高いため、まずは状況を確認します。
<表構造の分析コマンド例>
SQL> ANALYZE TABLE TEST_TABLE VALIDATE STRUCTURE;
※正常に完了する場合は「Table analyzed.」が表示されます
データブロックが破損している際の対処方法としては、バックアップのダンプファイルがある場合は、該当オブジェクトを一度DROPし、ダンプファイルからインポートすることで復元が可能です。
ただし、バックアップ取得時点のデータへ戻ってしまうため、注意が必要です。
また、バッファキャッシュまたは共有プール上で一時的に問題が発生している可能性があるため、その場合は以下フラッシュ操作を実行します。
<フラッシュ操作例>
SQL> ALTER SYSTEM FLUSH BUFFER_CACHE; ※バッファキャッシュ SQL> ALTER SYSTEM FLUSH SHARED_POOL; ※共有プール
4. 最後に
ORA-08103が発生した場合、まずは該当オブジェクトの状態を確認します。
状態を確認後、オブジェクトの復旧(オブジェクトの再作成・データ再投入・バックアップデータからの復元)をご検討ください。