Oracleデータベース内の破損ブロックを特定して修正する方法

腐敗の二つのタイプがあります。

A.物理的な破損:これは一般的にメディアの破損が原因で発生します。 この場合、ブロックには無効がありますchecksum.it 月はゼロを含んでいます。 これは一般的に、メディア、ネットワーク、メモリなどのインフラストラクチャの問題の結果です。

RMANブロックの回復は、物理的な破損を削除するために使用することができます

我々は、エラー ORA-01578を参照してください: Oracleが物理的な破損を検出したときに、警告ログでORACLEデータブロックが破損しています。 Oracleは、ブロック-ヘッダーとブロック-フッターをチェックして破損を検出します。

B.論理的な破損:これは、oracleがブロックのヘッダーとフッターが良好であるが、ブロック内の内部整合性が検出された場合に発生します。 一般的には、Oracleソフトウェアのバグが原因で発生します。 Oracleが検出すると、警告ログにエラーがスローされます。

ORA-08103ORA–08103-このエラーは、特定のデータ・ブロックの論理破損エラーです。
ORA-00600–このエラーはブロックの破損に関連しており、データベースSCNよりもSCNが高いために発生します。

データベースの破損を確認する方法

データベースの破損は、以下の方法を使用して見つけることができます

a.RMAN

c.アラートログで発生する可能性1904>

RMAN

以下のコマンドを実行します

RMAN> backup validate check logical database;

“CHECK LOGICAL”オプションは、物理ブロックと論理ブロックの両方の破損を識別するために使用されます。

選択的にチェックを行いたい場合には、以下のコマンドを使用できます

BACKUP VALIDATE DATAFILE 1;BACKUP VALIDATE check logical DATAFILE 1;BACKUP VALIDATE TABLESPACE TOOLS;BACKUP VALIDATE check logical TABLESPACE TOOLS;BACKUP VALIDATE BACKUPSET 1;BACKUP VALIDATE CURRENT CONTROLFILE;

RMANによって検出された破損ブロックを識別するためにビューを選択します。

SQL> select * from v$database_block_corruption;For each row, find the segment impactedSQL> SELECT TABLESPACE_NAME, SEGMENT_NAME, PARTITION_NAME, SEGMENT_TYPE FROM DBA_EXTENTS WHERE FILE_ID=&FILE_ID AND &BLOCK_ID BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1; 

破損したブロックが修復された後、ブロックを識別する行がビューから削除されることに注意してください。

発生の可能性のあるアラートログのチェック

アラートをチェックします。 破損したブロックのログファイル、データファイルリスト。

For ex:- ORA-01578: ORACLE data block corrupted (file # 11, block # 45)ORA-01110: data file 5: '/xyz/db01.dbf'

dbverify

dbverifyユーティリティを使用して、物理的および論理的なイントラブロックの破損を識別することもできます。

dbv file=datafile_name blocksize=datafile_block_size

以下のコマンドを使用して、すべてのデータファイルのdbvコマンドを生成できます

sqlplus /nologconnect / as sysdbaset feedback offset head offset echo offset linesize 200set pagesize 2500spool /tmp/dbvlogs/dbvchk.shselect 'dbv file=' || name || ' blocksize='|| block_size || ' logfile=' ||substr(name, instr(name, '/', -1, 1) +1) ||'.' || file# || '.log' from v$datafile/spool off

RAWデバイスの場合

select 'dbv file='||name||' blocksize='||block_size||' end='||(bytes/block_size)||' logfile='||substr (name, instr (name, '/', -1, 1) + 1)||'.'||file#||'.log'from v$datafile;

ASMストレージの場合

select 'dbv file=' || name || ' blocksize='|| block_size || ' USERID=sys/&SYS_PASSWORD logfile=' ||substr(name, instr(name, '/', -1, 1) +1) ||'.' || file# || '.log' from v$datafile/

エクスポート

テーブルまたはスキーマ

しかし、エクスポートの大きな制限は、最初の破損が発生した直後に失敗することです。、そう完全な映像は逃したアウトされます。

ANALYZEコマンド

ANALYZEは、最大チェックを実行する最良のユーティリティと呼ばれています。

これは、任意の手段でインデックスに関連付けられている破損をチェックするための簡単なユーティリティです。

テーブルで破損をチェックするには、次の操作を行います:

ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE;

インデックスを使用して破損を確認するには、次の操作を行います:

ANALYZE INDEX <OWNER.INDEX_NAME> VALIDATE STRUCTURE;

相互参照チェックを実行するためにテーブルとそのインデックスで破損をチェックするには、次の操作を行います:

ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE CASCADE;

パーティションテーブルの場合は、次のようにINTO INVALID_ROWSオプションを指定してANALYZEコマンドを使用する必要があります:

ANALYZE TABLE <OWNER.TABLE_NAME> VALIDATE STRUCTURE CASCADE INTO INVALID_ROWS;

破損を修正する方法

a. Blockrecover RMANコマンドの使用

Block recoverでは、リカバリされるブロックのみが使用できず、restデータファイルが使用できます

RMAN>blockrecover datafile10ブロック1688

RMAN>BLOCKRECOVER破損リストRESTORE UNTIL TIME’SYSDATE– 7′;

b.バックアップまたはスタンバイからのデータファイル-リカバリの使用(ある場合)

c.完全なデータベース-リカバリ

d.インデックスの破損のみの場合、インデ 破損したブロックは修正されませんが、そのブロックをスキップとしてマークし、そのブロックを今すぐチェックすることはありません

コメントを残す

メールアドレスが公開されることはありません。