试验环境: 环境:LINUX,ORACLE。


在项目运行中,发现使用一段时间后项目停止运行,通过oracle错误编号(由于输出设备已满或不可用, 归档程序无法归档重做日志)发现原因是oracle归档日志满了造成的,然后因为自己的一边百度一边解决使用了错误的方法,弄了好久才解决。

解决方案如下://删除归档日志


方法一:增大归档日志空间的大小可以通过下面的方法来调整系统的回闪恢复区大小:
              首先是关闭数据库:以SYS身份链接到oracle:执行>shutdown immediate; 
              启动数据库到mount状态>startup mount 
              查看回闪恢复区的大小和存放目标>show parameter db_recovery_file_dest 
              修改回闪恢复区的大小>alter system set db_recovery_file_dest_size = 4G(缺省是2G,可以根据实际情况调整大小) 
              最后打开数据库:>alter database open; OK , 问题解决。数据库恢复使用。


方法二 :进入oracle清空日志信息,用rman进入把归档日志删除:
               命令>rman target/ 
               命令>crosscheck archivelog all; (列出归档日志信息)
               命令>delete expired archivelog all; (将上述列出的归档日志删除)
              命令>exit;此时最好将数据库重新备份一下把数据库的mount状态更改为open状态>alter database open; 

注意误区: 在系统清空归档目录的日志信息(即物理删除归档日志,或将归档日志转移至别处)不可取,硬盘上虽然删除了,但oracle系统识别不出来已经清空日志,只能进入oracle清空日志信息,把空间释放出来,(方法二);或者是把归档空间设置更大(方法一)。 建议将两种方法结合使用,减少工作量,也避免数据库频繁挂起。同时定时进行数据库完全备份或其他重要数据备份

当解决的数据库连接问题,需要永久处理该问题则需要写定时任务进行删除归档日志
删除归档日志脚本
    crontab -e          (打开定时文件,编辑当前用户定时任务)
    30 23 * * * find /u01/app/oracle/flash_recovery_area/ORCL/archivelog/* -ctime +6 -exec rm -rf {} \;      (删除物理文件)
    30 23 * * * /home/oracle/rmanbk/del_arch.sh               (执行删除逻辑文件的脚本)
    新建del_arch.sh脚本文件,写入下面的脚本
    #!/bin/bash                           (/var/log如果报错bash^M,vim filename :set ff? #可以看到dos或unix的字样. 如果的确是dos格式的。:set ff=unix #把它强制为unix格式的, 然后存盘退出。)
    source /home/oracle/.bash_profile
    /u01/app/oracle/product/11.2.0/db_1/bin/rman target/ << EOF
    crosscheck archivelog all;
    delete noprompt expired archivelog all;
     EOF