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

アクセスカウンタ

help リーダーに追加 RSS カレントのオンラインREDOログをあーだこーだしてみる。

<<   作成日時 : 2008/08/21 00:16   >>

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

今の状態はコレ。
カレントのオンラインREDOログは6番。

===============================================================
SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------
1 1 5 52428800 1 YES ACTIVE 952691 08-08-20
2 1 4 52428800 1 YES INACTIVE 952602 08-08-20
3 1 6 52428800 1 NO CURRENT 960354 08-08-20
===============================================================

んじゃ、カレントのオンラインREDOログ、redo02.logをなくしてしまおう。

===============================================================
[oracle@localhost onlinelog]$ ls -l
合計 153780
-rw-r----- 1 oracle dba 52429312 8月 20 08:06 redo01.log
-rw-r----- 1 oracle dba 52429312 8月 20 03:02 redo02.log
-rw-r----- 1 oracle dba 52429312 8月 20 08:06 redo03.log
[oracle@localhost onlinelog]$ mv redo03.log redo03.bak
[oracle@localhost onlinelog]$ ls -l
合計 153780
-rw-r----- 1 oracle dba 52429312 8月 20 08:06 redo01.log
-rw-r----- 1 oracle dba 52429312 8月 20 03:02 redo02.log
-rw-r----- 1 oracle dba 52429312 8月 20 08:07 redo03.bak
===============================================================

これで、ログスイッチとか発生したら、エラーになるんだよね。きっと。
たくさん更新をさせて、ログスイッチを起こさせてやろうと思う。

===============================================================
SQL> begin
2 for i in 1..29999 loop
3 insert into test99.test99(col1,col2,col3)
4 values(i,'abcdefghijklmnopqrst',sysdate);
5 end loop;
6 end;
7 /

PL/SQLプロシージャが正常に完了しました。

SQL> commit;

コミットが完了しました。
===============================================================

あ・・・あれ?
この程度の更新じゃ、ログスイッチは起きないの?

・・・と思ったら、

===============================================================
SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------
1 1 5 52428800 1 YES INACTIVE 952691 08-08-20
2 1 7 52428800 1 NO CURRENT 985995 08-08-20
3 1 6 52428800 1 NO ACTIVE 960354 08-08-20
===============================================================

カレントは7番になっている。ログスイッチが起きたんだ。
でも、エラーは起きてない。
どのタイミングでエラーが起きるんだ?
でも、6番はアーカイブされていない(ファイルがないのにアーカイブされるわけもない)。
なんでエラーにならないんだ?

ちょっとアラートログを見てみよう。

===============================================================
Wed Aug 20 22:33:20 2008
Thread 1 advanced to log sequence 7
Current log# 2 seq# 7 mem# 0: /usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlin
elog/redo02.log
Wed Aug 20 22:33:20 2008
Errors in file /usr/lib/oracle/xe/app/oracle/admin/XE/bdump/xe_arc0_22687.trc:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/on
linelog/redo03.log'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Wed Aug 20 22:33:20 2008
Errors in file /usr/lib/oracle/xe/app/oracle/admin/XE/bdump/xe_arc0_22687.trc:
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1: '/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/on
linelog/redo03.log'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Wed Aug 20 22:33:20 2008
ARC0: Failed to archive thread 1 sequence 6 (0)
ARCH: Archival stopped, error occurred. Will continue retrying
Wed Aug 20 22:33:20 2008
ORACLE Instance XE - Archival Error
Wed Aug 20 22:33:20 2008
ORA-16038: log 3 sequence# 6 cannot be archived
ORA-00312: online log 3 thread 1: '/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/on
linelog/redo03.log'
・・・・・
===============================================================

なぁ〜んだ。ちゃんとエラーでてるじゃん。
しかも、や・ま・ほ・ど♪
これでこそリカバリのしがいがあるってもんだ(意味わからん)。

===============================================================
SQL> select status from v$instance;

STATUS
------------
OPEN
===============================================================

でも、DBはオープンのままなんだなぁ。
今、カレントがグループ1で稼動しているから、それはそれでOKなのか。

ん・・・?
待てよ。
オンラインREDOログは、最低2グループ必要だから、もしかするとグループ1も破損したら、DBが落ちるのかな?

やってみよう。

===============================================================
[oracle@localhost onlinelog]$ ls -l
合計 153780
-rw-r----- 1 oracle dba 52429312 8月 20 08:06 redo01.log
-rw-r----- 1 oracle dba 52429312 8月 20 23:14 redo02.log
-rw-r----- 1 oracle dba 52429312 8月 20 22:33 redo03.bak
[oracle@localhost onlinelog]$ mv redo02.log redo02.bak
[oracle@localhost onlinelog]$ ls -l
合計 153780
-rw-r----- 1 oracle dba 52429312 8月 20 08:06 redo01.log
-rw-r----- 1 oracle dba 52429312 8月 20 23:15 redo02.bak
-rw-r----- 1 oracle dba 52429312 8月 20 22:33 redo03.bak
===============================================================

で、ログスイッチを起こしてみる。
いや、アーカイブさせよう。

===============================================================
SQL> alter system archive log current;
alter system archive log current
*
行1でエラーが発生しました。:
ORA-16038: ログ3、順序番号6をアーカイブできません。 ORA-00312:
オンライン・ログ3 スレッド1: '/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/onlinelog/redo03.log'


SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------
1 1 8 52428800 1 NO CURRENT 987260 08-08-20
2 1 7 52428800 1 NO ACTIVE 985995 08-08-20
3 1 6 52428800 1 NO INACTIVE 960354 08-08-20

SQL> select status from v$instance;

STATUS
------------
OPEN
===============================================================

じゃじゃーん。エラーが出た。
ロググループ3がアーカイブできないって。さっきからできてないじゃん。
何を今さら。

・・・ということは、REDOログファイルの障害って、気付きにくい障害になるのかもしれない。
マメにアラートログを見るくせをつけないといけないかな。
少なくとも、心当たりのないトレースファイルが出力されていたら、必ず見なくちゃいけないね。

カレントの順序番号は8番だけど、6番も7番もアーカイブされていない。
だから、5番までしかリカバリできない。

気付くのが遅くなると、損害がどんどん大きくなる。
オンラインREDOログファイルの障害、おそるべし。

というわけで、5番まで(6番の直前まで)不完全リカバリだ。

===============================================================
[oracle@localhost onlinelog]$ rman target /

Recovery Manager: Release 10.2.0.1.0 - Production on 水 8月 20 23:26:01 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

ターゲット・データベース: XE (データベースID=2543114493)に接続されました

RMAN> startup force mount;

Oracleインスタンスが起動しました
データベースがマウントされました。

システム・グローバル領域の合計は、 146800640バイトです。

Fixed Size 1257668バイト
Variable Size 71307068バイト
Database Buffers 71303168バイト
Redo Buffers 2932736バイト

RMAN> restore database;

restoreが開始されました(開始時間: 08-08-20)
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: sid=36 devtype=DISK

チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています。
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
データファイル00001を/usr/lib/oracle/xe/oradata/XE/system.dbfへリストア
データファイル00002を/usr/lib/oracle/xe/oradata/XE/undo.dbfへリストア
データファイル00003を/usr/lib/oracle/xe/oradata/XE/sysaux.dbfへリストア
データファイル00004を/usr/lib/oracle/xe/oradata/XE/users.dbfへリストア
データファイル00005を/usr/lib/oracle/xe/oradata/XE/rman01.dbfへリストア
データファイル00006を/usr/lib/oracle/xe/oradata/XE/imptsp01.dbfへリストア
データファイル00007を/usr/lib/oracle/xe/oradata/XE/usrtsp_01.dbfへリストア
チャネルORA_DISK_1: バックアップ・ピース/usr/lib/oracle/xe/oradata_bak/rman/bk0_125_1_663209363から読取り中です

<以下略>

チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:02:47
restoreが完了しました(完了時間: 08-08-20)

RMAN> recover database until sequence 6 thread 1;

recoverが開始されました(開始時間: 08-08-20)
チャネルORA_DISK_1の使用
チャネルORA_DISK_1: 増分データファイル・バックアップ・セットのリストア開始
チャネルORA_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
データファイル00001のリストア先: /usr/lib/oracle/xe/oradata/XE/system.dbf
データファイル00002のリストア先: /usr/lib/oracle/xe/oradata/XE/undo.dbf
データファイル00003のリストア先: /usr/lib/oracle/xe/oradata/XE/sysaux.dbf
データファイル00004のリストア先: /usr/lib/oracle/xe/oradata/XE/users.dbf
データファイル00005のリストア先: /usr/lib/oracle/xe/oradata/XE/rman01.dbf
データファイル00006のリストア先: /usr/lib/oracle/xe/oradata/XE/imptsp01.dbf
データファイル00007のリストア先: /usr/lib/oracle/xe/oradata/XE/usrtsp_01.dbf
チャネルORA_DISK_1: バックアップ・ピース/usr/lib/oracle/xe/oradata_bak/rman/bk1_130_1_663217222から読取り中です
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
ピース・ハンドル=/usr/lib/oracle/xe/oradata_bak/rman/bk1_130_1_663217222 タグ=TAG20080820T030022
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:04

メディア・リカバリを開始しています

アーカイブ・ログ・スレッド: 1、順序: 5は、ファイル: /usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/archivelog/1_5_663208425.dbfとしてディスクに存在します
チャネルORA_DISK_1: デフォルトの宛先へのアーカイブ・ログのリストアを開始しています
チャネルORA_DISK_1: アーカイブ・ログをリストアしています
アーカイブ・ログ・スレッド=1 順序=4
チャネルORA_DISK_1: バックアップ・ピース/usr/lib/oracle/xe/oradata_bak/rman/arc_132_1_663217332から読取り中です
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
ピース・ハンドル=/usr/lib/oracle/xe/oradata_bak/rman/arc_132_1_663217332 タグ=TAG20080820T030212
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:01
アーカイブ・ログ・ファイル名=/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/archivelog/1_4_663208425.dbf スレッド=1 順序=4
アーカイブ・ログ・ファイル名=/usr/lib/oracle/xe/app/oracle/flash_recovery_area/XE/archivelog/1_5_663208425.dbf スレッド=1 順序=5
メディア・リカバリが完了しました。経過時間: 00:00:07
recoverが完了しました(完了時間: 08-08-20)

RMAN> alter database open resetlogs;

データベースがオープンしました。
===============================================================

オンラインREDOログは、グループ1以外、新品になった。
(2と3をなくしたんだから、当たり前)

===============================================================
SQL> select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TI
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------
1 1 1 52428800 1 NO CURRENT 960355 08-08-20
2 1 0 52428800 1 YES UNUSED 0
3 1 0 52428800 1 YES UNUSED 0

[oracle@localhost onlinelog]$ ls
redo01.log redo02.bak redo02.log redo03.bak redo03.log
===============================================================

なんか近頃、似たようなことばかり書いている気がするな・・・。

設定テーマ

注目テーマ 一覧

月別リンク

ブログ気持玉

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

トラックバック(0件)

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

トラックバック用URL help


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

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文