7 x 24 在线支持!
Oracle オンラインREDOログファイルのリカバリ--多重化した一部の障害の場合 (for UNIX)
ORACLEデータベース によくあるエラ の解決策
プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com
[概要] オンラインREDOログファイルのリカバリ--多重化した一部の障害の場合 [内容] 本KROWNでは、多重化されたオンラインREDOログファイルの一部のファイルが 障害を受けた場合のリカバリ方法を紹介します。 [対象リリース] Oracle7 Server/Oracle7 Workgroup Server 7.x Oracle8 Enterprise Edition/Oracle8 Standard Edition 8.0.x Oracle8i Enterprise Edition/Oracle8i Standard Edition 8.1.x Oracle9i Database Release1 (9.0.1.x) Oracle9i Database Release2 (9.2.x) [対象プラットフォーム] Unixプラットフォーム [エラー内容] 多重化されたオンラインREDOログの一部のファイルが破損した場合には、 アラートログファイル、又は v$logfile から確認出来ます。 アラートには、ORA-312/ORA-313/ORA-321 又はその他付随する OSエラーが書き込まれます。 -------------- Errors in file /home/admin/ora920/bdump/ora920_lgwr_21920.trc: ORA-00313: open failed for members of log group 1 of thread 1 ORA-00312: online log 1 thread 1: '/home/oradata/ora920/redo01_2.log' ORA-27037: unable to obtain file status SVR4 Error: 2: No such file or directory Additional information: 3 Errors in file /home/admin/ora920/bdump/ora920_lgwr_21920.trc: ORA-00321: log 1 of thread 1, cannot update log file header ORA-00312: online log 1 thread 1: '/home/oradata/ora920/redo01_2.log' ORA-00313: open failed for members of log group 1 of thread 1 -------------- v$logfile から確認した場合には、破損したログの STATUS は "INVALID" となっています。 SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER ---------- ------- ------- -------------------------------------------------- 3 ONLINE /home/oradata/ora920/redo03_2.log 2 ONLINE /home/oradata/ora920/redo02_2.log 1 INVALID ONLINE /home/oradata/ora920/redo01_2.log <-- 1 ONLINE /homeoradata/ora920/redo01_1.log 2 ONLINE /home/oradata/ora920/redo02_1.log 3 ONLINE /home/oradata/ora920/redo03_1.log [リカバリ方法] 手順例として、以下のような環境であると仮定します。 $ORACLE_HOME: ora920 破損したオンラインREDOログファイル: redo01_2.log 破損したオンラインREDOログファイルが属するグループ: group#1 1. v$logfile から破損したログファイルを特定します。 破損したログファイルのステータスは、"INVALID" となっています。 SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER ---------- ------- ------- -------------------------------------------------- 3 ONLINE /home/oradata/ora920/redo03_2.log 2 ONLINE /home/oradata/ora920/redo02_2.log 1 INVALID ONLINE /home/oradata/ora920/redo01_2.log <--** 破損したファイル 1 ONLINE /homeoradata/ora920/redo01_1.log 2 ONLINE /home/oradata/ora920/redo02_1.log 3 ONLINE /home/oradata/ora920/redo03_1.log --> 上記結果から、問題のREDOログファイルは、group#1 のメンバー、redo01_2.log で あることがわかります。 2. 破損したファイルが属するロググループ(ここでは group#1) のステータスが CURRENT ではないことを確認します。 (グループの STATUS が CURRENT では、そのグループに属するメンバーの DROP を 出来ないためです。) SQL> select group#, status from v$log; GROUP# STATUS ---------- ---------------- 1 ACTIVE <--** group#1は "CURRENT" ではないことを確認 2 CURRENT 3 INACTIVE <問題のログメンバーが属するグループが CURRENT であった場合> 問題のメンバーが属するグループが CURRENT の場合には、ログスイッチを発生させます。 SQL> alter system switch logfile; 3. 問題のログメンバー、redo01_2.log を DROP します。 SQL> alter database drop logfile member 2 '/home/oradata/ora920/redo01_2.log'; 4. グループに新しいメンバーを追加します。既にOS上に存在しているログファイルを 削除せず、再利用する場合には、reuse 句をつけて add します。 SQL> alter database add logfile member 2 '/home/oradata/ora920/redo01_2.log' reuse to group 1; ^^^^^ ※ 一旦OS側でログファイルの削除を行っている場合、又は新しい名前でログファイルを add するには、reuse 句は必要ありません。 #注意# カレントグループに属するロググループの DROP は出来ません。カレントロググループに 属するメンバーを DROP しようとした場合、以下のようなエラーとなります。 ---------- ORA-01609: ログ1はスレッド1の現在のログです - メンバーは削除できません ORA-00312: オンライン・ログ1 スレッド1: '/home/oradata/ora920/redo01_2.log' ORA-00312: オンライン・ログ1 スレッド1: '/home/oradata/ora920/redo01_1.log' ---------- 元の状態に戻ったか確認します。 SQL> select * from v$logfile; GROUP# STATUS TYPE MEMBER ---------- ------- ------- ------------------------------------- 1 ONLINE /home/oradata/ora920/redo01_2.log 3 ONLINE /home/oradata/ora920/redo03_2.log 2 ONLINE /home/oradata/ora920/redo02_2.log 1 ONLINE /home/oradata/ora920/redo01_1.log 2 ONLINE /home/oradata/ora920/redo02_1.log 3 ONLINE /home/oradata/ora920/redo03_1.log 以上で作業は完了です。 [参照情報] 「Oracle9i ユーザー管理バックアップおよびリカバリ・ガイド リリース1(9.0.1)」 「Oracle9i ユーザー管理バックアップおよびリカバリ・ガイド リリース2(9.2)」 第6章: ユーザー管理のメディア・リカバリのシナリオ 「Oracle8i バックアップおよびリカバリ・ガイド リリース8.1」 第6章: メディア・リカバリのシナリオ