已经不止一次自己本机电脑安装的Oracle使用plsqldev软件登入提示这个了.一般前一天还好好的,今天就不行了.好好总结一下吧,也共大家一起借鉴.主要原因还是数据的归档日志因为内部内存已经耗尽,不能在进行归档导致数据库启动异常,没有办法正常打开数据库实例,监听程序就无法连接到对应的orcle实例数据库上,就导致了这个问题.归根结底还是Oracle服务由于开通了归档功能,内存已经满了无法归档导致数据库实例没有正常启动,也就监听到无法连接和使用了.
关于找出错误原因还是看Oracle的监听日志和使用命令行窗口上管理员身份去登入测试.Oracle的监听日志的位置一般在你安装Oracle的位置例如:D:\***\***\diag\rdbms\orcl\orcl\alert这样目录下的log.xml文件中,如下图:
这个Oracle的警告日志文件是问题信息的关键.
打开日志文件后可以查看到:
Errors in file d:\app\***\diag\rdbms\orcl\orcl\trace\orcl_arc1_7068.trc:
ORA-16038: log 1 sequence# 5143 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 1 thread 1: 'D:\APP\***\ORADATA\ORCL\REDO01.LOG'日志不能被归档了;
具体解释如下:
ORA-16038: 日志 1 sequence# 5143 无法归档
- 含义:数据库正在尝试将一个已经写满的联机重做日志文件(REDO01.LOG,序列号 5143)归档到归档日志目标位置,但这个操作失败了。
- 背景:在 ARCHIVELOG 模式下,当一个联机重做日志文件写满后,ARCn 后台进程会将其复制到一个或多个归档位置,这个过程叫“归档”。只有归档成功后,这个联机日志文件才能被 LGWR 后台进程再次使用。
ORA-19809: 超出了恢复文件数的限制
- 含义:这是导致归档失败的根本原因。Oracle 的快速恢复区(Fast Recovery Area, FRA)已经满了,无法再存放新的归档日志文件。
- FRA 是什么?:FRA 是 Oracle 管理的一个磁盘空间,用于集中存放备份文件和归档日志文件。它有一个预设的大小限制。当这个空间被用尽时,数据库就无法再创建新的归档日志,也无法进行新的备份。
ORA-00312: 联机日志 1 线程 1: ‘D:\APP\***\ORADATA\ORCL\REDO01.LOG’
- 含义:这指明了具体是哪个联机日志文件出了问题。它告诉数据库,
REDO01.LOG
这个文件需要被归档,但由于 FRA 已满,归档失败
- 含义:这指明了具体是哪个联机日志文件出了问题。它告诉数据库,
数据库在 OPEN
阶段需要 LGWR 进程写入重做日志。REDO01.LOG
写满了,需要被归档。ARCn 进程尝试将其归档到 FRA,但发现 FRA 空间已满,归档失败(ORA-19809)。因为归档失败,REDO01.LOG
无法被复用,LGWR 进程没有可用的日志文件可以写入,数据库活动被完全阻塞,最终导致数据库实例崩溃,并断开你的连接(ORA-03113)。
解决方案:
方案一:增加 FRA 的大小(最推荐,一劳永逸)
这是最直接、最根本的解决方法。如果你的磁盘有足够空间,直接扩大 FRA 的容量。
- 首先,你需要启动数据库到 MOUNT 状态。因为数据库现在无法 OPEN,但 MOUNT 状态是允许你修改这些参数的。
不能正常启动后台日志就会记入异常在log.xml中.
务必将数据库服务启动数据实例到mout状态,这样才可以有后续操作,如下图:
修改归档日志存储大小
这样数据库就正常打开了.但是不能一味的扩大数据库归档日志的储存大小还要将归档日志给清除掉.并且进行设置当日志被归档两次后就将其删除(configure archivelog deletion policy to backed up 2 times;).将Oracle数据库重置成mount状态,然后重新打开一个命令行窗口使用Oracle自带的rman工具登入rman target sys/(用户自己对应的密码)后进行清理.
设置一个保留策略,例如,只保留最近7天的备份和归档日志:
-- 设置恢复窗口为7天
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
-- 或者,设置保留2份备份
-- CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
-- 启用自动删除过期的备份和归档日志
CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DISK;
这个策略的含义是:**“当一个归档日志已经被成功备份到磁盘至少1次后,它就可以被自动删除了”**。设置好策略后,你需要定期运行 RMAN 的 `DELETE OBSOLETE` 命令来清理这些过期的文件。这个命令通常可以放在一个定时任务(如 Windows 的计划任务或 Linux 的 Cron)中每天执行。
-- 删除所有根据保留策略判断为“过时”的备份和归档日志
DELETE NOPROMPT OBSOLETE;