データリカバリアドバイザーとは
データリカバリアドバイザー(Data Recovery Advisor, DRA)は、Oracle Databaseの自己診断機能の一つで、データ破損が発生した際に、問題を特定し、自動的に修復方法を提案・実行するツールです。DRAは、RMAN(Recovery Manager)と統合されており、データベース管理者が迅速に復旧作業を行えるよう支援します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1. データ破損の確認
データ破損が疑われる場合、まずV$DATABASE_BLOCK_CORRUPTIONビューを確認して破損したブロックがあるかどうかを調査します。
SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
RMAN> VALIDATE DATABASE;
validateを25-03-10で開始しています
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: データファイルの検証を開始しています
チャネルORA_DISK_1: 検証のためのデータファイルを指定しています
入力データファイル ファイル番号=00001 名前=/u01/app/oracle/oradata/V19/system01.dbf
入力データファイル ファイル番号=00003 名前=/u01/app/oracle/oradata/V19/sysaux01.dbf
入力データファイル ファイル番号=00004 名前=/u01/app/oracle/oradata/V19/undotbs01.dbf
入力データファイル ファイル番号=00005 名前=/u01/app/oracle/oradata/V19/test_tbs.dbf
入力データファイル ファイル番号=00007 名前=/u01/app/oracle/oradata/V19/users01.dbf
チャネルORA_DISK_1: 検証が完了しました。経過時間: 00:00:15
List of Datafiles
=================
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
1 OK 0 18146 149764 2276316
ファイル名: /u01/app/oracle/oradata/V19/system01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 81290
Index 0 13395
Other 0 36929
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
3 OK 0 23005 93450 2276451
ファイル名: /u01/app/oracle/oradata/V19/sysaux01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 7162
Index 0 2820
Other 0 60453
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
4 OK 0 416 92800 2276453
ファイル名: /u01/app/oracle/oradata/V19/undotbs01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 0
Index 0 0
Other 0 92384
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
5 FAILED 0 4609 12800 2273949
ファイル名: /u01/app/oracle/oradata/V19/test_tbs.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 7935
Index 0 0
Other 1 256
File Status Marked Corrupt Empty Blocks Blocks Examined High SCN
---- ------ -------------- ------------ --------------- ----------
7 OK 0 101 641 1252497
ファイル名: /u01/app/oracle/oradata/V19/users01.dbf
Block Type Blocks Failing Blocks Processed
---------- -------------- ----------------
Data 0 60
Index 0 15
Other 0 464
検証により1つ以上の破損したブロックが見つかりました
詳細はトレース・ファイル/u01/app/oracle/diag/rdbms/v19/v19/trace/v19_ora_2652.trcを参照してください
チャネルORA_DISK_1: データファイルの検証を開始しています
チャネルORA_DISK_1: 検証のためのデータファイルを指定しています
現行の制御ファイルを検証に組み込んでいます
バックアップ・セットに現行のSPFILEを組み込んでいます
チャネルORA_DISK_1: 検証が完了しました。経過時間: 00:00:01
List of Control File and SPFILE
===============================
File Type Status Blocks Failing Blocks Examined
------------ ------ -------------- ---------------
SPFILE OK 0 2
Control File OK 0 646
validateを25-03-10で終了しました
RMAN> SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTIO CON_ID
---------- ---------- ---------- ------------------ --------- ----------
5 140 1 0 ALL ZERO 0
また、アラートログを確認して、データ破損の詳細情報を取得します。
tail -f $ORACLE_BASE/diag/rdbms/<DB_NAME>/<INSTANCE_NAME>/trace/alert_<INSTANCE_NAME>.log
【アラートログの出力例】
2025-03-10T20:11:51.450587+09:00
Hex dump of (file 5, block 140) in trace file /u01/app/oracle/diag/rdbms/v19/v19/trace/v19_ora_2641.trc
Corrupt block relative dba: 0x0140008c (file 5, block 140)
Completely zero block found during user buffer read
Reading datafile '/u01/app/oracle/oradata/V19/test_tbs.dbf' for corrupt data at rdba: 0x0140008c (file 5, block 140)
Reread (file 5, block 140) found same corrupt data (no logical check)
2025-03-10T20:11:51.532326+09:00
Corrupt Block Found
TIME STAMP (GMT) = 03/10/2025 20:11:50
CONT = 0, TSN = 6, TSNAME = TEST_TBS
RFN = 5, BLK = 140, RDBA = 20971660
OBJN = 74185, OBJD = 74185, OBJECT = TAB24, SUBOBJECT =
SEGMENT OWNER = TEST1, SEGMENT TYPE = Table Segment
Errors in file /u01/app/oracle/diag/rdbms/v19/v19/trace/v19_ora_2641.trc (incident=12441):
ORA-01578: Oracleデータ・ブロックに障害が発生しました(ファイル番号5、ブロック番 号140)
ORA-01110: データファイル5: '/u01/app/oracle/oradata/V19/test_tbs.dbf'
Incident details in: /u01/app/oracle/diag/rdbms/v19/v19/incident/incdir_12441/v19_ora_2641_i12441.trc
2025-03-10T20:11:53.566649+09:00
*****************************************************************
An internal routine has requested a dump of selected redo.
This usually happens following a specific internal error, when
analysis of the redo logs will help Oracle Support with the
diagnosis.
It is recommended that you retain all the redo logs generated (by
all the instances) during the past 12 hours, in case additional
redo dumps are required to help with the diagnosis.
*****************************************************************
2025-03-10T20:11:55.773636+09:00
Corrupt block relative dba: 0x0140008c (file 5, block 140)
Completely zero block found during validation
Reread of blocknum=140, file=/u01/app/oracle/oradata/V19/test_tbs.dbf. found same corrupt data
Reread of blocknum=140, file=/u01/app/oracle/oradata/V19/test_tbs.dbf. found same corrupt data
Reread of blocknum=140, file=/u01/app/oracle/oradata/V19/test_tbs.dbf. found same corrupt data
Reread of blocknum=140, file=/u01/app/oracle/oradata/V19/test_tbs.dbf. found same corrupt data
Reread of blocknum=140, file=/u01/app/oracle/oradata/V19/test_tbs.dbf. found same corrupt data
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
2. データリカバリアドバイザーを使用した復旧手順
2.1 RMANを起動
DRAを使用するには、RMANを起動し、ターゲットデータベースに接続します。
rman target /
2.2 データ破損の診断
次に、LIST FAILUREコマンドを使用して、データベースの障害を診断します。
LIST FAILURE;
このコマンドにより、現在のデータベースの障害が一覧表示されます。
RMAN> LIST FAILURE;
データベース・ロール: PRIMARY
List of Database Failures
=========================
障害ID 優先度ステータス 検出時間 サマリー
------ -------- --------- -------- -------
41 HIGH OPEN 25-03-10 データファイル5: '/u01/app/oracle/oradata/V19/test_tbs.dbf'には破損したブロックが1つ以上含まれています
2.3 修復方法の提案
DRAが提供する修復方法を確認するには、ADVISE FAILUREコマンドを実行します。
ADVISE FAILURE;
このコマンドにより、DRAが推奨する修復方法が表示されます。通常、DRAは以下のいずれかの方法を提案します。
- 破損したブロックをRMANでリカバリ
- 破損したデータファイルの復旧
- 破損した表のリカバリ
RMAN> ADVISE FAILURE;
データベース・ロール: PRIMARY
List of Database Failures
=========================
障害ID 優先度ステータス 検出時間 サマリー
------ -------- --------- -------- -------
41 HIGH OPEN 25-03-10 データファイル5: '/u01/app/oracle/oradata/V19/test_tbs.dbf'には破損したブロックが1つ以上含まれています
自動修復オプションを分析中です。これには少し時間がかかる場合があります
チャネルORA_DISK_1の使用
自動修復オプションの分析が完了しました
必須の手動アクション
========================
no manual actions available
Optional Manual Actions
=======================
no manual actions available
自動修復オプション
========================
オプション 修復 説明
------ ------------------
1 ブロック140 (ファイル5)のブロック・メディア・リカバリを実行します
計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます
Repair script: /u01/app/oracle/diag/rdbms/v19/v19/hm/reco_3085682433.hm
2.4 修復の実行
提案された修復方法を適用するには、REPAIR FAILUREコマンドを使用します。
REPAIR FAILURE;
このコマンドを実行すると、DRAは自動的に必要なリカバリ処理を実行します。
RMAN> REPAIR FAILURE;
計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます
Repair script: /u01/app/oracle/diag/rdbms/v19/v19/hm/reco_3085682433.hm
修復スクリプトの内容:
# block media recovery
recover datafile 5 block 140;
この修復を実行しますか(YESまたはNOを入力してください)。 YES
修復スクリプトを実行しています
recoverを25-03-10で開始しています
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: ブロックをリストアしています
チャネルORA_DISK_1: バックアップ・セットからリストアするブロックを指定しています
データファイル00005のブロックをリストアしています
チャネルORA_DISK_1: バックアップ・ピース/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013k1688_1_1_1から読取り中です
チャネルORA_DISK_1: ピース・ハンドル=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013k1688_1_1_1 タグ=TAG20250310T195656
チャネルORA_DISK_1: バックアップ・ピース1からブロックをリストアしました
チャネルORA_DISK_1: ブロックのリストアが完了しました。経過時間: 00:00:01
メディア・リカバリを開始しています
メディア・リカバリが完了しました。経過時間: 00:00:03
recoverを25-03-10で終了しました
障害の修復が完了しました
2.5 修復結果の確認
修復が成功したかどうかを確認するために、再度LIST FAILUREコマンドを実行します。
LIST FAILURE;
問題が解決されていれば、「リストに表示される障害はありません」と表示されます。
RMAN> LIST FAILURE;
データベース・ロール: PRIMARY
指定に一致する障害が見つかりません
3. 追加の検証
修復後、以下のコマンドを使用してデータベースの整合性を確認します。
3.1 データファイルの確認
SELECT * FROM V$DATAFILE WHERE STATUS != 'ONLINE';
3.2 破損ブロックの再チェック
SELECT * FROM V$DATABASE_BLOCK_CORRUPTION;
破損ブロックがなくなっていれば、復旧は成功しています。
4. まとめ
データリカバリアドバイザー(DRA)は、Oracle Databaseの障害を自動的に診断し、修復を行う強力なツールです。手順は以下の通りです。
LIST FAILUREで障害を特定ADVISE FAILUREで修復方法を確認REPAIR FAILUREで修復を実行LIST FAILUREで修復完了を確認
この方法を活用することで、迅速かつ効率的なデータベース復旧が可能になります。
[参考]
Oracle Database バックアップおよびリカバリ・ユーザーズ・ガイド 19c
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント