今日もなんだかいい天気♪

アクセスカウンタ

help RSS REDOログファイルをいじってみよう。

<<   作成日時 : 2008/08/02 22:55   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

REDOログファイルのファイル名を変えたいと思った。
今のファイル名は

o1_mf_2_479cmd6o_.log

みたいな感じで、どのロググループに属するかもわからないし、なにより打ち込みにくい。おぼえられない(その気もない)。
そんなわけで、ファイル名を変更する。

でも、「変更」なんていう操作はない。

今の状態は、2つのREDOロググループがある。
1と2ね。
で、新たに3と4を作る。
んで、1と2を削除して、
改めて「お望みのファイル名」で1と2を作り、
3と4を削除する、というめんどくさい手順を取らなくてはいけない。

今回は「ファイル名を変えたい」という理由でやるわけだけど、
何らかの理由でREDOログファイルの格納先を変更するとか、REDOログファイルがいっぱいになっちゃって
エラーが出てるからサイズを大きくして再作成しなくちゃいけないとか(サイズを変更するっていう操作もない)っていうときも、同じ手順を使います。

えーと、とりあえずSYSDBA権限でログインしましょうね。
で、REDOログファイルの状態を見てみましょう。

SQL> select A.GROUP#,A.SEQUENCE#,A.BYTES,A.MEMBERS,A.STATUS,B.MEMBER
2 from V$LOG A,V$LOGFILE B
3 where A.GROUP# = B.GROUP#;


GROUP# SEQUENCE# BYTES MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
MEMBER
--------------------------------------------------------------------------------
2 29 52428800 1 CURRENT
/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/o1_mf_2_479cmd6o_.log

1 28 52428800 1 INACTIVE
/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/o1_mf_1_479cm9jx_.log


REDOロググループは2つ。メンバは1つ。
ひじょーに貧弱な構成(最小限)ですが、まぁあくまでも学習環境なんでね。

REDOログファイルのサイズは50MBですが、ファイル名を変えるだけっていうのもつまらないので、100MBにしてみます。
ちなみにREDOロググループ1は「REDO01.log」、REDOロググループ2は「REDO02.log」にする。


まずはREDOロググループ3と4を作る。
なんで2つ作るかっていうと、REDOロググループは最低2つ必要だから。
(1つはリカバリ用として必ず必要。1つだけにしようとすると、Oracleに怒られる。)
1つだけ作って、古いヤツ2つ削除したら、1つになっちゃうでしょ。
だからエラーになる。

でもまぁ、とりあえず1つずつ作っていこうか。


SQL> alter database add logfile group 3
2 ('/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/redo03.log')
3 size 100M;


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


できたてホヤホヤのヤツは、SEQUENCE#(ログ順序番号)が0だ。
まだ役に立たないすっからかんのREDOログなのだ。
できたてだと、STATUSがUNUSEDなのだ。
「う、ぬすっど」じゃない。「あんゆーずど」だ。


SQL> select A.GROUP#,A.SEQUENCE#,A.BYTES,A.MEMBERS,A.STATUS,B.MEMBER
2 from V$LOG A,V$LOGFILE B
3 where A.GROUP# = B.GROUP#;


GROUP# SEQUENCE# BYTES MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
MEMBER
--------------------------------------------------------------------------------
2 29 52428800 1 CURRENT
/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/o1_mf_2_479cmd6o_
.log

1 28 52428800 1 INACTIVE
/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/o1_mf_1_479cm9jx_
.log

3 0 104857600 1 UNUSED
/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/redo03.log



CURRENTのREDOログは削除できない。なので、強制的にログスイッチを起こして、CURRENTを移動させよう。
すると、CURRENTがグループ2からグループ3に移る。


SQL> alter system switch logfile;

システムが変更されました。

SQL> select A.GROUP#,A.SEQUENCE#,A.BYTES,A.MEMBERS,A.STATUS,B.MEMBER
2 from V$LOG A,V$LOGFILE B
3 where A.GROUP# = B.GROUP#;


GROUP# SEQUENCE# BYTES MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
MEMBER
--------------------------------------------------------------------------------
2 29 52428800 1 ACTIVE
/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/o1_mf_2_479cmd6o_
.log

1 28 52428800 1 INACTIVE
/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/o1_mf_1_479cm9jx_
.log

3 30 104857600 1 CURRENT
/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/redo03.log



これでグループ1はINACTIVE(使用していない状態)になった。
こうなると、削除可能だ。
ちなみにACTIVEだと削除できない。


SQL> alter database drop logfile group 1;

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

SQL> alter database drop logfile group 2;
alter database drop logfile group 2
*
行1でエラーが発生しました。:
ORA-01624: ログ2はインスタンスXE(スレッド1)のクラッシュ・リカバリに必要です。 ORA-00312: オンライン・ログ2
スレッド1:
'/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/o1_mf_2_479cmd6o_.log'



ほら怒られた。
というわけで、もう1つREDOロググループを追加。


SQL> alter database add logfile group 4
2 ('/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/redo04.log')
3 size 100M;

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

SQL> alter database drop logfile group 2;
alter database drop logfile group 2
*
行1でエラーが発生しました。:
ORA-01624: ログ2はインスタンスXE(スレッド1)のクラッシュ・リカバリに必要です。 ORA-00312: オンライン・ログ2
スレッド1:
'/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/o1_mf_2_479cmd6o_.log'



追加しても、まだ削除できない。
なんでかっていうと、REDOロググループ4はできたてだから、データの同期が取れていない。
(SEQUENCE#が0だしUNUSEDだし)
まだ役立たずなのだ。


SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TI
------------- --------
2 1 29 52428800 1 NO ACTIVE
1442917 08-08-02

3 1 30 104857600 1 NO CURRENT
1465523 08-08-02

4 1 0 104857600 1 YES UNUSED



(でも、できたてだとなんで「ARCHIVE済み」になってるんだろう?)

で、強制的にログスイッチを起こす。


SQL> alter system switch logfile;

システムが変更されました。

SQL> select * from v$log;


GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TI
------------- --------
2 1 29 52428800 1 NO ACTIVE
1442917 08-08-02

3 1 30 104857600 1 NO ACTIVE
1465523 08-08-02

4 1 31 104857600 1 NO CURRENT
1465618 08-08-02



REDOロググループ4がCURRENTでSEQUENCE#も最新になった。
でも、削除したいグループ2は、まだACTIVEだ。
これじゃまだ削除できない。


SQL> alter database drop logfile group 2;

alter database drop logfile group 2
*
行1でエラーが発生しました。:
ORA-01624: ログ2はインスタンスXE(スレッド1)のクラッシュ・リカバリに必要です。 ORA-00312: オンライン・ログ2
スレッド1:
'/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/o1_mf_2_479cmd6o_.log'



INACTIVEになるまでログスイッチを起こすのだ。


SQL> alter system switch logfile;

システムが変更されました。

(↑これでグループ2がCURRENTになる)


SQL> alter system switch logfile;


システムが変更されました。

(↑これでグループ3がCURRENTになる)


SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TI
------------- --------
2 1 32 52428800 1 NO INACTIVE
1442917 08-08-02

3 1 33 104857600 1 NO CURRENT
1465523 08-08-02

4 1 31 104857600 1 NO INACTIVE
1465618 08-08-02



よっしゃ。INACTIVEになった。
これで心置きなくグループ2を削除できる。


SQL> alter database drop logfile group 2;


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


同じ要領で、今度はグループ1、グループ2を作り、
グループ3、グループ4を削除すればいい。

するとこうなった。


SQL> select * from v$log;


GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TI
------------- --------
1 1 35 104857600 1 NO CURRENT
1472065 08-08-02

2 1 33 104857600 1 NO INACTIVE
1471966 08-08-02



めでたしめでたし。

・・・いや、まだだ。

OS側の方も整理してやろう。
redo03.logとredo04.logはもういらないからね。


-rw-r----- 1 oracle dba 104858112 8月 2 19:07 redo01.log
-rw-r----- 1 oracle dba 104858112 8月 2 19:06 redo02.log
-rw-r----- 1 oracle dba 104858112 8月 2 14:25 redo03.log
-rw-r----- 1 oracle dba 104858112 8月 2 19:07 redo04.log
[root@localhost onlinelog]# rm redo03.log
rm: remove 通常ファイル `redo03.log'? y
[root@localhost onlinelog]# rm redo04.log
rm: remove 通常ファイル `redo04.log'? y
[root@localhost onlinelog]# rm redo04.log


これでよしと。

テーマ

注目テーマ 一覧

月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
REDOログファイルをいじってみよう。 今日もなんだかいい天気♪/BIGLOBEウェブリブログ
[ ]