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

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

  • 相关阅读:
    PDO如何选择其他数据库的驱动
    PHP里关于时间日期大小写(Y,y,M,m...)
    数据库的基本操作
    数据库--PHP环境搭建
    曾经的中国互联网:多少巨头销声匿迹
    SQL 查找 45道练习题
    关于padding
    Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'(using password: YSE)
    centos 格式化硬盘并挂载,添加重启后生效
    windows2003服务器不显示桌面怎么办
  • 原文地址:https://www.cnblogs.com/gotoschool/p/12890026.html
Copyright © 2020-2023  润新知