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

实验环境:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

实验背景:向tough.t中插入40万条记录,然后rollback,接着执行了shutdown abort命令。当重新启动数据库的时候遇到以下问题。

SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-16038: 日志 1 序列号 14 无法归档
ORA-19809: 超出了恢复文件数的限制
ORA-00312: 联机日志 1 线程 1:
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA11G\REDO01.LOG'

解决步骤:

从提示信息大概可以看出问题出在归档上,我们首先看一下trace文件。
C:\oracle\product\10.2.0\admin\ora11g\udump\ora11g_ora_4480.trc是最新trace文件,下面是部份文件内容:

************************************************************************
************************************************************************
*** 2014-04-06 15:17:54.943
*** SERVICE NAME:() 2014-04-06 15:17:54.943
*** SESSION ID:(155.481) 2014-04-06 15:17:54.943
ORA-19815: 警告: db_recovery_file_dest_size 字节 (共 1073741824 字节) 已使用 100.00%, 尚有 0 字节可用。
*** 2014-04-06 15:17:54.943
************************************************************************
You have following choices to free up space from flash recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
   then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
   BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
   reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
   system command was used to delete files, then use RMAN CROSSCHECK and
   DELETE EXPIRED commands.
************************************************************************
ORA-19809: 超出了恢复文件数的限制
ORA-19804: 无法回收 47715840 字节磁盘空间 (从 1073741824 限制中)
*** 2014-04-06 15:17:54.959 60680 kcrr.c
ARCH: Error 19809 Creating archive log file to 'C:\ORA\FLASH_RECOVERY_AREA\ORA11G\ARCHIVELOG\2014_04_06\O1_MF_1_14_%U_.ARC'
*** 2014-04-06 15:17:54.959 58942 kcrr.c
kcrrfail: dest:10 err:19809 force:0 blast:1
*** 2014-04-06 15:22:06.428
ORA-19815: 警告: db_recovery_file_dest_size 字节 (共 1073741824 字节) 已使用 99.34%, 尚有 7127040 字节可用。
*** 2014-04-06 15:22:06.428
************************************************************************
************************************************************************

从trace文件我们很容易发现问题出在db_recovery_file_dest_size上(db_recovery_file_dest_size 字节 (共 1073741824 字节) 已使用 100.00%, 尚有 0 字节可用。),并且trace文件中提供了相关的解决思路。我们也可以查看v$recovery_file_dest发现这个问题。

SQL> select * from v$recovery_file_dest;

NAME                           SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------------ ----------- ---------- ----------------- ---------------
C:\ora\flash_recovery_area      1073741824 1071208960           7127040              40

SQL> show parameter db_recovery_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      C:\ora\flash_recovery_area
db_recovery_file_dest_size           big integer 1G

现目前db_recovery_file_dest_size是1G,我们把它设置大一点,设置成2G。

SQL> alter system set db_recovery_file_dest_size=2G;

系统已更改。

重试后发现一切OK!
SQL> alter database open;

数据库已更改。


上一篇:CentOS 远程连接不上问题的解决


下一篇:Android Studio 或 IntelliJ IDEA获取数字签名的方法