oracle实例诡异down的真实原因
2016-09-16 02:11
471 查看
oracle实例诡异down的真实原因
1、监控同事说oracle测试库又自动down了。
我登录检查一看,没有oracle的后台进程在跑,oracle实例确实被关闭,马上去启动吧。# 启动失败 SQL> startup; ORACLE instance started. Total System Global Area 1603411968 bytes Fixed Size 2213776 bytes Variable Size 989857904 bytes Database Buffers 603979776 bytes Redo Buffers 7360512 bytes Database mounted. ORA-03113: end-of-file on communication channel Process ID: 13735 Session ID: 191 Serial number: 3 SQL> |
2、分析down的原因
去看后台alert日志:Errors in file /oracle/app/oracle/diag/rdbms/powerdes/powerdes/trace/powerdes_ora_8179.trc: ORA-19815: WARNING: db_recovery_file_dest_size of 5218762752 bytes is 100.00% used, and has 0 remaining bytes available. ************************************************************************ You have following choices to free up space from recovery area: 1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard, then consider changing RMAN ARCHIVELOG DELETION POLICY. 2. Back up files to tertiary device such as tape using RMAN BACKUP RECOVERY AREA command. 3. Add disk space and increase db_recovery_file_dest_size parameter to reflect the new space. 4. Delete unnecessary files using RMAN DELETE command. If an operating system command was used to delete files, then use RMAN CROSSCHECK and DELETE EXPIRED commands. ************************************************************************ Errors in file /oracle/app/oracle/diag/rdbms/powerdes/powerdes/trace/powerdes_ora_8179.trc: ORA-19809: limit exceeded for recovery files ORA-19804: cannot reclaim 50173952 bytes disk space from 5218762752 limit ARCH: Error 19809 Creating archive log file to '/oracle/app/oracle/flash_recovery_area/POWERDES/archivelog/2016_09_09/o1_mf_1_1589_%u_.arc' Errors in file /oracle/app/oracle/diag/rdbms/powerdes/powerdes/trace/powerdes_ora_8179.trc: ORA-16038: log 2 sequence# 1589 cannot be archived ORA-19809: limit exceeded for recovery files ORA-00312: online log 2 thread 1: '/data/oracle/powerdes/redo02.log' USER (ospid: 8179): terminating the instance due to error 16038 Instance terminated by USER, pid = 8179 |
原因分析找到了,是ORA-19815: WARNING:db_recovery_file_dest_size of 5218762752 bytes is 100.00% used归档日志闪回区满了,所以oracle自动down了。而且也提示了4种解决方案:
(1) 设置归档日志过期策略
(2) 执行BACKUP RECOVERY AREA命令
(3) 增加db_recovery_file_dest_size大小
(4) RMAN删除过期的归档日志
这里准备采用速度最快的第(4)种解决方案:RMAN删除归档日志
3、RMAN删除归档日志解决
(1)先以mount方式启动数据库,保证能rman登录。# 先以mount启动 SQL> startup mount; ORACLE instance started. Total System Global Area 1603411968 bytes Fixed Size 2213776 bytes Variable Size 989857904 bytes Database Buffers 603979776 bytes Redo Buffers 7360512 bytes Database mounted. SQL> SQL> |
# 然后rman登录清理归档日志 [oracle@hch_test_121_90 ~]$ [oracle@hch_test_121_90 ~]$ rlwrap rman target / Recovery Manager: Release 11.2.0.1.0 - Production on Wed Sep 14 13:39:15 2016 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. connected to target database: POWERDES (DBID=3458668465, not open) RMAN> delete archivelog all completed before 'sysdate-1'; using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=129 device type=DISK List of Archived Log Copies for database with db_unique_name POWERDES ===================================================================== Key Thrd Seq S Low Time ------- ---- ------- - --------- 43 1 1469 A 21-MAR-16 Name: /oracle/app/oracle/flash_recovery_area/POWERDES/archivelog/2016_03_21/o1_mf_1_1469_ch00ykdh_.arc 44 1 1470 A 21-MAR-16 Name: /oracle/app/oracle/flash_recovery_area/POWERDES/archivelog/2016_03_22/o1_mf_1_1470_ch07y0vk_.arc …… |
# 最后打开数据库 SQL> SQL> SQL> alter database open; Database altered. SQL> |
4、长久解决之道
别的处理办法添加db_recovery_file_dest_size值,修改完后,添加到启动参数里面,永久生效:SQL> show parameter db_recovery_file_dest_size; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest_size big integer 4977M SQL> # 扩大参数值 SQL> ALTER SYSTEM SET db_recovery_file_dest_size=8g scope=both; System altered. SQL> show parameter db_recovery_file_dest_size; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest_size big integer 8G SQL> # 报错修改到启动参数 SQL> create pfile from spfile; File created. SQL> # 查看使用情况 SQL> select name,space_limit,space_used,number_of_files from v$recovery_file_dest; NAME -------------------------------------------------------------------------------- SPACE_LIMIT SPACE_USED NUMBER_OF_FILES ----------- ---------- --------------- /oracle/app/oracle/flash_recovery_area 6442450944 2905126912 61 SQL> |
5、永久解决之道
第4步骤,增加db_recovery_file_dest_size值后,会延长这个闪回区的使用时间,但是总归有一天是会满的,为了永久性的解决问题,准备做个定时任务每天去清理一遍过期归档日志,这样就可以基本保证闪回区是有足够的存储空间的。 清理过期归档日志脚本archivelog_clear.sh:#!/bin/sh BACK_DIR=/oracle/backup/data export DATE=`date +%F` su - oracle -c " mkdir -p $BACK_DIR/$DATE rman log=$BACK_DIR/$DATE/rman_backup.log target / <<EOF crosscheck backup; crosscheck archivelog all; delete noprompt expired backup; delete noprompt expired archivelog all; delete noprompt obsolete; exit EOF " |
10 01 * * * /oracle/backup/scripts/archivelog_clear.sh >> /oracle/backup/data/_fullback.log 2>&1 |
相关文章推荐
- 安装Redhat Linux 7和Oracle 12c
- CentOS命令行下装oracle 12c的方法(命令行模式安装)
- Oracle 12c安装方法及一些使用问题
- ORACLE 12C PDB 维护基础知识介绍
- Oracle 监听器密码设置方法(LISTENER)
- 安装Oracle Linux碰见的几个问题
- Oracle基本语法&&函数&&子查询&&分页查询&&排序&&集合操作&&高级分组函数
- Oracle视图
- ORACLE基础知识_小学生版本
- Oracle主键自增(触发器实现)
- oracle的几种备份区别!
- oracle 12C RAC启动实例时报ORA-00206: error in writing (block 1, # blocks 1) of control file错误处理
- oracle 12C数据库PSU补丁安装方式的变化---新增datapatch
- 记一次oracle数据库迁移的问题处理两例
- oracle常用的数据字典
- oracle 查询年龄最大的前三的员工
- Oracle中的单行函数
- oracle 查询在2010/1/1入职的所有男员工并按年龄排序
- oracle中字符串类型详解
- Oracle 创建表空间