「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 50GFRAの使用状況を確認
-- 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>&17. 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カタログが壊れる)関連記事:









コメント