1、问题过程经历:
客户反应 数据库服务器断电后,导致无法正常连接,刚开始没有考虑到是oracle数据库归档日志满了造成了该原因。
(1)、通过 Net Manager去测试,发现是ora-12514的问题,认为可能是监听服务异常导致的,但是发现oracleservice服务和listener监听服务都能够正常启动,于是沿着这个问题不断挖掘,修改NETWORK文件夹下的listener.ora和tnsnames.ora两个文件,追加了orcl的sid_desc
(2)、ora-12514问题解决后,幕后真凶显露了出来,“ORA-01034”和“ORA-27101”,如下图:
然后就就通过命令提示符去登陆Oracle,去查看怎么回事,然后问题进一步出现,错误“ORA-03113:通信通道的文件结尾进程 ID:6320 回话 ID :191序列号:3”。
(3)问题根源:Oracle出现错误,于是去错误日志里去找问题根源:F:appAdministratordiag dbmsorclorcl race文件夹下找到orcl_arc0_9552.trc文件,打开显示错误日志:
从这里我们发现了问题的根源:“ORA-19815: 警告: db_recovery_file_dest_size 字节 (共 4102029312 字节) 已使用100.00%, 尚有 0 字节可用。”是db_recovery_file_dest_size也叫归档日志空间不足导致的,既然找到问题的根源,那解决起来也就容易了。
解决途径
空间小,那摆在我们面前办法就是,一个是将空间设置大点,另一个就是将多余的文件删除掉即可,那么我们就将这两个办法都使用一下。
(1)、通过命令窗口:--------设置归档日志空间的大小
使用sql命令查看:
Sql>sqlplus / as nolog;---------------------启动sql*Plus
Sql> connect sys/password@orcl as sysdba;
Sql> archive log list;
SQL> alter system set db_recovery_file_dest_size=10G scope=both; ---增大闪回恢复区。
SQL> alter database open; 重新打开数据库
SQL> show parameter db_recovery_file_dest_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size big integer 3G
SQL>
/*-------------------------完毕------------------------*/
(2)、通过命令窗口:---通过rman工具窗口删除归档日志
1.指定数据库实例
C:/Documents and Settings/Administrator>SET ORACLE_SID =orcl
2.连接数据库
C:/Documents and Settings/Administrator>RMAN TARGET SYS/password@orcl
3.查看归档日志的状态
RMAN> list archivelog all; -- 运行这个命令可以把无效的expired的archivelog标出来。
RMAN>delete expired archivelog all; -- 直接全部删除过期的归档日志。
RMAN>delete noprompt archivelog until time "sysdate -3"; -- 也可以直接用一个指定的日期来删除。
重新打开数据库:
SQL> alter database open;
Database altered.
(3)优化设置:
指定retention的策略,使得archivelog不至于这样增加
1)、RMAN>configure retention policy to recovery window of 7 days;- -即删除7天前的归档日志
2)、SQL>alter system set db_recovery_file_dest_size=10G scope=both; ---增大闪回恢复区。
3)、把archivelog_dest指定到没有限制的地方
SQL>alter system log_archive_dest='/home/oracle';
SQL> alter database open;
然后重启数据库后,系统可以正常使用了。
归档日志其实是为了方便我们在恢复数据库时使用的,但是有时候这些归档日志有时确实会给我们带来一点点的小麻烦,所以这些归档日志还是需要我们去注意的。
4)、但是,由于启用了归档日志,即便设置成了200G的使用空间,按照每天2G的数据增长量,也就3个月数据就能达到了,需要定制任务定时清理归档日志,而删除归档日志只有在RMAN里才能进行,于是在数据库服务器上新建一个bat文件(文件名随意)
编辑此文件为:
rman target 'sys/password' cmdfile 'd:cmd.txt'―――此处路径、文件名随意
在命令中对应的路径下新建cmd.txt文件,打开编辑此文件,
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
然后在Windows计划任务里添加任务,指定每天定时执行此bat文件。
经过一周的运行,归档日志每天定时被清理。系统正常。