kenken0807_DBメモ

つば九郎が好きなDBAです。Oracle Standard Editionでの運用やツールとかとかの備忘録。特に記載がない場合はoracle11gR2です。時々MySQL

データリカバリアドバイザを使用したRMANリカバリ方法(ユーザ表領域)

データリカバリアドバイザを使用してリカバリを行うと楽に復旧可能だったのでメモ。
Oracle RACでは対応してないみたい、シングルインスタンスのみ対応。
環境はOracle database 11.2.0.4 SEone。

以下条件で実施している。
1. 高速リカバリ領域の有効化(バックアップセットとアーカイブログを含む)
2. 自動診断レポジトリ(ADR)の有効化
3. 事前にフルバックアップを取得済み

表領域障害からの完全リカバリ

準備

  • 確認用データの追加
SQL> insert into rmant values (1,sysdate,'first');
SQL> commit;
SQL> alter system switch logfile; 
SQL> alter system checkpoint; 
SQL> insert into rmant values (2,sysdate,'onlineredo');
SQL> commit;
SQL> select * from rmant;

ID INS_TIME            TX
-- ------------------- -----------
 1 2015/06/24 17:36:41 first         ←このデータはアーカイブログ化されている
 2 2015/06/24 17:37:59 onlineredo    ←このデータはデータファイルに書き込まれていない状態
  • 表領域を強制的に壊す
# dd if=/dev/zero of=/opt/app/oracle/oradata/orcl/data/data05.dbf bs=500M count=1
  • Oracleに表領域が壊れたことを気づかせてあげる
 RMAN> VALIDATE DATABASE;

validateが開始されました(開始時間: 2015/06/24 17:38:55)
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=1640 デバイス・タイプ=DISK
RMAN-06169: データファイル9のファイル・ヘッダーを読み込めません。エラー理由: 7
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: validateコマンドが06/24/2015 17:38:56で失敗しました
RMAN-06056: データファイル9にアクセスできませんでした


SQL> alter system checkpoint;
alter system checkpoint
*
行1でエラーが発生しました。:
ORA-03113: 通信チャネルでend-of-fileが検出されました プロセスID:
29124
セッションID: 1136、シリアル番号: 247

データリカバリアドバイザを使用して復旧

  • 障害情報確認(list failure)
RMAN> list failure;

リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
データベース障害のリスト
=========================

障害ID 優先度ステータス    検出時間            サマリー
------ -------- --------- ------------------- -------
314    HIGH     OPEN      2015/06/24 17:46:37 SYSTEM以外のデータファイルが1つ以上破損しています

データファイルが壊れていることが 表示される。

  • 対応方法確認(advise failure)
RMAN> advise failure;

データベース障害のリスト
=========================

障害ID 優先度ステータス    検出時間            サマリー
------ -------- --------- ------------------- -------
314    HIGH     OPEN      2015/06/24 17:46:37 SYSTEM以外のデータファイルが1つ以上破損しています

自動修復オプションを分析中です。これには少し時間がかかる場合があります
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=2899 デバイス・タイプ=DISK
自動修復オプションの分析が完了しました

必須の手動アクション
========================
使用可能な手動アクションがありません

オプションの手動アクション
=======================
使用可能な手動アクションがありません

自動修復オプション
========================
オプション 修復 説明
------ ------------------
1      データファイル9をリストアおよびリカバリします
  計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます
  修復スクリプト: /opt/oracle/diag/rdbms/orcl/ORCL/hm/reco_877293002.hm
  • 自動作成された修復方法の確認(repair failure preview) これは実行してもしなくてもどちらでも良い。
RMAN> repair failure preview;

計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます
修復スクリプト: /opt/oracle/diag/rdbms/ptdb/PTDB/hm/reco_877293002.hm

修復スクリプトの内容:
   # restore and recover datafile
   restore datafile 9;
   recover datafile 9;
   sql 'alter database datafile 9 online';

実行する最善の手段をを作成してくれる。

  • 修復実施(repair failure)
RMAN> repair failure ;

計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます
修復スクリプト: /opt/oracle/diag/rdbms/orcl/ORCL/hm/reco_877293002.hm

修復スクリプトの内容:
   # restore and recover datafile
   restore datafile 9;
   recover datafile 9;
   sql 'alter database datafile 9 online';

この修復を実行しますか(YESまたはNOを入力してください)。 YES
修復スクリプトを実行しています

restoreが開始されました(開始時間: 2015/06/24 17:51:41)
チャネルORA_DISK_1の使用

チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_DISK_1: データファイル00009を/opt/app/oracle/oradata/orcl/data/data05.dbfにリストアしています
チャネルORA_DISK_1: バックアップ・ピース/opt/oracle/fast_recovery_area/ORCL/backupset/2015_06_24/o1_mf_nnndf_TAG20150624T115106_brn6rtp4_.bkpから読取り中です
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:27:05
restoreが完了しました(完了時間: 2015/06/24 18:18:46)

recoverが開始されました(開始時間: 2015/06/24 18:18:46)
チャネルORA_DISK_1の使用

メディア・リカバリを開始しています
メディア・リカバリが完了しました。経過時間: 00:00:01

recoverが完了しました(完了時間: 2015/06/24 18:18:47)

SQL文: alter database datafile 9 online
障害の修復が完了しました

データベースをオープンしますか(YESまたはNOを入力してください)。 YES
データベースがオープンしました。
  • データの確認 完全リカバリされている。
SQL> select * from rmant;

ID INS_TIME            TX
-- ------------------- -----------
 1 2015/06/24 17:36:41 first         
 2 2015/06/24 17:37:59 onlineredo    

以上で完了となる。
1. list failure;
2. advise failure;
3. repair failure;

単純な障害であればたった3つの処理でリカバリ可能となっている。