Welcome 微信登录

首页 / 数据库 / MySQL / Oracle数据库归档日志满后造成系统宕机解决一例

第一次宕机时,初始以为是系统内存溢出,于是重启应用服务器,发现应用服务器在启动时报错,错误为无法连接到Oracle数据库。于是连接数据库服务器,打开EM后发现系统报错如图:提示归档日志写入失败,检查服务器发现磁盘空间满了,于是清理磁盘空间后,重启数据库问题解决。随后把服务器磁盘空间扩容,直接给了oracle数据所在盘1TB的磁盘空间。第二次又出现此问题,经过仔细检查,并与同事确认后,发现是由于ORACLE数据库的归档日志被启用了,而我们系统默认是没有启用ORACLE数据库归档日志这个功能的。使用sql命令查看:Sql>sqlplus / as nolog;---------------------启动sql*PlusSql> connect sys/password@orcl as sysdba;Sql> archive log list;数据库日志模式 存档模式自动存档 启用存档终点 USE_DB_RECOVERY_FILE_DEST最早的联机日志序列 4888下一个存档日志序列 4890当前日志序列 4890Sql> show parameter db_recovery_file_dest;NAME TYPE VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string D:oracleproduct10.2.0/flash_recovery_areadb_recovery_file_dest_size big integer 20G发现默认的归档路径为D:oracleproduct10.2.0/flash_recovery_area。而且限制使用空间为20G。由于每天产生的oracle归档日志差不多就占用2个G的磁盘空间,而且oracle自身并不会自动清理也没有相关设置自动清理归档日志的功能,一段时间不进行清理,20G空间很快就满了。与客户商议,准备关闭归档日志功能,客户了解情况后,觉得归档日志功能还是需要开启,(归档日志是oracle灾难恢复的必要数据),于是准备把归档日志使用空间扩大,设成200g。处理方法:一、首先要处理日志空间满的情况:1、删除归档日志物理文件,归档日志一般都是位于D:oracleproduct10.2.0flash_recovery_areaORCLARCHIVELOG目录下,以日期文件夹存放,删除时至少保留最近几天的日志用于数据库恢复。2、归档日志的物理文件删除后,ORACLE可以正常登录了,但是还没完全把归档日志删除干净,ORACLE的controlfile中仍然记录着这些archivelog的信息,在oracle的OEM管理器中有可视化的日志展现出,当我们手工清除archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,利用RMAN进行删除操作;进入cmd,1.指定数据库实例C:/Documents and Settings/Administrator>SET ORACLE_SID =orcl2.连接数据库C:/Documents and Settings/Administrator>RMAN TARGET SYS/password@orcl3.查看归档日志的状态RMAN> list archivelog all;4.手工删除归档日志文件RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE "SYSDATE-7";(删除7天以前的日志记录)5.退出rmanRMAN> exit二、扩大归档日志使用空间,设成200g,使用sql命令:SQL> alter system set db_recovery_file_dest_size=214748364800;---设置使用空间大小(20*1024*1024*1024)System alteredSQL> show parameter db_recovery_file_dest;---查看归档日志路径限额NAME TYPE VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string D:oracleproduct10.2.0/flash_recovery_areadb_recovery_file_dest_size big integer 200G然后重启数据库后,系统可以正常使用了。但是,由于启用了归档日志,即便设置成了200G的使用空间,按照每天2G的数据增长量,也就3个月数据就能达到了,需要定制任务定时清理归档日志,而删除归档日志只有在RMAN里才能进行,于是在数据库服务器上新建一个bat文件(文件名随意)编辑此文件为:rman target "sys/password" cmdfile "d:cmd.txt"―――此处路径、文件名随意在命令中对应的路径下新建cmd.txt文件,打开编辑此文件,DELETE ARCHIVELOG ALL COMPLETED BEFORE "SYSDATE-7";然后在Windows计划任务里添加任务,指定每天定时执行此bat文件。经过一周的运行,归档日志每天定时被清理。系统正常。在CentOS 6.4下安装Oracle 11gR2(x64) http://www.linuxidc.com/Linux/2014-02/97374.htmOracle 11gR2 在VMWare虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579p2.htmDebian 下 安装 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址