Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  397 随笔 :: 33 文章 :: 29 评论 :: 0 Trackbacks
10G ARCHIVELOG写满问题
 
    昨天在数据导入的时候遇到了一个问题,在用imp导入的时候,因为数据量过大,导致了所有的归档日志被写满,所有日志均无法归档,整个数据库hang住。
 
    关闭数据库之后打开时报错:

    SQL> startup mount
    ORACLE instance started.

    Total System Global Area  135338868 bytes
    Fixed Size                   453492 bytes
    Variable Size             109051904 bytes
    Database Buffers           25165824 bytes
    Redo Buffers                 667648 bytes
    Database mounted.

   

    SQL> alter database open

    alter database open
    *
   
1 行出现错误 :
    ORA-16014:
日志 1 的序列号 50 未归档 , 没有可用的目的地
    ORA-00312:
联机日志 1 线程 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\dodo\REDO01.LOG'

 
 
    查看具体的alert日志可以发现,是由于归档日志的大小超出了限定范围
    具体日志如下(本机的没拷过来,网上摘一段充个数):

    [Copy to clipboard] [ - ]CODE:
    *** SERVICE NAME:() 2006-03-25 17:30:42.109
    *** SESSION ID:(157.1) 2006-03-25 17:30:42.109
    kcrrwkx: work to do 0x1 (start)
    ORA-19815:
警告 : db_recovery_file_dest_size 字节 ( 2147483648 字节 ) 已使用 100.00%, 尚有 0 字节可用。

    *** 2006-03-25 17:30:44.843
    ************************************************************************
    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:
无法回收 51228672 字节磁盘空间 ( 2147483648 限制中 )
    *** 2006-03-25 17:30:44.984 60680 kcrr.c
    ARC0: Error 19809 Creating archive log file to 'D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\compiere\ARCHIVELOG\2006_03_25\O1_MF_1_94_%U_.ARC'
    *** 2006-03-25 17:30:44.984 58942 kcrr.c
    kcrrfail: dest:10 err:19809 force:0 blast:1
    *** 2006-03-25 17:30:45.578 20146 kcrr.c
    ORA-16038:
日志 1 序列号 94 无法归档

    ORA-19809:
超出了恢复文件数的限制
    ORA-00312:
联机日志 1 线程 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\compiere\REDO01.LOG'
    *** 2006-03-25 17:31:41.796
    *** 2006-03-25 17:31:41.796 20146 kcrr.c
    ORA-16014:
日志 3 的序列号 93 未归档 , 没有可用的目的地

    ORA-00312:
联机日志 3 线程 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\compiere\REDO03.LOG'

 
 
    查看flash recovery area的使用情况:

    SQL> select * from v$flash_recovery_area_usage;

   

    FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
    ------------ ------------------ ------------------------- ---------------
    CONTROLFILE                 .34                         0               1
    ONLINELOG                  7.32                         0               3
    ARCHIVELOG                65.01                         0              49
    BACKUPPIECE                   0                         0               0
    IMAGECOPY                     0                         0               0
    FLASHBACKLOG                  0                         0               0

   

    6 rows selected.

 
    计算flash recovery area已经占用的空间:

    SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;

   

    SUM(PERCENT_SPACE_USED)*3/100
    -----------------------------
                           2.1033

 
    查看大小参数

    SQL> show parameter db_recovery

   

    NAME                                 TYPE        VALUE
    -------------------------------- ----------- --------------------------------------------
    db_recovery_file_dest            string      D:\oracle\product\10.2.0\flash_recovery_area
    db_recovery_file_dest_size       big integer 2147483648

 
 
    可见是因为初始化设置的db_recovery_file_dest_size=2G不足,导致online redo log无法归档,因此可以有三种办法解决此问题:一是修改初始化参数db_recovery_file_dest_size,增加至大于归档文件总容量;二是指定其他的归档日志路径,使归档日志保存至别处;三是备份数据库,然后用RMAN删除归档文件(必须使用RMAN,直接手工删除是没有用的,具体见: http://www.eygle.com/archives/2005/03/oracle10gecieif.html )。
 
    注:此问题仅针对10g及以上版本,9i没有db_recovery_file_dest_size参数,可以直接指定路径,也可以直接手动删除来释放空间。
 
 
posted on 2009-03-12 23:45 decode360 阅读(372) 评论(0)  编辑  收藏 所属分类: 09.Recover

只有注册用户登录后才能发表评论。


网站导航: