今天一大早接到现场客户的一个电话,说是一台windows的服务器重启后,数据库就打不开了,好像是日志文件出问题了,接了电话后感觉很严重,如果是在线日志损坏了,又是current的日志,处理起来就很麻烦了,所以马上远程连接到客户的服务上去看情况.
连上去后发现客户已经试图打开过数据库,但是数据库只能打到mount状态,并在sqlplus的环境中提示如下信息:
SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 437329156 bytes
Fixed Size 453892 bytes
Variable Size 167772160 bytes
Database Buffers 268435456 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-16038: 日志 3 序列号 70804 无法归档
ORA-12154: TNS: 无法处理服务名
ORA-00312: 联机日志 3 线程 1: 'D:\ORACLE\ORADATA\YXZC\REDO03.LOG'
ORA-00312: 联机日志 3 线程 1: 'D:\ORACLE\ORADATA\YXZC\REDO032.LOG'
从提示上看好像是日志3无法归档造成的,貌似跟tns服务还有关系,最下面2行再次确认是日志3的问题.
但是仅凭这些信息还是无法判断到底是什么原因,是日志损坏了还是归档目录存在问题.这时我又看了看alert日志,看到如下信息:
Creating archive destination LOG_ARCHIVE_DEST_1: 'D:\ARCHIVE_LOG\ARC70804.001'
ARCH: Error 19504 Creating archive log file to 'D:\ARCHIVE_LOG\ARC70804.001'
Fri Jul 26 07:54:16 2013
Errors in file d:\oracle\admin\yxzc\udump\yxzc_ora_2988.trc:
ORA-19504: 无法创建文件"D:\ARCHIVE_LOG\ARC70804.001"
ORA-19504: 无法创建文件"D:\ARCHIVE_LOG\ARC70804.001"
ORA-27044: 无法写入文件的标题块
OSD-04008: WriteFile() 失败, 无法写入文件
O/S-Error: (OS 112) 磁盘空间不足。
Windows的记录默认就是中文,这个看着倒是一目了然,就是磁盘空间不足导致的归档过程无法生成,再去”我的电脑”里确认一下,果然archivelog的D盘只有83MB可用了(该库的一个redolog是100MB),但是问题决不是客户说的日志损坏了.
果断把D盘中旧备份移到了其实盘上(其实是我上次给客户做迁移时生成的,后来忘了删了: P),在这里我没直接删,因为我还没有确认是否还有更新的备份,如果库出现其它问题,又没有做过新的备份,这个旧备份没准还能救我一命,客户的命顺手也救一下.
非常顺利的是,空间腾出来之后,数据库就顺利的打开了,其实这是一个非常简单的小小case,但是我觉得在初学oracle或刚做dba的新手们来说有几个非常重要提示:
1. 做为一个数据库管理员,一定要养成在问题来临后,去仔细的看alter日志中的内容,不要光凭借sqlplus环境中的一些报错信息就武断的认为问题出在了哪里,这里的信息远不如alter日志详细和定位准确.
2. 在业务数据库无法正常打开的情况下,要尽快先将问题点处理,并在第一时间打开数据库,不要让业务停的时间太久,如果这个过程中涉及类似要删除之前的备份或归档等对象时,你可能没有太多时间去详细确认,那么最好是先move而不是delete
3. 不要太相信客户的话,往往客户的技术水平有限,他们所描述的问题和发现的情况只能做为你的参考,千万别被别人对问题描述和猜测左右了你的对问题的定位.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7986761/viewspace-767138/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7986761/viewspace-767138/