Email: service@parnassusdata.com 7 x 24 online support!

    You are here

    • You are here:
    • Home > Blogs > PDSERVICE's blog > RMAN: 制御ファイルが壊れてしまった場合のリカバリ方法 (8.0/8.1)(

RMAN: 制御ファイルが壊れてしまった場合のリカバリ方法 (8.0/8.1)(

RMAN: 制御ファイルが壊れてしまった場合のリカバリ方法 (8.0/8.1)(

詩檀ソフトはDULに基づき、PRM-DULを開發した。DULすべての機能も含めた上で、グラフィックインタフェースとDataBridge(データがDBLINKのように直に目標データベースに伝送できる。)などの機能も追加した。そして、PRM-DULはJavaで編成したので、あらゆるプラットフォームに適応できる。
PRM-DULの無料バーションダウンロード:
 
 
PRM-DULの無料バーションは一つのテーブルがデフォルトで一万行しか抽出できない。目標データベースがかなり小さいの場合に、無料PRM-DULを使ってください。データベースが一万行を超えて、データの重要性も高い場合に、企業バーションを使ってください。企業バーションPRM-DULは一つのデータベースに対して、Licenseソフトウェア使用許可書を提供する。一つのLicense は$ 999 USD 。そして、PRM-DULは一部無料なLicenseを提供している。
 
もし、壊滅したデータベースがDULを使ったら、まだリカバリできない場合に、リカバリサポートサビースを考えてください:
詩檀ソフトはいまあらゆるOracleデータベースのトラブルに対応できて、主には:データベースが起動できない、誤操作でテーブルがDROPされた、TRUNCATE、DELETE,ASM DiskgroupがMOUNTできないなど。

 

 

 

[Problem]
制御ファイルが壊れてしまいました。
他のデータファイルやオンラインREDOログファイルは壊れていません。
RMANでバックアップを取得しています。
RMANによる復旧方法について教えてください。

[To reproduce]
制御ファイルが壊れた場合、このようなエラーが発生します。

SVRMGR> select * from v$datafile;
FILE#      CREATION_C CREATION_ TS#        RFILE#     STATUS  ENABLED    CHECKPO
INT CHECKPOIN UNRECOVERA UNRECOVER LAST_CHANG LAST_TIME OFFLINE_CH ONLINE_CHA ON
LINE_TI BYTES      BLOCKS     CREATE_BYT BLOCK_SIZE NAME
                                                     PLUGGED_IN
---------- ---------- --------- ---------- ---------- ------- ---------- -------
--- --------- ---------- --------- ---------- --------- ---------- ---------- --
------- ---------- ---------- ---------- ---------- ----------------------------
---------------------------------------------------- ----------
ORA-00210: 指定された制御ファイルをオープンできません。
ORA-00202: 制御ファイル: '/rman/oradata/tar816/control01.ctl'
ORA-27041: ファイルをオープンできません。
SVR4 Error: 2: No such file or directory
Additional information: 3
SVRMGR>

[Action]
以下は、データベースの制御ファイルのみが壊れてしまった場合の対処方法です。
制御ファイル以外のデータファイルやオンラインREDOファイルが壊れていない
ということが前提となっています。ご注意ください。

1. データベースをshutdownします。
   制御ファイルが壊れているので、shutdown normalはできません。
   shutdown abortをします。

2. データベースをnomount状態にします。
   SVRMGR> startup nomount

3. RMANを起動しカタログとターゲットに接続します。
   % rman target system/manager@target catalog rman/rman@catalog
   
   Recovery Manager: リリース 8.1.6.0.0 - Production

   RMAN-06006: ターゲット・データベース: tar816(マウントされていません)に接続されました。
   RMAN-06008: リカバリ・カタログ・データベースに接続されました。

   RMAN>
  
   nomount状態なので、上記のような出力になります。

4. RMANで制御ファイルをrestoreし、データベースをmountします。
     RMAN> run {
     2> allocate channel ch1 type disk;
     3> restore controlfile;
     4> sql 'alter database mount';
     5> }
   
   実行ログの一部:
   ===============================================================================
   RMAN-03022: コンパイル・コマンド: restore

   RMAN-03022: コンパイル・コマンド: IRESTORE
   RMAN-03023: 実行コマンド: IRESTORE
   RMAN-08016: チャネル ch1: データファイル・バックアップ集合の復旧を開始しています。
   RMAN-08502: set_count=3 set_stamp=405026127 creation_time=20000807 19:15:27
   RMAN-08021: チャネル ch1: 制御ファイルをリストアしています。
   RMAN-08505: 出力ファイル名=/rman/oradata/tar816/control01.ctl
   RMAN-08023: チャネル ch1: バックアップ部分: 1がリストアされました。
   RMAN-08511: 部分ハンドル=/rman/backup/fullTAR816_3_1 タグ=null パラメー
   タ=NULL
   RMAN-08024: チャネル ch1: リストア完了
   RMAN-08058: 制御ファイルをレプリケートしています。
   RMAN-08506: 入力ファイル名=/rman/oradata/tar816/control01.ctl
   RMAN-08505: 出力ファイル名=/rman/oradata/tar816/control02.ctl
   RMAN-08505: 出力ファイル名=/rman/oradata/tar816/control03.ctl
   ===============================================================================

   Oracle8.1.xでは、restore controlfile; と実行するだけで、
   initパラメータファイルの control_files に書かれているすべてのファイルを
   指定された位置にリストアします。
   Oracle8.0.xをお使いの場合には、restore controlfile to xxx と
   replicate controlfile from xxxx を実行する必要があります。
   replicate controlfile コマンドを実行するためにはTYPE DISKのチャネルを
   追加して下さい。

5. バックアップから戻した制御ファイルのためにリカバリを行うのですが、
   その前にリカバリのための準備(リカバリカタログにアーカイブログファイルを登録)
   をします。 
   
   まず、確認のために以下のコマンドを実行します。

     RMAN> change archivelog all crosscheck;
   
   実行ログの一部:
   ===============================================================================
   RMAN-03022: コンパイル・コマンド: change
   RMAN-06158: アーカイブログの妥当性チェックが正常に終了しました。
   RMAN-08514: アーカイブログ・ファイル名=/rman/admin/tar816/arch/arch_1_3.
   arc レコードID=28 スタンプ=405273299
   ===============================================================================
   
   Oracle8.1.x では、crosscheckですが、Oracle8.0.x では、
     RMAN> change archivelog all validate;
   とします。
   このコマンド実行時に、ある条件を満たしていないと RMAN-6038、RMAN-20242 が発生します。
   エラーの発生についての詳細は Krown#26779をご覧下さい。
   また Oracle8.1.6.0-8.1.6.2 をお使いの場合には、このコマンドが正常に機能しないことが
   あります。詳細については、Krown#26779 と Krown#18715 をご参照ください。

   ここで、出力があったアーカイブログファイルについては、
   log_archive_dest に存在し、かつ、リカバリカタログに情報が格納されています。
   次に initパラメータ log_archive_dest で指定されているディレクトリを確認してください。
   log_archive_destにあるが、
   RMAN> change archivelog all crosscheck; 
   で出力がなかったファイルについては、リカバリカタログに登録されていません。
   それらのアーカイブログファイルは、catalogコマンドでリカバリカタログに登録しなくて
   はいけません。
   
   catalogコマンドの使用例)
   
     RMAN> catalog archivelog '/rman/admin/tar816/arch/arch_1_4.arc';
   
   このコマンドで、log_archive_destにあるアーカイブログファイル arch_1_4.arc を
   リカバリカタログに登録します。
    
   ・この実行がどのような役割を示しているかですが:
   RMANでは、制御ファイルとリカバリカタログが同期を取ることにより、
   ターゲットデータベースの情報をリカバリカタログに格納します。
   そのためのRMANコマンドが resync catalog; です。
   制御ファイルが壊れた場合、壊れる前の最後にresyncを行なった時からの後の
   ターゲットデータベースの情報がまだリカバリカタログに入っていない状態になっています。
   この状態のまま、RMANでrecoverコマンドを実行すると、
     RMAN-08060: アーカイブログが見つかりません。
     RMAN-08510: アーカイブログ・スレッド=1 順序=4
   というエラーになり、recoverが途中で終了してしまいます。

   log_archive_destにあるが、RMANのリカバリカタログにないというアーカイブログファイル
   については、すべてcatalogコマンドを実行してください。
   (ここで登録するファイルがたくさんあった場合には、resyncを定期的に行なっていなかった
    ということになります。今後はresyncをまめに実行するようにしましょう。)
   
6. RMANでrecoverコマンドを実行し、データベースをopenします。
     RMAN> run {
     2> allocate channel ch1 type disk;
     3> recover database;
     4> sql 'alter database open resetlogs';
     5> }
   
   実行ログの一部:
   ===============================================================================
   RMAN-03022: コンパイル・コマンド: allocate
   RMAN-03023: 実行コマンド: allocate
   RMAN-08030: チャネル ch1が割り当てられました。
   RMAN-08500: チャネル ch1: sid=8 devtype=DISK

   RMAN-03022: コンパイル・コマンド: recover

   RMAN-03022: コンパイル・コマンド: recover(1)
   RMAN-03023: 実行コマンド: partial resync
   RMAN-08003: リカバリ・カタログの部分再同期を開始します。
   RMAN-08005: 部分再同期完了

   RMAN-03022: コンパイル・コマンド: recover(2)

   RMAN-03022: コンパイル・コマンド: recover(3)
   RMAN-03023: 実行コマンド: recover(3)
   RMAN-08054: メディアのリカバリを開始します。

   RMAN-03022: コンパイル・コマンド: recover(4)
   RMAN-06050: アーカイブログ・スレッド 1、順序 3は、ファイル /rman/admin/t
   ar816/arch/arch_1_3.arcとしてディスクにあります。
   RMAN-06050: アーカイブログ・スレッド 1、順序 4は、ファイル /rman/admin/t
   ar816/arch/arch_1_4.arcとしてディスクにあります。
   RMAN-06050: アーカイブログ・スレッド 1、順序 5は、ファイル /rman/admin/t
   ar816/arch/arch_1_5.arcとしてディスクにあります。  
                 << 中略 >>
   RMAN-06050: アーカイブログ・スレッド 1、順序 33は、ファイル /rman/admin/
   tar816/arch/arch_1_33.arcとしてディスクにあります。
   RMAN-06050: アーカイブログ・スレッド 1、順序 34は、ファイル /rman/oradat
   a/tar816/redo03.logとしてディスクにあります。
   RMAN-06050: アーカイブログ・スレッド 1、順序 35は、ファイル /rman/oradat
   a/tar816/redo02.logとしてディスクにあります。
   RMAN-06050: アーカイブログ・スレッド 1、順序 36は、ファイル /rman/oradat
   a/tar816/redo01.logとしてディスクにあります。
   RMAN-03023: 実行コマンド: recover(4)
   RMAN-08017: チャネル ch1: デフォルトの宛先へのアーカイブログの復旧を開始しています。
   RMAN-08022: チャネル ch1: アーカイブログをリストアしています。
   RMAN-08510: アーカイブログ・スレッド=1 順序=2
   RMAN-08023: チャネル ch1: バックアップ部分: 1がリストアされました。
   RMAN-08511: 部分ハンドル=/chiyoda/rman/backup/arcTAR816_8_1 タグ=null パラメータ
   =NULL
   RMAN-08024: チャネル ch1: リストア完了
   RMAN-08515: アーカイブログ・ファイル名=/rman/admin/tar816/arch/arch_1_2.
   arc スレッド=1 順序=2
   RMAN-08515: アーカイブログ・ファイル名=/rman/admin/tar816/arch/arch_1_3.
   arc スレッド=1 順序=3
   RMAN-08515: アーカイブログ・ファイル名=/rman/admin/tar816/arch/arch_1_4.
   arc スレッド=1 順序=4
   RMAN-08515: アーカイブログ・ファイル名=/rman/admin/tar816/arch/arch_1_5.
   arc スレッド=1 順序=5
                 << 中略 >>
   RMAN-08515: アーカイブログ・ファイル名=/rman/admin/tar816/arch/arch_1_33
   .arc スレッド=1 順序=33
   RMAN-08515: アーカイブログ・ファイル名=/rman/oradata/tar816/redo03.log
   スレッド=1 順序=34
   RMAN-08515: アーカイブログ・ファイル名=/rman/oradata/tar816/redo02.log
   スレッド=1 順序=35
   RMAN-08515: アーカイブログ・ファイル名=/rman/oradata/tar816/redo01.log
   スレッド=1 順序=36
   RMAN-08055: メディアのリカバリが完了しました。

   RMAN-03022: コンパイル・コマンド: sql
   RMAN-06162: SQL文: alter database open resetlogs
   RMAN-03023: 実行コマンド: sql
   RMAN-08031: チャネル ch1をリリースしました。

   RMAN>
   ===============================================================================

   ログより、オンラインのREDOログについても適用できていることがわかります。  

7. データベースをresetlogsオプションをつけてopenしたため、
   リカバリカタログにもそれを通知します。

   RMAN> reset database;

8. 今後の障害のために、必ずバックアップを取得してください。

9. ローカル管理一時表領域を使用している場合には、TEMPファイルの追加が必要です。

補足:
RMANを使用しない制御ファイルの復旧方法については、Krown#15854にあります。
Oracle9iでは、リカバリカタログに最新のアーカイブログ情報がなかったとしても、
catalogコマンドでアーカイブログファイルを登録する必要はありませんので、
上記の手順とは異なります。