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

    You are here

    • You are here:
    • Home > Blogs > PDSERVICE's blog > Oracle 制御ファイルのリカバリ方法--多重化した一部の障害の場合(for UNIX)

Oracle 制御ファイルのリカバリ方法--多重化した一部の障害の場合(for UNIX)

Oracle 制御ファイルのリカバリ方法--多重化した一部の障害の場合(for UNIX)

ORACLEデータベース によくあるエラ の解決策

プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com

 
 
[概要]

 制御ファイルのリカバリ方法(多重化した一部の障害の場合)

[内容]

 本KROWNでは、多重化したうちの一部の制御ファイルが壊れてしまった場合の
 リカバリ方法について説明します。多重化した全ての制御ファイルが壊れた場合の
 リカバリ方法については、Document 1724073.1(KROWN#71501) を参照してください。

[対象リリース]

 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プラットフォーム

[エラー内容]

 制御ファイルが壊れた場合には、以下のようなエラーが発生する可能性があります。

 ORA-00205: error in identifying controlfile, check alert log for more info

 ORA-00210: cannot open the specified controlfile
 ORA-00202: controlfile: '/home/oradata/ora920/control01.ctl'
 ORA-27041: unable to open file

 ORA-00202: controlfile: '/home/oradata/ora920/control01.ctl'
 ORA-27037: unable to obtain file status

 ORA-00202: controlfile: '/home/oradata/ora920/control01.ctl'
 ORA-27046: file size is not a multiple of logical block size

 #注意#
 ・上記はあくまでも例であり、破損状況によっては、その他のエラーが発生する可能性も
  あります。

 ・上記エラーが発生する前の一時的なメディア障害時や誤って制御ファイルを移動、改名
  してしまった場合には、制御ファイルへのアクセスが起きる前であれば、
  データベースが停止する前に迅速にメディア障害を解決することでエラーを回避できます。

[リカバリ方法]

 これから破損してしまった制御ファイルのリカバリ手順について説明します。
 制御ファイル以外のデータファイルやオンラインREDOログファイルは壊れていない前提と
 なりますので、注意してください。

1. 上記のようなエラーが発生したら、データベースを shutdown abort で停止します。

  SQL> shutdown abort
   ORACLE instance shut down.

2. 以下の2点をまず確認します。

  2-1. エラーとなっている制御ファイルは特定出来ているか?
   
    ① 問題の制御ファイルが特定出来ていない場合はまず <手順A> を参照してください。
    ② 問題の制御ファイルが特定出来ている場合は、<手順B> を参照してください。

   2-2. 制御ファイルが多重化されているか?

    <<確認方法>>
    ・$ORACLE_HOME/dbs 以下にある初期化パラメータファイル init<SID>.ora 内の
   control_files パラメータに複数のファイルが指定されていれば、制御ファイルは
    多重化されていることがわかります。

   制御ファイルの多重化が行われていない、又は多重化した制御ファイルが全て壊れていた場合の
   リカバリ方法は、Document 1724073.1(KROWN#71501) を参照してください。


<手順A>: 壊れている制御ファイルが特定出来ていない場合
------------------------------------------------------

A-1. 問題の制御ファイルを特定し、init<SID>.ora 内の control_files 句を書き換えます。

 ・init<SID>.ora 内から問題の制御ファイル control01.ctl の記述を外します。
    
    変更前:
  control_files        = (/home/oradata/ora920/control01.ctl,
                            /home/oradata/ora920/control02.ctl,
                            /home/oradata/ora920/control03.ctl)

    変更後:
    control_files        = (/home/oradata/ora920/control02.ctl,
                            /home/oradata/ora920/control03.ctl)

  ・壊れている制御ファイルが不明な場合には、control01.ctl から順に
    一つずつ試してください。

A-2. データベースを起動します。

 - 正常に起動した場合:
  
  壊れていたファイルは、A-1 の手順で control_files 句から外したファイルだけで
  あったことがわかります。この後のリカバリは、<手順B> を参照してください。

  - 正常に起動できなかった場合:

    SQL> startup
	 ORACLE instance started.

	 Total System Global Area  202868968 bytes
	 Fixed Size                   731368 bytes
	 Variable Size             167772160 bytes
	 Database Buffers           33554432 bytes
	 Redo Buffers                 811008 bytes
	 ORA-00205: error in identifying controlfile, check alert log for more info

    この時点のアラートログを確認すると、以下のようなエラーが発生しています。

   Fri Oct 17 14:16:20 2003
   ORA-00202: controlfile: '/home/oradata/ora920/control02.ctl'
   ORA-27037: unable to obtain file status       ^^^^^^^^^^^^^
  
    これは、control02.ctl も壊れていることを示しています。

A-3. 壊れているファイルを特定するために、A-1 と A-2 を繰り返します。
   
  - 壊れている制御ファイルが多重化されているファイルの一部だった場合、
     <手順B> を参照してください。
    
   - 多重化されていた制御ファイルが全て壊れていた場合、Document 1724073.1(KROWN#71501) を参照してください。


<手順B>: 壊れている制御ファイルが多重化されているファイルの一部である場合
--------------------------------------------------------------------------

B-1. データベースを shutdown します。

B-2. 壊れていない制御ファイルを壊れてしまった制御ファイルへコピーします。

  - 壊れていない制御ファイルが control03.ctl、
     壊れている制御ファイルが control01.ctl、control02.ctl の場合以下を実行します。

   % cp control03.ctl control02.ctl
     % cp control03.ctl control01.ctl

B-3. A-1 の手順で初期化パラメータ control_file 句に指定されている制御ファイルのエントリを
   外した場合には、B-2 の手順でコピーした制御ファイルのエントリを追加します。

B-4. データベースを起動します。
   起動できたら、作業は完了となります。
   v$controlfile で、制御ファイルが多重化されているかを確認してください。

     SQL> startup
     ORACLE instance started.

     Total System Global Area  202868968 bytes
     Fixed Size                   731368 bytes
     Variable Size             167772160 bytes 
     Database Buffers           33554432 bytes
     Redo Buffers                 811008 bytes
     Database mounted.
     Database opened.

     SQL> select * from v$controlfile;

     STATUS  NAME
     ------- --------------------------------------------------
     /home/oradata/ora920/control01.ctl  <--
     /home/oradata/ora920/control02.ctl  <--
     /home/oradata/ora920/control03.ctl  <-- 


[参照情報]

「Oracle7 Server 管理者ガイド リリース7.3」p.24-54
「Oracle8 Server バックアップおよびリカバリ リリース 8.0」p.11-50
「Oracle8i バックアップおよびリカバリ・ガイド リリース8.1」p.15-12
「Oracle9i ユーザー管理バックアップおよびリカバリ・ガイド リリース1」p.3-9
「Oracle9i ユーザー管理バックアップおよびリカバリ・ガイド リリース2」p.3-10