Oracleデータベースでは、REDOログのサイズが小さいとログスイッチが頻繁に発生し、性能や可用性に悪影響を与えることがあります。
この記事では、REDOログを大きくする安全な手順と、ログスイッチ頻度の目安を解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🔍 REDOログとログスイッチとは?
REDOログは、データベース変更の履歴(トランザクションログ)を記録するファイルです。
Oracleは順番にログを切り替えて使用し、この切り替えをログスイッチ(Log Switch)と呼びます。
✅ ログスイッチの推奨頻度
ログスイッチが多すぎると以下の問題が発生します。
- チェックポイント多発によるI/O負荷増加
- アーカイブログ生成の遅延
- RMANバックアップ処理の負荷増大
🔸推奨頻度:1時間に1〜2回
📊 ログスイッチ頻度の確認SQL
SELECT
TO_CHAR(FIRST_TIME, 'YYYY-MM-DD HH24') AS HOUR,
COUNT(*) AS SWITCH_COUNT
FROM
V$LOG_HISTORY
WHERE
FIRST_TIME > SYSDATE - 1
GROUP BY
TO_CHAR(FIRST_TIME, 'YYYY-MM-DD HH24')
ORDER BY
HOUR;
SQL> SELECT
2 TO_CHAR(FIRST_TIME, 'YYYY-MM-DD HH24') AS HOUR,
3 COUNT(*) AS SWITCH_COUNT
4 FROM
5 V$LOG_HISTORY
6 WHERE
7 FIRST_TIME > SYSDATE - 1
8 GROUP BY
9 TO_CHAR(FIRST_TIME, 'YYYY-MM-DD HH24')
10 ORDER BY
11 HOUR;
HOUR SWITCH_COUNT
------------- ------------
2025-11-19 17 1
2025-11-19 18 2
2025-11-19 19 3
2025-11-19 20 1
📌 現在のREDOログ情報の確認
REDOログのサイズ・状態・メンバー数を確認
SELECT GROUP#, STATUS, BYTES/1024/1024 AS SIZE_MB, MEMBERS FROM V$LOG;
SQL> SELECT GROUP#, STATUS, BYTES/1024/1024 AS SIZE_MB, MEMBERS FROM V$LOG;
GROUP# STATUS SIZE_MB MEMBERS
---------- ---------------- ---------- ----------
1 CURRENT 200 1
2 INACTIVE 200 1
3 ACTIVE 200 1
REDOログの物理パスを確認
SELECT GROUP#, MEMBER FROM V$LOGFILE ORDER BY GROUP#;
SQL> SELECT GROUP#, MEMBER FROM V$LOGFILE ORDER BY GROUP#;
GROUP# MEMBER
---------- ----------------------------------------
1 /u01/app/oracle/oradata/ORCL/redo01.log
2 /u01/app/oracle/oradata/ORCL/redo02.log
3 /u01/app/oracle/oradata/ORCL/redo03.log
🛠 REDOログサイズを大きくする手順
🔸REDOログサイズは直接変更できないため、以下の流れで対応します:
- 新しい大きなサイズのロググループを追加
- ログスイッチを実行して現在のロググループを退避
- 古いロググループを削除
- 不要になったログファイルをOS上で削除
1. 新しいロググループの追加(例:1GB)
ALTER DATABASE ADD LOGFILE GROUP 4 '/u01/app/oracle/oradata/ORCL/redo04.log' SIZE 1G;
ALTER DATABASE ADD LOGFILE GROUP 5 '/u01/app/oracle/oradata/ORCL/redo05.log' SIZE 1G;
ALTER DATABASE ADD LOGFILE GROUP 6 '/u01/app/oracle/oradata/ORCL/redo06.log' SIZE 1G;
2. 削除対象グループの状態確認
SELECT GROUP#, STATUS FROM V$LOG ORDER BY GROUP#;
❗削除不可なSTATUS:
CURRENT(現在使用中)ACTIVEかつクラッシュリカバリに必要なもの
3. 状態がACTIVEで削除できない場合の対応
ALTER DATABASE DROP LOGFILE GROUP 2;
🔻エラーになる場合:
ORA-01624: ログ2はインスタンスのクラッシュ・リカバリに必要です。
✅ 削除できるようにするための手順
✅ 手順①:チェックポイントを発行
ALTER SYSTEM CHECKPOINT;
✅ 手順②:ログスイッチを複数回実行
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;
ALTER SYSTEM SWITCH LOGFILE;
これにより、CURRENTが他のグループに移動し、GROUP 2がINACTIVEになる可能性があります。
✅ 手順③:再確認
SELECT GROUP#, STATUS FROM V$LOG ORDER BY GROUP#;
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
✅ 手順④:削除実行
ALTER DATABASE DROP LOGFILE GROUP 2;
SQL> set lin 1000 pages 1000
SQL> SELECT GROUP#, STATUS, BYTES/1024/1024 AS SIZE_MB, MEMBERS FROM V$LOG;
GROUP# STATUS SIZE_MB MEMBERS
---------- ------------------------------------------------ ---------- ----------
1 ACTIVE 200 1
2 CURRENT 200 1
3 INACTIVE 200 1
SQL> col member for a50
SQL> SELECT GROUP#, MEMBER FROM V$LOGFILE ORDER BY GROUP#;
GROUP# MEMBER
---------- --------------------------------------------------
1 /u01/app/oracle/oradata/V19/redo01.log
2 /u01/app/oracle/oradata/V19/redo02.log
3 /u01/app/oracle/oradata/V19/redo03.log
SQL> ALTER DATABASE ADD LOGFILE GROUP 4 '/u01/app/oracle/oradata/V19/redo04.log' SIZE 1G;
データベースが変更されました。
SQL> ALTER DATABASE ADD LOGFILE GROUP 5 '/u01/app/oracle/oradata/V19/redo05.log' SIZE 1G;
データベースが変更されました。
SQL> ALTER DATABASE ADD LOGFILE GROUP 6 '/u01/app/oracle/oradata/V19/redo06.log' SIZE 1G;
データベースが変更されました。
SQL> SELECT GROUP#, STATUS, BYTES/1024/1024 AS SIZE_MB, MEMBERS FROM V$LOG;
GROUP# STATUS SIZE_MB MEMBERS
---------- ------------------------------------------------ ---------- ----------
1 INACTIVE 200 1
2 CURRENT 200 1
3 INACTIVE 200 1
4 UNUSED 1024 1
5 UNUSED 1024 1
6 UNUSED 1024 1
6行が選択されました。
SQL> ALTER SYSTEM SWITCH LOGFILE;
システムが変更されました。
SQL> ALTER SYSTEM SWITCH LOGFILE;
システムが変更されました。
SQL> SELECT GROUP#, STATUS, BYTES/1024/1024 AS SIZE_MB, MEMBERS FROM V$LOG;
GROUP# STATUS SIZE_MB MEMBERS
---------- ------------------------------------------------ ---------- ----------
1 INACTIVE 200 1
2 ACTIVE 200 1 ★アクティブ
3 INACTIVE 200 1
4 ACTIVE 1024 1
5 CURRENT 1024 1 ★カレント
6 UNUSED 1024 1
6行が選択されました。
SQL> ALTER DATABASE DROP LOGFILE GROUP 1;
データベースが変更されました。
SQL> ALTER DATABASE DROP LOGFILE GROUP 2; ★エラー
ALTER DATABASE DROP LOGFILE GROUP 2
*
行1でエラーが発生しました。:
ORA-01624: ログ2はインスタンスv19(スレッド1)のクラッシュ・リカバリに必要です。 ORA-00312: オンライン・ログ2
スレッド1: '/u01/app/oracle/oradata/V19/redo02.log'
SQL> ALTER SYSTEM SWITCH LOGFILE;
システムが変更されました。
SQL> SELECT GROUP#, STATUS, BYTES/1024/1024 AS SIZE_MB, MEMBERS FROM V$LOG;
GROUP# STATUS SIZE_MB MEMBERS
---------- ------------------------------------------------ ---------- ----------
2 ACTIVE 200 1 ★ログスイッチしても変わらない
3 INACTIVE 200 1
4 ACTIVE 1024 1
5 ACTIVE 1024 1
6 CURRENT 1024 1
SQL> ALTER SYSTEM CHECKPOINT; ★チェックポイントを発行
システムが変更されました。
SQL> SELECT GROUP#, STATUS, BYTES/1024/1024 AS SIZE_MB, MEMBERS FROM V$LOG;
GROUP# STATUS SIZE_MB MEMBERS
---------- ------------------------------------------------ ---------- ----------
2 INACTIVE 200 1 ★インアクティブに変わる
3 INACTIVE 200 1
4 INACTIVE 1024 1
5 INACTIVE 1024 1
6 CURRENT 1024 1
SQL> ALTER DATABASE DROP LOGFILE GROUP 2; ★削除できた
データベースが変更されました。
SQL> ALTER DATABASE DROP LOGFILE GROUP 3;
データベースが変更されました。
SQL> SELECT GROUP#, STATUS, BYTES/1024/1024 AS SIZE_MB, MEMBERS FROM V$LOG;
GROUP# STATUS SIZE_MB MEMBERS
---------- ------------------------------------------------ ---------- ----------
4 INACTIVE 1024 1
5 INACTIVE 1024 1
6 CURRENT 1024 1
💡 補足:それでも削除できない場合
一度データベースを再起動することでクラッシュリカバリの対象がクリアされ、削除可能になるケースがあります。
SHUTDOWN IMMEDIATE;
STARTUP;
再起動後に再度状態を確認し、DROPを実行してください。
4. 不要になったログファイルの削除(OSレベル)
rm -f /u01/app/oracle/oradata/ORCL/redo01.log
rm -f /u01/app/oracle/oradata/ORCL/redo02.log
...
※V$LOGFILEで確認したパスを参照してください。
5. 冗長性のためにメンバーを追加(本番推奨)
ALTER DATABASE ADD LOGFILE MEMBER '/u02/oracle/oradata/ORCL/redo04b.log' TO GROUP 4;
✅ 作業手順まとめ表
| ステップ | 実施内容 | コマンド例 |
|---|---|---|
| 1 | 新しいロググループ追加 | ALTER DATABASE ADD LOGFILE ... |
| 2 | チェックポイント実行 | ALTER SYSTEM CHECKPOINT; |
| 3 | ログスイッチ複数回 | ALTER SYSTEM SWITCH LOGFILE; |
| 4 | グループの状態確認 | SELECT GROUP#, STATUS FROM V$LOG; |
| 5 | INACTIVEならDROP実行 | ALTER DATABASE DROP LOGFILE GROUP n; |
| 6 | OS上のログファイル削除(任意) | rm -f redo0n.log |
🏁 まとめ
- REDOログのサイズ拡張には「追加→スイッチ→削除」の流れが必要
ACTIVEやCURRENTのログは直接削除できないため、ログスイッチとチェックポイントが鍵- ログスイッチ頻度は1時間に1~2回がOracle社の推奨
- 状況に応じてDB再起動でクリアされるリカバリ要件もあり
[参考]
9 REDOログの管理




コメント