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 これでよしと。 |
<< 前記事(2008/08/02) | ブログのトップへ | 後記事(2008/08/03) >> |
タイトル (本文) | ブログ名/日時 |
---|
内 容 | ニックネーム/日時 |
---|
<< 前記事(2008/08/02) | ブログのトップへ | 後記事(2008/08/03) >> |