一、 问题影响
如果数据库归档不设置归档删除策略或归档暴增导致归档空间满,数据库将无法提供服
务,甚至无法关闭数据库。 因为关闭数据库会出发写日志,此时空间满了是不能写入日
志进而导致数据库无法启动。 业务系统将无法使用。
二、 归档存放方式, 有如下几种情况:
1、 本地文件系统存放
2、 本地文件系统且存放在快速闪回区内
3、 ASM 存储中存放
4、 ASM 存储中且放在快速闪回区内
三、 处理办法
1、 如果归档日志存放在文件系统或 ASM 存储内, 不在快速闪回区中;则可以根据业务
需求将该文件系统目录中或 ASM 存储内的归档文件迁移到其他空间, 也可以将归
档日志通过 RMAN 的方式备份出来从而释放归档存放的空间。
2、 如果放在文件系统或 ASM 存储中的闪回区内, 人工迁移文件后,数据库是无法识别
空间释放的; 因为快速闪回区是 Oracle 数据库自己管理, 需要让数据库识别到; 针
对此种现象,见标题四
四、 快速闪回区归档撑满解决方法
如果快速闪回区内归档满后,数据库将无法操作,甚至无法关闭数据库;此时, 解决方
法是,将数据库中的一个实例通过 shutdown abort 方式关闭;( shutdown abort 方式将
不检查数据文件一致性且不将内存中的数据写入到数据文件中,跟强制断电效果一样,
所以该操作慎重) ( 如果存在 OGG 需要提前关闭与该主机关联的 OGG 进程,方式改 OGG
进程挂起,并预防归档丢失)
数据库关闭后,通过 startup mount 方式,将数据库启动到 mount 状态;此时,可以通
过: select * from v$recovery_file_dest;检测快速闪回区的使用情况( 主要是产看当前快
速闪回区的容量大小);
如果 ASM 存储或文件系统没有容量可以扩充,则先给 ASM 或文件系统扩充空间;然后,
通过 alter system set db_recovery_file_dest_size = 100G( 将之前大小扩种几十 G, 此处仅
供参考)。 扩充后, 数据库将恢复正常使用。
通过 rman target /方式,登录到 RMAN 中,执行 crosscheck archivelog all; 检测数据库归
档的有效性;
通过在 RMAN 中,执行 delete noprompt archivelog until time “sysdate -3”;( 该命令表示
删除归档日志,保留到 3 天前,具体保留几天,根据业务清空, 该天数仅供参考)