造成这个问题的原因有很多,我这里是因为归档日志满了,这个可以通过日子文件看出来,下面是日志中的一部分,日志比较明白:

************************************************************************
Errors in file f:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_3588.trc:
ORA-19809: 超出了恢复文件数的限制
ORA-19804: 无法回收 42303488 字节磁盘空间 (从 21474836480 限制中)
ARCH: Error 19809 Creating archive log file to 'F:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2015_01_12\O1_MF_1_60000_%U_.ARC'
Errors in file f:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_3588.trc:
ORA-16038: 日志 3 sequence# 60000 无法归档
ORA-19809: 超出了恢复文件数的限制
ORA-00312: 联机日志 3 线程 1: 'F:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG'
USER (ospid: 3588): terminating the instance due to error 16038
Instance terminated by USER, pid = 3588

 

道理我说不上来,我就把我的执行语句写出来,做个记录:

这个时候的oracle已经无法登陆,怎么处理呢?

1.先打开命令控制台

2.输入sqlplus /nolog

3.输入connect / as sysdba

4.输入startup force,这里如果不能报错,先用shutdown imediate,再用startup mount,这个时候会显示:ORACLE例程已经启动。

5.输入archive log list;

6.输入select * from v$recovery_file_dest;

SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area 6847938560 bytes
Fixed Size                  2188768 bytes
Variable Size            3154119200 bytes
Database Buffers         3674210304 bytes
Redo Buffers               17420288 bytes
数据库装载完毕。
SQL> archive log list;
数据库日志模式            存档模式
自动存档             启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     60000
下一个存档日志序列   60000
当前日志序列           60002
SQL> select * from v$recovery_file_dest;

NAME
-----------------------------------------------------------------
SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
----------- ---------- ----------------- ---------------
F:\app\Administrator\flash_recovery_area
 2.1475E+10 2.1469E+10                 0             541

 这样就能看到,我的归档日志已经没有可用空间了,20G空间已经用完。

 

如何删除归档日志(参考:http://www.cnblogs.com/rootq/archive/2009/09/21/1571476.html):

1.打开cmd,输入rman target /@orcl

2.输入DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-3';

说明
SYSDATA-3,表明当前的系统时间3天前,before关键字表示在7天前的归档日志,

也可以删除过期的归档日志,如下

crosscheck archivelog all;
delete expired archivelog all;

3.回车后会提示你是否要删除,输入yes就可以了

4.最后重启oracle服务就可以用了