Oracle中心にIT全般の技術情報を気が向くままに書いています。他にLinux、仮想化技術(VMWare)やトラブルに役立つ情報などがあります。

スポンサーサイト制御ファイル単一障害を復旧する(RMAN編)


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Oracle Recovery Manager(RMAN)の「制御ファイル単一障害」時のリカバリを行いたいと思います。
制御ファイルは複数ファイルで運用されるのが普通ですが、その中の1つのファイルが壊れるケースです。

利用するバックアップファイルについては、
記事「【RMAN】バックアップ取得(バックアップセット形式)
で取得したファイルです。


【環境】
・データベース:Oracle 12cR1
・グローバル・データベース名:orcl
・プラガブル・データベース名:pdborcl
・データベース・ログ・モード:アーカイブ・モード
・パラメータファイル:サーバ・パラメータ・ファイル(spfile)運用


【関連記事】





疑似障害を発生させる
ddコマンドで制御ファイルのうちの1ファイルを破損させます。
[oracle@dg01 ~]$ dd if=/dev/zero of=/u01/app/oracle/oradata/orcl/control01.ctl bs=1024k count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.0233111 s, 450 MB/s

SQL*Plusでデータベースに接続します。
[oracle@dg01 oracle]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.1.0 Production on 月 3月 31 07:34:44 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options に接続されました。

制御ファイルを利用するようなSQLを実行します。
SQL> alter system switch logfile; alter system switch logfile * 行1でエラーが発生しました。: ORA-03113: 通信チャネルでend-of-fileが検出されました プロセスID: 11747 セッションID: 34、シリアル番号: 1835

この時点で、データベースが制御ファイルの破損に気づき、データベースのプロセスを強制終了しました。

下記コマンドによりプロセスが全て終了していることが分かります。
[oracle@dg01 oracle]$ ps -ef |grep ora_ oracle 11755 9044 0 07:35 pts/1 00:00:00 grep ora_


データベースを復旧する
(1) データベースを起動する
SQL*Plusで接続します。
[oracle@dg01 ~]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.1.0 Production on 月 3月 31 07:39:36 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. アイドル・インスタンスに接続しました。

「startup」コマンドを実行します。
SQL> startup ORACLEインスタンスが起動しました。 Total System Global Area 1570009088 bytes Fixed Size 2288776 bytes Variable Size 973079416 bytes Database Buffers 587202560 bytes Redo Buffers 7438336 bytes ORA-00205: ?????????????????????????????????????????

ORACLEインスタンスは起動しました。しかし、「ORA-00205」エラーにより正常にデータベースを起動できませんでした。
制御ファイルが破損しているため、「nomount」の状態となっています。


(2) 障害原因の診断
Oracle 11gR2以降では、「データリカバリアドバイザ」の機能が追加になりました。
本機能を利用することで、Oracleが自動的に障害原因を確認し、リカバリプランを提示してくれます。
使用してみると非常に便利です。

RMANで接続します。
[oracle@dg01 ~]$ rman target / Recovery Manager: Release 12.1.0.1.0 - Production on 月 3月 31 07:42:29 2014 Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved. ターゲット・データベース: ORCLに接続されました(マウントされていません)

「advise failure all」コマンドにより、障害原因を判別します。
RMAN> advise failure all; データベース障害のリスト ========================= 障害ID 優先度ステータス 検出時間 サマリー ------ -------- --------- -------- ------- 2742 CRITICAL OPEN 14-03-31 制御ファイル/u01/app/oracle/oradata/orcl/control01.ctlは破損しています 5 CRITICAL OPEN 14-03-31 システム・データファイル1: '/ade/b/3593327372/oracle/oradata/seeddata/system01.dbf'が見つかりません 2 CRITICAL OPEN 14-03-31 制御ファイルはメディア・リカバリが必要です 8 UNKNOWN OPEN 14-03-31 SYSTEM以外のデータファイルが1つ以上見つかりません 自動修復オプションを分析中です。これには少し時間がかかる場合があります チャネル: ORA_DISK_1が割り当てられました チャネルORA_DISK_1: SID=11 デバイス・タイプ=DISK 自動修復オプションの分析が完了しました Not all specified failures can currently be repaired. The following failures must be repaired before advise for others can be given. 障害ID 優先度ステータス 検出時間 サマリー ------ -------- --------- -------- ------- 2742 CRITICAL OPEN 14-03-31 制御ファイル/u01/app/oracle/oradata/orcl/control01.ctlは破損しています 必須の手動アクション ======================== 使用可能な手動アクションがありません オプションの手動アクション ======================= 使用可能な手動アクションがありません 自動修復オプション ======================== オプション 修復 説明 ------ ------------------ 1 多重コピーを使用して制御ファイル/u01/app/oracle/oradata/orcl/control01.ctlをリストアします 計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます 修復スクリプト: /u01/app/oracle/diag/rdbms/orcl/orcl/hm/reco_579835264.hm

上記により、制御ファイル「control01.ctl」ファイルが破損していることが分かります。

また、「自動修復オプション」にて、ファイル「reco_579835264.hm」が提示されています。
ファイルの内容は下記の通りです。
# restore control file using multiplexed copy restore controlfile from '/u01/app/oracle/fast_recovery_area/orcl/control02.ctl'; sql 'alter database mount';

上記ファイルの内容を手動で実行してもデータベースを復旧することができます。
内容を確認すると、破損の無い制御ファイル「control02.ctl」を基にしてリストアを行うことが分かります。


(3) 障害を復旧する
(2)で実行した「advise failure all」コマンドにて、自動修復オプション「reco_579835264.hm」の提示がありました。
よって、「repair failure」コマンドでデータベースの自動修復を行います。
RMAN> repair failure; 計画: 修復には、データが損失しない完全なメディア・リカバリが含まれます 修復スクリプト: /u01/app/oracle/diag/rdbms/orcl/orcl/hm/reco_579835264.hm 修復スクリプトの内容: # restore control file using multiplexed copy restore controlfile from '/u01/app/oracle/fast_recovery_area/orcl/control02.ctl'; sql 'alter database mount'; この修復を実行しますか(YESまたはNOを入力してください)。 YES ←YESと入力 修復スクリプトを実行しています restoreが開始されました(開始時間: 14-03-31) チャネルORA_DISK_1の使用 チャネルORA_DISK_1: 制御ファイル・コピーをコピーしました 出力ファイル名=/u01/app/oracle/oradata/orcl/control01.ctl 出力ファイル名=/u01/app/oracle/fast_recovery_area/orcl/control02.ctl restoreが完了しました(完了時間: 14-03-31) SQL文: alter database mount チャネル: ORA_DISK_1がリリースされました 障害の修復が完了しました データベースをオープンしますか(YESまたはNOを入力してください)。 YES ←YESと入力 データベースがオープンしました。

以上でデータベースが起動し、障害を復旧することができました。
「データリカバリアドバイザ」のおかげで手順が非常に簡単です。




以上です。




トラックバックURL

この記事にトラックバックする(FC2ブログユーザー)



前ページへ:バックアップを取得する(RMANバックアップセット編)
次ページへ:制御ファイル全障害を復旧する(RMAN編)

ページのトップへ

必ずお読みください

本ブログ記事をご利用になって生じたいかなる損害についても当方は一切責任を負いません。
ご利用は自己責任でお願いします。(^―^)

広 告





ブログランキング/その他


ビジネスブログ100選

ブログランキング・にほんブログ村へ
blogramで人気ブログを分析




最新トラックバック


RSSリンクの表示

QRコード

QR

アクセスカウンター

ユニーク:
トータル:


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。