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

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


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

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


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


【関連記事】





疑似障害を発生させる
ddコマンドで全ての制御ファイルを破損させます。
[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
[oracle@dg01 ~]$ dd if=/dev/zero of=/u01/app/oracle/fast_recovery_area/orcl/control02.ctl bs=1024k count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.0116383 s, 901 MB/s

SQL*Plusでデータベースに接続します。
[oracle@dg01 ~]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.1.0 Production on 月 3月 31 07:52:05 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: 11997 セッションID: 247、シリアル番号: 183

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

下記コマンドによりプロセスが全て終了していることが分かります。
[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以降なので、「データリカバリアドバイザ」を利用して障害原因を確認してみます。

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

「advise failure all」コマンドにより、障害原因を判別します。
RMAN> advise failure all; リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています データベース障害のリスト ========================= 障害ID 優先度ステータス 検出時間 サマリー ------ -------- --------- -------- ------- 2940 CRITICAL OPEN 14-03-31 システム・データファイル1: '/u01/app/oracle/oradata/orcl/system01.dbf'はメディア・リカバリが必要です 2937 CRITICAL OPEN 14-03-31 制御ファイルはメディア・リカバリが必要です 2891 CRITICAL OPEN 14-03-31 制御ファイル/u01/app/oracle/fast_recovery_area/orcl/control02.ctlは破損しています 2888 CRITICAL OPEN 14-03-31 制御ファイル/u01/app/oracle/oradata/orcl/control01.ctlは破損しています 2943 HIGH 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 優先度ステータス 検出時間 サマリー ------ -------- --------- -------- ------- 2891 CRITICAL OPEN 14-03-31 制御ファイル/u01/app/oracle/fast_recovery_area/orcl/control02.ctlは破損しています 2888 CRITICAL OPEN 14-03-31 制御ファイル/u01/app/oracle/oradata/orcl/control01.ctlは破損しています 必須の手動アクション ======================== 1. これがプライマリ・データベースで、CREATE CONTROLFILEスクリプトがある場合は、 それを使用して新規の制御ファイルを作成します 2. これがスタンバイ・データベースで、プライマリ・データベースが使用可能な場合は 、プライマリへ移動し、ALTER DATABASE CREATE STANDBY CONTROLFILEコマンドを使用し て、スタンバイの制御ファイルを作成してください 3. 前述の推奨事項を使用できない場合、または修復するよう選択された障害が修正され ない場合は、Oracleサポート・サービスに連絡してください オプションの手動アクション ======================= 1. これがプライマリ・データベースで、スタンバイ・データベースが使用できる場合は 、スタンバイから開始されたData Guardのフェイルオーバーを実行してください 自動修復オプション ======================== 使用可能な自動修復オプションがありません

上記により、制御ファイル「control01.ctl」ファイルと「control02.ctl」ファイルが破損していることが分かります。
本環境では制御ファイルが2つの構成なので、制御ファイルが全て壊れていることになります。

「自動修復オプション」を確認すると、「使用可能な自動修復オプションがありません」となっています。
この場合、残念なことに、自分自身でリカバリ手法を考えて、リカバリを行う必要があります。

「データリカバリアドバイザ」は便利ですが、万能ではない例となります。
ただし、制御ファイルが壊れていることが簡単に分かるだけでも価値があると思います。


(3) 障害を復旧する
事前に取得している制御ファイルのバックアップデータを用いて復旧を行います。
下記のように「restore」コマンドでバックアップファイルを指定し、制御ファイルのリストアを行います。
RMAN> restore controlfile from '/backup/ctl_c-1371396053-20140331-15'; restoreが開始されました(開始時間: 14-03-31) リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています チャネル: ORA_DISK_1が割り当てられました チャネルORA_DISK_1: SID=11 デバイス・タイプ=DISK チャネルORA_DISK_1: 制御ファイルをリストア中です チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:01 出力ファイル名=/u01/app/oracle/oradata/orcl/control01.ctl 出力ファイル名=/u01/app/oracle/fast_recovery_area/orcl/control02.ctl restoreが完了しました(完了時間: 14-03-31)

データベースのマウントを行います。
RMAN> sql 'alter database mount'; SQL文: alter database mount チャネル: ORA_DISK_1がリリースされました

ここで試しに、下記のようにデータベースをオープンしようとしてもできないことが分かります。
(下記コマンドは無意味です)
RMAN> sql 'alter database open'; SQL文: alter database open RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03009: sqlコマンド(defaultチャネル上)が03/31/2014 08:17:02で失敗しました RMAN-11003: SQL文: alter database openの解析/実行中に障害が発生しました。 ORA-01589: データベースをオープンするにはRESETLOGSまたはNORESETLOGSを使用する必 要があります
RMAN> sql 'alter database open resetlogs'; SQL文: alter database open resetlogs RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03009: sqlコマンド(defaultチャネル上)が03/31/2014 08:17:11で失敗しました RMAN-11003: SQL文: alter database open resetlogsの解析/実行中に障害が発生しまし た。 ORA-01194: ファイル1は一貫した状態にするためにさらにリカバリが必要です。 ORA-01110: データファイル1: '/u01/app/oracle/oradata/orcl/system01.dbf'

「restore database」コマンドで、データベース全体のリストアを行います。
RMAN> restore database; restoreが開始されました(開始時間: 14-03-31) implicit crosscheck backupが開始されました(開始時間: 14-03-31) チャネル: ORA_DISK_1が割り当てられました チャネルORA_DISK_1: SID=11 デバイス・タイプ=DISK 17オブジェクトをクロスチェックしました implicit crosscheck backupが完了しました(完了時間: 14-03-31) implicit crosscheck copyが開始されました(開始時間: 14-03-31) チャネルORA_DISK_1の使用 implicit crosscheck copyが完了しました(完了時間: 14-03-31) リカバリ領域ですべてのファイルを検索しています ファイルをカタログに追加しています... カタログに追加されたファイルはありません チャネルORA_DISK_1の使用 データファイル5をスキップしています。ファイル/u01/app/oracle/oradata/orcl/pdbseed/system01.dbfにすでにリストアされています データファイル7をスキップしています。ファイル/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbfにすでにリストアされています データファイル8をスキップしています。ファイル/u01/app/oracle/oradata/orcl/pdborcl/system01.dbfにすでにリストアされています データファイル9をスキップしています。ファイル/u01/app/oracle/oradata/orcl/pdborcl/sysaux01.dbfにすでにリストアされています データファイル10をスキップしています。ファイル/u01/app/oracle/oradata/orcl/pdborcl/SAMPLE_SCHEMA_users01.dbfにすでにリストアされています データファイル11をスキップしています。ファイル/u01/app/oracle/oradata/orcl/pdborcl/example01.dbfにすでにリストアされています チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています チャネルORA_DISK_1: データファイル00001を/u01/app/oracle/oradata/orcl/system01.dbfにリストアしています チャネルORA_DISK_1: データファイル00003を/u01/app/oracle/oradata/orcl/sysaux01.dbfにリストアしています チャネルORA_DISK_1: データファイル00004を/u01/app/oracle/oradata/orcl/undotbs01.dbfにリストアしています チャネルORA_DISK_1: データファイル00006を/u01/app/oracle/oradata/orcl/users01.dbfにリストアしています チャネルORA_DISK_1: バックアップ・ピース/backup/bs_3mp4hq0r_1_1から読取り中です チャネルORA_DISK_1: ピース・ハンドル=/backup/bs_3mp4hq0r_1_1 タグ=TAG20140331T080651 チャネルORA_DISK_1: バックアップ・ピース1がリストアされました チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:55 restoreが完了しました(完了時間: 14-03-31)

「recover database」コマンドで、データベースを最新の状態にリカバリします。
RMAN> recover database; recoverが開始されました(開始時間: 14-03-31) チャネルORA_DISK_1の使用 メディア・リカバリを開始しています スレッド1 (順序2)のアーカイブ・ログは、ファイル/u01/app/oracle/oradata/orcl/redo02.logとしてディスクに存在します スレッド1 (順序3)のアーカイブ・ログは、ファイル/u01/app/oracle/oradata/orcl/redo03.logとしてディスクに存在します アーカイブ・ログ・ファイル名=/u01/app/oracle/oradata/orcl/redo02.log スレッド=1 順序=2 アーカイブ・ログ・ファイル名=/u01/app/oracle/oradata/orcl/redo03.log スレッド=1 順序=3 メディア・リカバリが完了しました。経過時間: 00:00:00 recoverが完了しました(完了時間: 14-03-31)

データベースのリカバリが完了しています。

データベースのopenをします。
しかし、制御ファイルの全障害なので、下記のように通常のopenはできません。
RMAN> sql 'alter database open'; SQL文: alter database open RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03009: sqlコマンド(defaultチャネル上)が03/31/2014 08:20:06で失敗しました RMAN-11003: SQL文: alter database openの解析/実行中に障害が発生しました。 ORA-01589: データベースをオープンするにはRESETLOGSまたはNORESETLOGSを使用する必 要があります

よって、resetlogsでopenします。
RMAN> sql 'alter database open resetlogs'; SQL文: alter database open resetlogs

以上で障害復旧は完了です。


resetlogsでopenしていますので、再びフルバックアップの取得を忘れずに行ってください。
取得しないと、最新の状態へのリカバリができなくなってしまいます。




以上です。




トラックバックURL

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



前ページへ:制御ファイル単一障害を復旧する(RMAN編)
次ページへ:データファイル障害を復旧する(RMAN編)

ページのトップへ

必ずお読みください

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

広 告





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


ビジネスブログ100選

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




最新トラックバック


RSSリンクの表示

QRコード

QR

アクセスカウンター

ユニーク:
トータル:


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