以前就遇到过archivelog满了,导致无法登陆数据库。今天自己在测试append直接插入和insert插入时不巧自己刚好又遇见了,ora-16038 ora-19809 ora-00312。Oracle数据库中有个闪回恢复区flash_recovery_area默认的是2G的大小,由于本机数据库是archivelog和flashback on同时开启了,产生的归档日志和闪回日志超过了2G容量的大小,也就导致无法归档,造成arch进程失败数据库而怠机了。
首先flash_recovery_area满了导致sys用户也无法登陆数据库,此时肯定需要做的是先登陆数据库吧。于是手动在os上删除部分archivelog来腾出空间,但是此时数据库还是无法登陆。
由于是windows测试机自己os上
net stop oracleserviceorcl
停止了数据库服务历程。
Net start oracleserviceorcl
开启数据库服务历程
不过此服务只存在与windows下,linux下是不存在此服务的。
I:
Sqlplus / as sysdba
Startup;
此时查看alert日志:
Errors in file d:oracleproduct10.2.0adminorclbdumporcl_arc1_916.trc:
ORA-16038: log 1 sequence# 56 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 1 thread 1: 'D:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG'
出现了上述三个ora错误,还是已经满了redo log无法完成归档。虽然我们在os上删除了archivelog腾出了空间,但是还需要在oracle上也就是控制文件中的记录再次清除os上删除的archivelog
Rman target /
Crosscheck archivelog all
Delete expired archivelog all
利用crosscheck把os上删除archivelog在rman目录中标记为expired过期,然后delete expired archivelog all。
此时再连接数据库
Sqlplus / as sysdba
Shutdown immediate
Startup;
此时数据库也正常工作了!所以有时候还是要多关心一下flash_recovery_area的参数的设置。
II:
当然一样需要用sys用户进入数据库启动数据库,同样到open状态出错
Startup
ORA-16038: 日志 3 序列号 46 无法归档
ORA-19809: 超出了恢复文件数的限制
ORA-00312: 联机日志 1 线程 1: 'D:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG'
(此时记得以前的blog中提到了丢失log的解决方法
Alter database clear unarchived logfile 'D:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG';
重新清除redo log新建,但是如果是当前的redo且还没有归档是不行的。如果丢失的非当前redo完全可以这样来解决。Alter database clear unarchived logfile重建redo)
那就直接增大flash_recovery_area容量吧
Alter system set db_recovery_file_dest_size=10g scope=both
然后查看一下
Select * from v$flash_recovery_area_usage
其中的archivelog的used已经降下来了!
Alter database open
即可打开
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25362835/viewspace-1055605/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25362835/viewspace-1055605/