文章

Oracle 归档日志满导致数据库无法连接处理方法和设置自动删除数据库归档

记录 Oracle 数据库因归档日志满了导致数据库无法连接问题处理过程

1.使用 rman 删除归档

-- 进入RMAN
rman target /
-- 显示无用的archivelog
crosscheck archivelog all;
-- 删除过期的归档
delete expired archivelog all;
-- 或者删除七天前日志
delete archivelog until time 'sysdate-7';

2.删除磁盘上的归档日志文件

在 rman 中删除了归档磁盘上的对应文件并不会删除

-- sqlplus进入实例
-- 查看flash recovery area的使用情况
select * from V$FLASH_RECOVERY_AREA_USAGE;
#查看归档日志所在目录
show parameter recover;
-- 删除磁盘文件
find 归档目录 -type f -name "*.arc" -mtime +7 -exec rm {} \

归档文件删除完成。

3.设置归档自动删除

  1. 修改归档过期时间
-- SQLPlus 连接数据库,设置归档日志过期时间为7天
-- LOG_ARCHIVE_DEST_1是归档目标,LOCATION=USE_DB_RECOVERY_FILE_DEST表示使用数据库恢复文件目录,REOPEN=5表示重新尝试连接到归档目标的频率,VALID_FOR=(ALL_LOGFILES,ALL_ROLES)表示适用于所有归档日志文件和所有角色,DB_UNIQUE_NAME应替换为你的数据库唯一名称,7表示过期时间(以天为单位)
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST REOPEN=5 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DB_UNIQUE_NAME';
  1. 启用RMAN的自动归档日志删除功能
rman target /
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
  1. 设置自动归档(若之前未设置则开启)
-- 检查自动归档模式是否已启用
SELECT log_mode FROM v$database;
-- 如果自动归档未启用,可以使用以下命令启用
ALTER DATABASE ARCHIVELOG;
-- 根据磁盘大小修改闪回空间大小(默认4G)
alter system set db_recovery_file_dest_size=400G;
  1. 删除磁盘归档物理文件脚本

crontab -e 添加 0 0 */7 * * ? /path/to/your/script.sh

#!/bin/bash
# 删除过期的归档文件(以7天为例)
ARCHIVE_LOG_DIR=/path/to/archive/log/directory
find $ARCHIVE_LOG_DIR -type f -name "*.arc" -mtime +7 -exec rm {} \;
License:  CC BY 4.0