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が発生した場合、まずは該当オブジェクトの状態を確認します。
状態を確認後、オブジェクトの復旧(オブジェクトの再作成・データ再投入・バックアップデータからの復元)をご検討ください。