Email: service@parnassusdata.com 7 x 24 online support!

    You are here

    • You are here:
    • Home > Blogs > PDSERVICE's blog > ORA-1578 ブロック破損時の表のデータ取得について (event 10231)(KROWN:21385)

ORA-1578 ブロック破損時の表のデータ取得について (event 10231)(KROWN:21385)

ORA-1578 ブロック破損時の表のデータ取得について (event 10231)(KROWN:21385)

ORACLEデータベース によくあるエラ の解決策

プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com

[Problem]
ブロック破損が発生しているらしく、表に対する処理で ORA-1578 が
発生していることを仮定として考えます。
破損したブロックのデータは諦め、今あるデータだけでも救いたい
場合には、event 10231 を使用して表の再作成が行なえます。

Event 10231 は、全表走査時に soft corrupt しているブロックのみを読み
飛ばします。つまり、このイベントを使用することにより、問題のあるブロックの
データは無視され、その他のブロックに格納されているデータを検索することができます。


[Action]
以下の手順は、Oracleサポートからの明示的な指示に基づいて実行してください

1. まず、ブロックコラプションが発生しているオブジェクトを特定します。
   ORA-1578 が発生している場合には、KROWN 5237 に記述されている
   SQL文で、オブジェクトが特定できます。
   この表が、ディクショナリ等ではなく、ユーザ表であることを
   確認してください。
   

2. 表のオーナーのユーザでログインし、event 10231 をセッションに
   設定します:
   
   alter session set events '10231 trace name context forever, level 10'
   

3. この状態で、問題の表から CREATE TABLE AS SELECT で、別の
   一時的な表にデータを保存します。
   
   create table temp_table as select * from 問題の表;
   
   
4. temp_table表に、破損ブロック以外のデータが保存されています。
   念のため、内容をご確認ください。
   問題の表を drop し、temp_table表より再作成してください。

	drop table 問題の表;
	create table 問題の表 as select * from temp_table;


手順は以上となります。
なお、event 10231 は、full table scan (全表走査、つまり select * from table)
の場合にしか有効でありません。
INDEX RANGE SCAN の場合には、event 10233 が使用できます。

   alter session set events '10233 trace name context forever, level 10'

他に、このイベントを init.ora に記述しインスタンス単位で設定
することにより、export ユーティリティを使用して問題の表のダンプファイルを
取得することもできます:
	event="10231 trace name context forever, level 10"



[Error#]
ORA-1578