Oracle数据库归档日志满后造成系统宕机解决过程

1、问题过程经历:

     客户反应 数据库服务器断电后,导致无法正常连接,刚开始没有考虑到是oracle数据库归档日志满了造成了该原因。

      (1)、通过 Net Manager去测试,发现是ora-12514的问题,认为可能是监听服务异常导致的,但是发现oracleservice服务和listener监听服务都能够正常启动,于是沿着这个问题不断挖掘,修改NETWORK文件夹下的listener.ora和tnsnames.ora两个文件,追加了orcl的sid_desc

listener.ora

 (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文件。

经过一周的运行,归档日志每天定时被清理。系统正常。

原文地址:https://www.cnblogs.com/gotoschool/p/12890026.html