web-dev-qa-db-ja.com

Oracleで破損したインデックスをどのように修正しますか?

ログにこのORAエラーがあります:

原因:Java.sql.BatchUpdateException:ORA-01578:Oracleデータブロックが破損しています(ファイル#8、ブロック#22921)ORA-01110:データファイル8: '/ data/app/Oracle/oradata/MYSRVR/datafile/o1_mf_mysrvr_88m82mdj。 dbf '

私はこれをsqlplusで実行してみました:

sys.dba_extentsから、segment_name、segment_type、tablespace_name、ownerを選択します。block_idとblock_id +ブロック-1の間のfile_id = 8および22921。

出力は次のとおりです。

SEGMENT_NAME             SEGMENT_TYPE   TABLESPACE_NAME     OWNER
-----------------------    ------------     ----------------    ---------------
PK_ZXCATSET_CATID      INDEX            MYSRVR_IDX_TB    MYSRVR

今、私はどのインデックスがその実際のセグメント名であるかについて行き詰まっています。 (私は思う:/)私はそのインデックスを再構築するためにこれをやろうとしました:

SQL>インデックスPK_ZXCATSET_CATIDを変更し、テーブルスペースMYSRVR_IDX_TBを再構築します。

  • 1行目のエラー:ORA-01418:指定されたインデックスは存在しません

「select index_name from dba_indexes」を実行しても、そのインデックス名が表示されます。何が悪いのですか?これは10.2のOracleサーバーです。

前もって感謝します!

[〜#〜] edit [〜#〜] MYSRVR.PK_ZXCATSET_CATIDを実行すると、変更は完了します...しかし、問題が解決したとはまだ思いません!

1
user83598

メディアが破損しているようです。データベースにオープン障害がある場合は、自動診断リポジトリ(ADR)の内容を調べます。これは、Enterprise ManagerまたはRMANコマンドラインユーティリティを使用して実行できます。

[Oracle@oca ~]$ rman target=/

RMAN> list faliure;

ステータスOPENがリストされている障害がある場合は、データ復旧アドバイザ(DRA)に障害の分析を依頼し、障害を修復するためのソリューションを推奨できます。

RMAN> advise failure;

ブロックが破損しているため、DRAはおそらく破損したブロックを回復することを提案し、RMANを使用して手動または同じフローで実行できる適切なスクリプトを作成します。

RMAN> repair failure;

障害が修復されると、DRAによって自動的に閉じられます。すべての失敗がもう1つlist failure RMANのコマンド。そうでない場合は、DRAから別のアドバイスを得ることができます。

編集:

あなたが行った回復は長続きしなかったので(elapsed time: 00:00:00)、私はデータファイルがRMANによって書き込まれなかったと推測し、おそらくチェックされています。したがって、データベースを積極的に検証することをお勧めします。そのためには、validate database RMANで、出力を分析します。 RMANはすべてのデータファイル(制御ファイルとspfileを含む)をチェックし、破損したブロックがあるかどうかを示します。

あなたのコメントの中で、RMANはコマンドの1つに応答して、RMANからvalidate databaseコマンドこの機能は、お使いのソフトウェアエディションでも使用できないと思われます。データベースがARCHIVELOGモードで実行されている場合(select log_mode from v$database)コミットされたトランザクションを失うことなくデータベースを完全に復元および回復できますが、これを行う前に、メディア(ハードディスク)が損傷していないことを確認します。

2

さて、「RMAN>リストの失敗」うまくいきませんでしたが、正しい方向に導いてくれました。物事をやり直すために、私はこれを行いました:

$  rman target sys/myuser@mytargetsrvr

RMAN> recover datafile 8

//これは

ORA-00283: recovery session canceled due to errors
ORA-01124: cannot recover data file 8 - file is in use or recovery

//代わりに最初にこれを行いました

RMAN> sql 'alter tablespace MYSRVR_IDX_TB offline';

sql statement: alter tablespace MYSRVR_IDX_TB offline

RMAN> recover datafile 8;

Starting recover at 25-APR-13
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 25-APR-13

RMAN> sql 'alter tablespace  MYSRVR_IDX_TB online';

sql statement: alter tablespace  MYSRVR_IDX_TB online

Yasir Arsanukaevに感謝します!

0
user83598