oracle归档日志超出了恢复闪回恢复区(flash_recovery_area)限制的解决方法

来源:互联网 发布:人民邮电 算法谜题 编辑:程序博客网 时间:2024/04/27 21:15

一、问题描述:

系统报告以下错误:

ORA-16038: 无法归档

ORA-19809: 超出了恢复文件数的限制

ORA-00312: 联机日志

二、问题分析:      

系统启用归档日志时,oracle会按照一定的时间间隔在闪回恢复区产生大量的归档日志文件。利用这些文件可在数据库失败时将数据库恢复到任何时刻。

(原因一)归档日志是保存在闪回恢复区(/oracle/app/flash_recovery_area/ORCL/archivelog)的,闪回恢复区默认一般是4G,归档日志文件超过4G后归档便无法成功,同时数据库访问和各种操作都会失败。

(原因二)归档日志未超过闪回恢复区的设置,但是磁盘空间不足(通常情况下是闪回恢复区的设置比磁盘剩余空间大引起的),也会发生以上错误

三、解决方法:

通过一下三种方式可以解决上述问题,但尽可能在操作前完整备份数据库。

(方式一)关闭归档日志功能,同时删除归档日志文件。删除日志前必须备份数据库。

关闭归档日志功能:

sql> archive log list;   //查看是否是归档方式
sql> alter system set log_archive_start=falsescope=spfile; //禁用自动归档

sql> shutdown immediate;
sql> startup mount;    //打开控制文件,不打开数据文件

sql> alter database noarchivelog; //将数据库切换为非归档模式

sql> alter database open;   //将数据文件打开
sql> archive log list;   //查看此时便处于非归档模式

 

sql>select *from v$log;查看归档文件组的列表

    GROUP#    THREAD# SEQUENCE#    BYTES BLOCKSIZE    MEMBERS ARC STATUS  FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME

---------- -------------------- ---------- ---------- ---------- --- ---------------- ---------------------- ------------ ---------

         1          1     13516   52428800        512          1 NO INACTIVE             36395288707-NOV-12    363981839 07-NOV-12

         2          1     13515   52428800        512          1 NO INACTIVE             36388722707-NOV-12    363952887 07-NOV-12

         3          1     13517   52428800        512          1 NO CURRENT              36398183907-NOV-12   2.8147E+14

  sql>alter database clear unarchived logfile group 1;

       sql>alterdatabase clear unarchived logfile group 2;

       sql>alterdatabase clear unarchived logfile group 3;

       sql>shutdownimmediate;

       sql>startupopen;

 

(方式二)增大闪回恢复区的设置。
       $ sqlplus/ as sysdba

sql>showparameter db_recovery_file_dest;

sql>shutdown immediate

sql>startup mount

sql>alter system set db_recovery_file_dest_size=20g scope=both;

sql>shutdown immediate

sql>startup

sql>quit

 

(方式三)增大磁盘空间

       删除或移除不需要的文件,或增加该磁盘的空间。

四、参考资料:

       (一)打开归档日志:

sql>archive log list;   //查看是不是归档方式
sql> alter system set log_archive_start=true scope=spfile; //
启用主动归档
sql> shutdown immediate;
sql> startup mount;    //
打开控制文件,不打开数据文件
sql> alter database archivelog; //
将数据库切换为归档模式
sql> alter database open;   //
将数据文件打开
sql> archive log list;   #
查看此时是否处于归档模式
查询以确定数据库位于archivelog模式中且归档过程正在运行
sql> select log_mode from v$database;
sql> select archiver from v$instance;

(二)归档相关命令

archive log stop;
archive log start;
archive log list;

show parameters;
show parameters log_archive_start;
show parameters log_archive_max_process; #
归档进程数
alter system set log_archive_max_process=3; #
将归档进程数改为3
select * from v$bgprocess;    #
检查后台进程

原创粉丝点击