现象:SQL*Plus无法连接,显示以下错误: ORA-01033 : ORACLE initialization or shutdown in progress
分析:应该是Oracle在启动后,用户登录时是要将方案中原有配置信息装载进入,装载过程中遇到原有文件指定的位置上没有找到,所以就报出错误。
解决过程:
以DBA用户登录,具体命令是
sqlplus /NOLOG
>connect sysdba/sysdba as sysdba
提示:已成功
>shutdown normal
(等了半天没有停掉)
于是执行
>shutdown immediate
提示:数据库已经关闭已经卸载数据库 ORACLE 例程已经关闭
>startup mount
提示:ORACLE例程已经启动
Total System Global Area 118255568 bytes Fixed Size
282576 bytes Variable Size
82886080 bytes Database Buffers
33554432 bytes Redo Buffers
532480 bytes
数据库装载完毕
>alter database
错误描述:
ORA-16038: log 2 sequence# 344 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1: 'E:\ORACLE\ORADB\BKCYUNWH\REDO02.LOG'
>sqlplus / as sysdba
SQL> select open_mode from v$database;
OPEN_MODE
----------
MOUNTEDSQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-16014: 日志 1 的序列号 317 未归档, 没有可用的目的地
ORA-00312: 联机日志 1 线程 1:
'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORACLE\REDO01.LOG'
解决方法:
1.将归档设置到其他目录,修改alter system set log_archive_dest = 其他路径
2.转移或者删除闪回恢复区里的归档日志。
3.增大闪回恢复区。
ALTER SYSTEM SET db_recovery_file_dest_size=4g scope=both;
这里解析一下第三种情况
我的处理方法是采用第3种方法,下边是我的操作过程:
SQL> show parameter db_recovery_file_dest_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 2G
SQL> alter system set db_recovery_file_dest_size=3G;
系统已更改。
SQL> alter database open;
数据库已更改。
SQL> show parameter db_recovery_file_dest_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 3G
SQL>
以上操作之后,说明档路径下的可用空间扩充变为3G了。
也许会有人提出疑问,“那我把原来已经形成的2G归档日志删除掉,oracle database不就能用3G了么?”其实不是这样,虽然在物理空间上,已经删除了2G,但是动态性能视图(v$recovery_file_dest) 并没有释放此这2g空间,可以使用select * from v$recovery_file_dest 查询出来。若你不从动态性能视图里删除这2G的空间,oracle database会认为这2G依然被占用。若是有个大的事物提交,并有频繁的日志切换,1G的空间马上就被用完,到时候你的 alert_oracle.log就有错误出现,比如,
ORA-19815: WARNING: db_recovery_file_dest_size of 3221225472 bytes is 100.00% used, and has 0 remaining bytes available.
也就是说,归档日志空间不够用了,不能采用直接删除物理上真实的文件来解决,还是需要把动态性能视图里的数据更改一下。
采用RMAN 来修改归档日志。
>RMAN TARGET SYS/sysadmin@orcl
--查看归档日志的状态
RMAN> list archivelog all;
--手工删除归档日志文件
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
或者
1.是RMAN> crosscheck archivelog all;--此命令的含义是检查所有归档日志的状态,并把遗失的标记为expired,也就是说,expired 表示已经被操作系统中被删除的归档日志。
2.是delete expired archivelog all; --此命令的含义是删除expired的归档日志
作者:panie