Oracle 10g默认归档路径在闪回区的2G空间大小限制问题

数据库 Oracle
本文我们主要介绍了由于Oracle 10g默认归档路径在闪回区的2G空间大小限制而导致的问题的分析及其解决方案,希望能够对您有所帮助。

Oracle 10g默认归档路径在闪回区的2G空间大小限制问题是本文我们主要要介绍的内容,接下来我们就通过一个实际的例子来开始介绍。实例使这样的,在为客户解决问题时,打开数据解压缩后一看,他们还是用的Oracle 815版本的(他们exp导出时,带了导出日志,从导出日志中看出来是oracle 815版本的),不过没有关系,低版本的exp是可以用高版本的imp导入到高版本数据库中的。

一看是导入还很正常,导入到其中某个表的时候,突然就不动了。一开始我还没有弄明白怎么回事。后来,无意中看到了计算机管理--事件查看器中,有很多报错信息:

  1. Archive process error: ORA-16038: log 1 sequence# 317 cannot be archived  
  2. ORA-19809: limit exceeded for recovery files  
  3. ORA-00312: online log 1 thread 1: 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORACLE/REDO01.LOG' 

 

我这才发现,问题出在了归档上了。

又看了alert_oracle.log文件,也有很多这个报错信息。到这里,这个问题给了我一个教训:与oracle有关的操作,只要有问题,肯定会向alert_oracle.log文件写入日志的,就看你有没有意识去看这个日志文件了。

网上查看资料得知:Oracle 10g在默认情况下,归档日志是保存在闪回恢复区的(对于我的来说是:E:/oracle/product/10.2.0/flash_recovery_area/ORACLE/ARCHIVELOG),如果你建库的时候用的默认设置,闪回恢复区应该是2G,空间被占满了以后就无法再归档了。

此时,我从sqlplus  open database,有提示:

  1. Microsoft Windows XP [版本 5.1.2600]  
  2. (C) 版权所有 1985-2001 Microsoft Corp.  
  3. C:/Documents and Settings/Administrator>sqlplus / as sysdba  
  4. SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 11月 26 17:58:22 2008  
  5. Copyright (c) 1982, 2005, Oracle.  All rights reserved.  
  6. 连接到:  
  7. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production  
  8. With the Partitioning, OLAP and Data Mining options  
  9. SQL> select open_mode from v$database;  
  10. OPEN_MODE  
  11. ----------  
  12. MOUNTED  
  13. SQL> alter database open;  
  14. alter database open  
  15. *  
  16. 第 1 行出现错误:  
  17. ORA-16014: 日志 1 的序列号 317 未归档, 没有可用的目的地  
  18. ORA-00312: 联机日志 1 线程 1:  
  19. 'E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORACLE/REDO01.LOG'  
  20. SQL> 

 

那怎么解决这个问题呢?网上的高手也给出了不少方法(以下的方法为转载,原文地址:http://yaanzy.itpub.net/post/1263/286285  ):

解决方法:

1.将归档设置到其他目录,修改alter system set log_archive_dest = 其他路径。

2.转移或者删除闪回恢复区里的归档日志。

3.增大闪回恢复区。

 

  1. ALTER SYSTEM SET db_recovery_file_dest_size=4g scope=both

 

我的处理方法是采用第3种方法,下边是我的操作过程:

 

  1. SQL> show parameter db_recovery_file_dest_size;  
  2. NAME                                 TYPE        VALUE  
  3. ------------------------------------ ----------- ------------------------------  
  4. db_recovery_file_dest_size           big integer 2G  
  5. SQL> alter system set db_recovery_file_dest_size=3G;  
  6. 系统已更改。  
  7. SQL> alter database open;  
  8. 数据库已更改。  
  9. SQL> show parameter db_recovery_file_dest_size;  
  10. NAME                                 TYPE        VALUE  
  11. ------------------------------------ ----------- ------------------------------  
  12. db_recovery_file_dest_size           big integer 3G  
  13. SQL> 

 

值得注意的是,我执行完毕alter system set db_recovery_file_dest_size=3G;后,马上又去show parameter db_recovery_file_dest_size;此时显示的是3g了,不是原来的2g了。从另外一个方面来说:E:/oracle/product/10.2.0/db_1/dbs/SPFILEORACLE.ORA这个文件的修改时间,就是我执行alter system set db_recovery_file_dest_size=3G; 这就更证明,此更改马上就生效了。

如果将归档路径下的可用空间扩充到了3G,也就是在原来2G的基础上又加了1G.  oracle database下新形成的归档日志,实际上是用的这个新增的1G的空间。也许会有人提出疑问,“那我把原来已经形成的2G归档日志删除掉,oracle database不就能用3G了么?”其实不是这样,虽然在物理空间上,已经删除了2G,但是动态性能视图(v$recovery_file_dest)并没有释放此这2g空间,可以使用select * from v$recovery_file_dest 查询出来。

若你不从动态性能视图里删除这2G的空间,oracle database会认为这2G依然被占用。若是有个大的事物提交,并有频繁的日志切换,1G的空间马上就被用完,到时候你的alert_oracle.log就有错误出现,比如:

  1. ORA-19815: WARNING: db_recovery_file_dest_size of 3221225472 bytes is 100.00% used, and has 0 remaining bytes available.  
  2. *** 2008-11-28 10:05:13.375  
  3. ************************************************************************  
  4. You have following choices to free up space from flash recovery area:  
  5. 1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,  
  6.    then consider changing RMAN ARCHIVELOG DELETION POLICY.  
  7. 2. Back up files to tertiary device such as tape using RMAN  
  8.    BACKUP RECOVERY AREA command.  
  9. 3. Add disk space and increase db_recovery_file_dest_size parameter to  
  10.    reflect the new space.  
  11. 4. Delete unnecessary files using RMAN DELETE command. If an operating  
  12.    system command was used to delete files, then use RMAN CROSSCHECK and  
  13.    DELETE EXPIRED commands.  
  14. ************************************************************************  
  15. ORA-19809: limit exceeded for recovery files  
  16. ORA-19804: cannot reclaim 47715840 bytes disk space from 3221225472 limit  
  17. *** 2008-11-28 10:05:13.406 60680 kcrr.c  
  18. ARC0: Error 19809 Creating archive log file to 'E:/ORACLE/PRODUCT/10.2.0/FLASH_RECOVERY_AREA/ORACLE/ARCHIVELOG/2008_11_28/O1_MF_1_344_%U_.ARC' 

 

解决以上问题,就需要删除掉动态性能视图中的已占用空间的信息。按照eygle大师在http://www.eygle.com/archives/2005/03/oracle10gecieif.html 一文中的方法,是用rman来删除这些信息。所用到的rman命令如下:

1.是RMAN>  crosscheck archivelog all;--此命令的含义是检查所有归档日志的状态,并把遗失的标记为expired,也就是说,expired 表示已经被操作系统中被删除的归档日志。

2.是delete expired archivelog all; --此命令的含义是删除expired的归档日志。

关于Oracle 10g默认归档路径在闪回区的2G空间大小限制问题的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. Oracle数据库学习笔记之表的联合查询
  2. Oracle数据库RMAN不完全恢复之基于SCN恢复
  3. Oracle数据库RMAN不完全恢复之基于时间恢复
  4. Oracle C#实现Oracle Text全文检索的简单例子
  5. Oracle数据库RMAN不完全恢复之基于日志序列号恢复
责任编辑:赵鹏 来源: CSDN博客转载
相关推荐

2010-04-14 16:09:51

Oracle 10g归

2010-04-07 17:27:38

Oracle 11g

2011-08-09 13:14:37

Oracle 10g数据库闪回

2011-08-29 13:40:12

Oracle 10g创建表空间

2009-09-07 09:03:47

VMWare安装Ora

2010-04-15 12:43:06

Oracle数据库

2011-08-23 14:23:25

Oracle 10g内系统全局区

2010-03-30 19:31:25

Oracle 10g

2010-04-30 17:50:25

2010-04-14 14:40:32

Oracle 10g

2009-07-10 11:21:08

MyEclipse 6连接Oracle

2011-05-13 11:21:51

linuxoracle 10g安装

2010-05-05 15:58:34

Oracle 10g

2011-03-25 16:10:58

oraclenagios

2011-08-24 14:21:44

Oracle 10gUNDO表空间

2011-08-30 15:28:33

Oracle 10g表

2020-02-14 17:32:01

马化腾腾讯QQ文件储存

2010-04-29 17:13:51

Oracle 10g

2011-03-29 09:56:48

Oracle数据库10SQL

2009-04-27 13:26:41

Oracle 10gRAC链接错误
点赞
收藏

51CTO技术栈公众号