7 x 24 在线支持!
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