Oracleアーカイブログの確認・削除・管理方法【領域不足を防ぐ完全ガイド】

当ページのリンクには広告が含まれています。

「ORA-00257が出てDBが止まった」「アーカイブログの領域が満杯」——アーカイブログの管理はOracleを本番運用する上で避けて通れない業務です。本記事では確認・削除・自動管理まで現場で使える方法を解説します。

目次

1. アーカイブログとは(ARCHIVELOGモードの基本) {#about}

Oracleには2つの動作モードがあります。

モード特徴
ARCHIVELOGモードREDOログのスイッチ時にアーカイブファイルを保存。障害時にリカバリ可能
NOARCHIVELOGモードアーカイブファイルを作成しない。コールドバックアップのみ対応

本番DBはほぼ必ずARCHIVELOGモードで運用します。アーカイブログが溜まり続けるため、定期的な削除・管理が必要です。

REDOログ(オンライン)
  ↓ ログスイッチ発生
アーカイブログ(オフライン)→ /arch/ORCL/1_1234_XXXXXX.arc
  ↓
RMANバックアップ後に削除

2. ARCHIVELOGモードの確認と変更 {#mode-check}

現在のモードを確認

-- SQL*Plusで確認
ARCHIVE LOG LIST;

出力例:

データベース・ログ・モード             アーカイブ・モード
自動アーカイブ                        有効
アーカイブ先                          USE_DB_RECOVERY_FILE_DEST
最古のオンライン・ログ順序             1234
次回アーカイブのログ順序              1236
現行のログ順序                         1236
-- V$DATABASEでも確認可能
SELECT NAME, LOG_MODE FROM V$DATABASE;

ARCHIVELOGモードへの変更(要DBシャットダウン)

-- SYSDBAで接続してDBをマウント状態にする
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

-- 確認
ARCHIVE LOG LIST;

3. アーカイブログの確認SQL {#check-archivelog}

生成されたアーカイブログの一覧

-- 直近のアーカイブログを確認
SELECT
    SEQUENCE#,
    NAME,
    ROUND(BLOCKS * BLOCK_SIZE / 1024 / 1024, 1) AS SIZE_MB,
    FIRST_TIME,
    NEXT_TIME,
    APPLIED
FROM V$ARCHIVED_LOG
WHERE STANDBY_DEST = 'NO'
  AND DELETED = 'NO'
ORDER BY SEQUENCE# DESC
FETCH FIRST 20 ROWS ONLY;

出力例:

SEQUENCE#  NAME                           SIZE_MB  FIRST_TIME           APPLIED
---------  ----------------------------   -------  -------------------  -------
1236       /arch/ORCL/1_1236_XXX.arc       125.3    2026-05-17 12:00     NO
1235       /arch/ORCL/1_1235_XXX.arc        98.7    2026-05-17 10:00     YES
1234       /arch/ORCL/1_1234_XXX.arc       112.1    2026-05-17 08:00     YES
  • APPLIED = YES:Data Guardスタンバイ側に適用済み(削除可能)
  • APPLIED = NO:未適用(Data Guard使用時は注意)

日ごとのアーカイブログ生成量を確認

-- 日ごとの生成サイズを確認(容量計画に使う)
SELECT
    TRUNC(FIRST_TIME, 'DD') AS 日付,
    COUNT(*) AS ファイル数,
    ROUND(SUM(BLOCKS * BLOCK_SIZE) / 1024 / 1024 / 1024, 2) AS 合計GB
FROM V$ARCHIVED_LOG
WHERE STANDBY_DEST = 'NO'
  AND DELETED = 'NO'
GROUP BY TRUNC(FIRST_TIME, 'DD')
ORDER BY 日付 DESC;

出力例:

日付        ファイル数  合計GB
----------  ---------  ------
2026-05-17   8          1.23
2026-05-16   24         3.56
2026-05-15   22         3.21

アーカイブログが出力されているパスを確認

-- アーカイブ先のパスを確認
SELECT DEST_ID, STATUS, TARGET, ARCHIVER, DESTINATION, ARCHIVED_THREAD#
FROM V$ARCHIVE_DEST
WHERE STATUS = 'VALID';

4. RMANでアーカイブログを削除する {#delete-rman}

アーカイブログの削除は必ずRMAN経由で行います。OSコマンドで直接削除するとRMANカタログとの整合性が壊れます。

RMANに接続

rman target /
# または
rman target sys/password@ORCL

バックアップ済みのアーカイブログを削除

RMAN> DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
# 7日以上前でバックアップ済みのものを削除(確認なし)

RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-3';
# 3日以上前のアーカイブログを削除(確認あり)

バックアップを2回取った後に削除

# 2回以上バックアップされたアーカイブログのみ削除(安全)
RMAN> DELETE NOPROMPT ARCHIVELOG ALL BACKED UP 2 TIMES TO DISK;

特定の期間のアーカイブログを削除

# 2026年4月以前を削除
RMAN> DELETE NOPROMPT ARCHIVELOG UNTIL TIME "TO_DATE('2026-05-01','YYYY-MM-DD')";

# シーケンス番号で指定
RMAN> DELETE NOPROMPT ARCHIVELOG FROM SEQUENCE 1100 UNTIL SEQUENCE 1200;

削除前にOBSOLETEなファイルを確認

RMAN> REPORT OBSOLETE;
RMAN> CROSSCHECK ARCHIVELOG ALL;  # カタログと実ファイルの整合性確認
RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;  # カタログにあるが実ファイルなし

5. アーカイブ領域(FRA)の確認と管理 {#fra}

OracleではFRA(Fast Recovery Area)にアーカイブログやバックアップをまとめて管理する設定が一般的です。

FRAの設定を確認

-- FRAの場所とサイズ設定を確認
SHOW PARAMETER DB_RECOVERY_FILE_DEST;
SHOW PARAMETER DB_RECOVERY_FILE_DEST_SIZE;

出力例:

NAME                             TYPE    VALUE
-------------------------------- ------- ------------------------------
db_recovery_file_dest            string  /u01/app/oracle/fast_recovery_area
db_recovery_file_dest_size       big integer  50G

FRAの使用状況を確認

-- FRAの使用状況(領域が逼迫しているか確認)
SELECT
    FILE_TYPE,
    ROUND(SPACE_USED / 1024 / 1024 / 1024, 2) AS 使用GB,
    ROUND(SPACE_RECLAIMABLE / 1024 / 1024 / 1024, 2) AS 回収可能GB,
    NUMBER_OF_FILES AS ファイル数
FROM V$RECOVERY_AREA_USAGE;

出力例:

FILE_TYPE              使用GB  回収可能GB  ファイル数
---------------------  ------  ---------  ---------
ARCHIVED LOG           38.50   30.20       312
BACKUP PIECE           8.20    0.00         24
IMAGE COPY             0.00    0.00          0
FLASHBACK LOG          0.20    0.10          5
  • 回収可能GB が大きい → RMANで削除できる余地がある

FRAのサイズを拡張する(一時的な対処)

-- FRAサイズを 50GB → 100GB に拡張(動的変更可能)
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 100G SCOPE=BOTH;

6. アーカイブログの自動管理設定 {#auto-manage}

RMANの保持ポリシー設定

# 7日間分のリカバリポイントを保持する設定
RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;

# バックアップ世代数で管理(2世代)
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 2;

# 現在のポリシーを確認
RMAN> SHOW RETENTION POLICY;

cronで自動削除スクリプトを設定(Linux)

#!/bin/bash
# /opt/oracle/scripts/archive_cleanup.sh

export ORACLE_HOME=/u01/app/oracle/product/19.3/dbhome
export ORACLE_SID=ORCL
export PATH=$ORACLE_HOME/bin:$PATH

rman target / << EOF
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
EXIT;
EOF
# crontabに登録(毎日午前2時に実行)
crontab -e
0 2 * * * /opt/oracle/scripts/archive_cleanup.sh >> /var/log/oracle/archive_cleanup.log 2>&1

7. ORA-00257:アーカイブログ領域満杯エラーの対処 {#ora-00257}

ORA-00257: アーカイバ・エラー。INTERNAL のみが接続できます。

このエラーが出るとSYSDBA以外はDBに接続できなくなります。迅速な対応が必要です。

手順

# 1. SYSDBAで接続
sqlplus / as sysdba

# 2. FRA使用状況を確認
SELECT * FROM V$RECOVERY_AREA_USAGE;

# 3. RMANでアーカイブログを削除
rman target /
RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
RMAN> DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-3';
-- 4. 必要に応じてFRAサイズを拡張
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 100G SCOPE=BOTH;
# 5. DB接続が復旧したか確認
sqlplus scott/tiger@ORCL

事前に監視アラートを設定する

-- FRA使用率を確認するSQL(監視スクリプトに組み込む)
SELECT
    ROUND(SUM(SPACE_USED) / SUM(SPACE_LIMIT) * 100, 1) AS FRA使用率
FROM V$RECOVERY_FILE_DEST;

FRA使用率が 80%超 でアラート、90%超 で緊急対応が目安です。


8. まとめ:アーカイブログ管理チェックリスト {#summary}

定期確認(週次)
□ V$RECOVERY_AREA_USAGE でFRA使用率を確認(80%以下を維持)
□ V$ARCHIVED_LOG で日次生成量に異常がないか確認

定期メンテナンス(週次〜月次)
□ DELETE ARCHIVELOG COMPLETED BEFORE 'SYSDATE-7' でバックアップ済みを削除
□ CROSSCHECK → DELETE EXPIRED ARCHIVELOG で不整合を解消

トラブル対応
□ ORA-00257 発生時は SYSDBA で接続 → RMAN削除 → 必要ならFRA拡張
□ OSコマンドでアーカイブログを直接削除しない(RMANカタログが壊れる)

関連記事:

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ITの事や自分の経験談など綴っていきたいと思っています。

コメント

コメントする

CAPTCHA


目次