Oracle

【Oracle】制御ファイルの再作成方法(制御ファイル破損/パラメータ変更)

更新日:



制御ファイルの再作成方法

今回は、create controlfileを使用した制御ファイルの再作成手順についてご紹介します。

キーワード:制御ファイル 再作成 ORA-01190 ORA-19909

1. 概要

手順概要:

トレースファイルに制御ファイル再作成のスクリプトを作成し、
それを使用して制御ファイルを再作成する。

どういうときに実施するのか:

(A) 制御ファイル(control file)が(複製も含めて全て)破損した場合

(B) 他のデータファイルと比較して、制御ファイルが古い場合
・バックアップ時の手順ミス等により発生
・resetlogsでのopen時に下記エラーが出力

ORA-01190: control file or data file 37 is from before the last RESETLOGS
(ORA-01190 制御ファイルまたはデータ・ファイルnは最後のRESETLOGS以前のものです。)

・recover database実行時に、下記エラーが出力

ORA-19909: datafile 1 belongs to an orphan incarnation
(ORA-19909: データファイル1は孤立したインカネーションに属しています)

(C) 制御ファイルのパラメータを変更する必要がある場合

条件:

データベースがmount可能なこと

環境:

制限は特になし。下記検証は、Oracle Linux6 11.2.0.4で実施

注意:

本手順を試される前に、必ずDBのバックアップを取得下さい。
バックアップ/リカバリは環境によって方法が異なる場合があります。
本手順はあくまで検証用の手順となります。本番環境では実施しないでください。
影響などが発生した場合の責任は取り兼ねます。

参考:

Oracle Database SQL言語リファレンス 11cリリース1 (11.2)CREATE CONTROLFILE

2. 手順

①DBをシャットダウン

SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。

②制御ファイルのバックアップを取得

$ cp /u01/app/oracle1102/oradata/ora1102/control01.ctl /home/oracle/backup/control01.ctl.bk

③DBをマウント状態にする

SQL> startup mount
ORACLEインスタンスが起動しました。

Total System Global Area 592977920 bytes
Fixed Size 2255392 bytes
Variable Size 163579360 bytes
Database Buffers 419430400 bytes
Redo Buffers 7712768 bytes
データベースがマウントされました。

④制御ファイルを、.trc形式にて作成する

SQL> alter database backup controlfile to trace;

データベースが変更されました。

⑤トレースファイルの名前を確認する

SQL> show parameter user_dump_dest

NAME      TYPE    VALUE
------------- ---------- ------------------------------
user_dump_des string  /u01/app/oracle1102/diag/rdbms/ora1102/ora1102/trace

$ cd $ORACLE_BASE/diag/rdbms/[DB名]/[DB名]/trace/

$ ls -ltr
[中略]
-rw-r----- 1 oracle oinstall 7093 *月 ** **:** 2018 ora1102_ora_5798.trc

※一番下の最新のトレースファイルを確認する
(-t : 更新時間順にソート -r : 逆順にソート)

⑥ ⑤で確認した当該の.trcファイルを下記の部分以外を消す。

$vi ora1102_ora_5798.trc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CREATE CONTROLFILE REUSE DATABASE "ORA1102" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle1102/oradata/ora1102/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/u01/app/oracle1102/oradata/ora1102/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 '/u01/app/oracle1102/oradata/ora1102/redo03.log' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/u01/app/oracle1102/oradata/ora1102/system01.dbf',
'/u01/app/oracle1102/oradata/ora1102/sysaux01.dbf',
'/u01/app/oracle1102/oradata/ora1102/undotbs01.dbf',
'/u01/app/oracle1102/oradata/ora1102/users01.dbf'
CHARACTER SET AL32UTF8
;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

※制御ファイルの設定を変更しない場合は、上記の"CREATE CONTROLFILE"~"CHARACTER SET ****"までを残す
※制御ファイルのパラメータを変更したい場合は、上記作成時にパラメータを変更する

⑦DBをシャットダウンする

SQL> shutdown immediate
ORA-01109: データベースがオープンされていません。

データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。

⑧DBをnomountで起動する

SQL> startup nomount
ORACLEインスタンスが起動しました。

Total System Global Area 592977920 bytes
Fixed Size 2255392 bytes
Variable Size 163579360 bytes
Database Buffers 419430400 bytes
Redo Buffers 7712768 bytes

⑨制御ファイルを再作成

SQL> @ora1102_ora_5798.trc

制御ファイルが作成されました。

※⑥で作成したスクリプトを実行
※制御ファイルを再作成すると、自動的にマウントモードになる
※事前に当該のファイルがあるディレクトリまで移動しておく

⑩DBをrecover

SQL> recover database until cancel using backup controlfile
ORA-00279: ??1801748(04/19/2018 16:51:39???)??????1?????
ORA-00289:
????????????:/u01/app/oracle1102/fast_recovery_area/ORA1102/archivelog/2018_04_1
9/o1_mf_1_1_%u_.arc
ORA-00280: ??1801748(????1)?????1???????

ログの指定: {<RET>=suggested | filename | AUTO | CANCEL}
/u01/app/oracle1102/oradata/ora1102/redo01.log
ログが適用されました。
メディア・リカバリが完了しました。

※上記コマンド実行時に、redoのファイルを入力する必要がある。(redoが複数ある場合は順番に入力)
例:/u01/app/oracle1102/oradata/ora1102/redo01.log

⑪DBをopenする

SQL> alter database open resetlogs ;

データベースが変更されました。

⑫一時表領域を追加する

SQL> alter tablespace TEMP add tempfile '/u01/app/oracle1102/oradata/ora1102/temp01.dbf' reuse;

表領域が変更されました。

※制御ファイル再作成後は、必ずバックアップを取得して下さい

以上です。

-Oracle

Copyright© 世のため自分のためのアウトプット , 2024 All Rights Reserved Powered by STINGER.