上周5快下班想要开始开心的周末生活的时候,例行检查了一个最近刚刚切换了设备的库,在查看告警日志的过程中,突然远程被中断,过了好一会才又重新连接过去继续查看,告警日志新增加了实例和数据库的打开信息日志,继续往上翻到中断连接之前的位置,但是就是没看到关闭日志,于是怀疑OS被重启过,甚至怀疑是直接power off,但是想想不对,毕竟是生产环节呀,于是一边让开发人员联系客户,一边继续查看了OS日志,发现对应时间的事件,有事件号6005,说明系统刚刚启动,但是没有发现事件号为6006的关闭记录,初步怀疑是power off了,否则db日志不可能没有记录关闭信息,另外从开发那边得到的答复是修改IP和调整其他所以重启了机器,但是没有得到释放power off明确答复,唉,客户自己要玩脱也没办法。
鉴于此于是在群里初步的讨论了下这个问题,以及其他非正常关闭系统或者DB服务的情况,大家似乎还真没怎么关注到这个情况,于是就有了这次测试,主要是为了测试不同情况下的OS和DB服务中断的DB告警日志表现。
初步想到的测试案例如下:
0. OS正常关机
1. OS正常重启
2. OS Power off暴力关机
3. DB重启服务
4. end process中断DB进程
测试之前猜想测试结果
0. 正常记录DB正常关闭
1. 正常记录DB正常关闭
0. 不会有任何记录DB关闭信息
0. 正常记录DB正常关闭及其重启
0. 不会有任何记录DB关闭信息
李宗盛唱到:猜想只是猜想。。。所以,还是动手实验吧。
在虚拟机进行测试,也可以很好的模拟os power off功能,应该和实体环境不会有区别,应该不会影响本次测试结果;
另外本想外挂一个web服务到db,但是鉴于其他一些因素没有做,只是简单的在另一台客户端sqlplus登陆到数据库做个不间断循环增删改操作动作。
由于主要是为了关注告警日志的表现,因此在每次测试开始之前都清空日志文件内容,便于记录和查看。
测试环境:
服务器:vbox4.1.8+windows2003+oracle 10gr1
客户端:instant client 10.2.0.5
测试脚本:
D:\>sqlplus system/test@test
SQL*Plus: Release 10.2.0.5.0 - Production on Mon Jan 9 11:42:25 2012
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
SQL> desc gtlions;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(22)
每次测试之前执行如下匿名块脚本:
Declare
a number:=1;
Begin
Loop
Insert Into gtlions(Id) Values(a);
If Mod(a,100)=0 Then
Update gtlions Set Id=0;
Commit;
End If;
If Mod(a,1000)=0 Then
Execute Immediate 'truncate table gtlions';
End If;
a:=a+1;
End Loop;
End;
/
测试开始鸟。
0. OS正常关机
测试结果:没有任何记录DB关闭信息。
1. OS正常重启
测试结果同上:没有任何记录DB关闭信息。
2. OS Power off暴力关机
测试结果:没有任何记录DB关闭信息。
3. DB重启服务
测试结果:正常记录db正常关闭.
4. end process中断DB进程
测试结果:没有任何记录DB关闭信息。
对比测试结果0和1,确实出乎了我的意料。
-The End-