昨天晚上,某个环境的数据库在做一个压力测试的时候突然宕机了。这个问题比较急。马上查看日志文件。
看到了如下的一段,报了操作系统级的linux错误。提示没有空间了。
2014年3月14日19:16:47星期五
归档日志条目192添加线程1序列192 ID 0 x1ed7a02c桌子1:
2014年3月14日19:39:24星期五
澳大利亚央行[0 xc0.2aa5fb增量检查点。0],当前日志在澳大利亚储备银行[0 xc1.5d29f尾巴。0]
2014年3月14日19:46:37星期五
完成检查点RBA [0 xc1.2.10], SCN: 252702724
2014年3月14日20:09:32星期五
澳大利亚央行[0 xc1.5d36a增量检查点。0],当前日志尾部在澳大利亚央行[0 xc1.b8498.0]
2014年3月14日20:13:15星期五
KCF:读、写或打开错误,块=0 xa6b82在线=1
,,,,文件”=1/TEST1/db05 oradata/PRDTEST1/TEMP_1。dbf的
,,,,错误=27061 txt:“Linux-x86_64错误:28:设备上没有剩余空间
附加信息:1
附加信息:8192年
错误的文件/test01/oracle/adm/PRDTEST1/诊断接头/rdbms/PRDTEST1/PRDTEST1/跟踪/PRDTEST1_dbw7_19235。委员会:
错误的文件/test01/oracle/adm/PRDTEST1/诊断接头/rdbms/PRDTEST1/PRDTEST1/跟踪/PRDTEST1_dbw7_19235。委员会:
附加信息:1
附加信息:8192
2014年3月14日20:13:16星期五
系统状态转储要求(例如=1,osid=19235 (DBW7)),总结=(实例异常终止)。
系统状态转储跟踪文件/test01/oracle/adm/PRDTEST1/诊断接头/rdbms/PRDTEST1/PRDTEST1/跟踪/PRDTEST1_diag_19213。委员会
终止发行流程实例。等待进程退出
2014年3月14日20:13:31星期五
实例终止未能杀死一个或多个流程
实例被DBW7终止,pid=19235
2014年3月14日22:55:44星期五
从ORACLE实例(正常)
马上开始查看文件系统的空间,确实是不够了。紧急调整了下文件,把库先起来,然后再协调系统的资源了。
问题虽然马上解决了。但是对于文件写入(报错异步io)的情况,数据库实例会同然掉。确实是一件很敏感的事情。
在metalink上查找有一个类似的错误,但是是基于NAS环境的,那个Unix环境做了一些系统变更导致了这个错误和这个问题还是有一些不同。
我在想对于如果数据文件写入失败,有没有一些措施来控制,保证不会把库给掉。发现在11.2.0.2版本之后,发现了一个隐含参数()
<强>查看隐含参数的脚本如下。强>
设置线宽132列名称格式故事本来列值格式a25
选择
x。ksppinm名字,
y。ksppstvl价值,
y。ksppstdf isdefault,,
解码(bitand (y.ksppstvf 7) 1,“修改”,4,“SYSTEM_MOD”,“假”)ismod,,
解码(bitand (y.ksppstvf, 2), 2,“真实”,“假”)isadj
从系统。x ksppi x美元,系统。x美元ksppcv y
在x。inst_id=userenv(实例),
和y。inst_id=userenv(实例),
和x。indx=y.indx
和x。ksppinm像“% _ %”,
order by翻译(x。ksppinm ' _ ', ' '),
/
默认这个参数_datafile_write_errors_crash_instance的值是真实的。
甲骨文给出的解释如下,还有一个相关的bug(文档ID 7691270.8)已经在11.2.0.2做了修复。
如果_datafile_write_errors_crash_instance=TRUE(默认),那么
,任何写入数据文件失败,因为一个IO错误causes
,一个实例崩溃只
,如果_datafile_write_errors_crash_instance=FALSE,那么行为
,恢复之前的行为(在此之前修复),这样
,写错误丢失离线文件(DB提供
,在archivelog模式和文件不是在系统表空间拷贝
,这种情况下,
实例流产) <强>简单的测试强>
大家可能想如果表空间不够了,数据文件空间不够了,数据库是不是也会掉下来。我简单在本地做了测试来看在并行插入的时候如果文件空间不够会不会把库掉。但是要模拟数据文件的错误,可能需要借助bb等工具来模拟了。
<强>步骤1。>强首先为了先把隐含参数设置为默认值真实
改变系统设置“_datafile_write_errors_crash_instance”=TRUE;
<强>步骤2。>强然后创建了一个假文件,保证文件系统中的空间只剩下很少的一部分。
dd if=/dev/0=/u02/ora11g/你好。txt b=1000米数=1
看到了如下的一段,报了操作系统级的linux错误。提示没有空间了。
2014年3月14日19:16:47星期五
归档日志条目192添加线程1序列192 ID 0 x1ed7a02c桌子1:
2014年3月14日19:39:24星期五
澳大利亚央行[0 xc0.2aa5fb增量检查点。0],当前日志在澳大利亚储备银行[0 xc1.5d29f尾巴。0]
2014年3月14日19:46:37星期五
完成检查点RBA [0 xc1.2.10], SCN: 252702724
2014年3月14日20:09:32星期五
澳大利亚央行[0 xc1.5d36a增量检查点。0],当前日志尾部在澳大利亚央行[0 xc1.b8498.0]
2014年3月14日20:13:15星期五
KCF:读、写或打开错误,块=0 xa6b82在线=1
,,,,文件”=1/TEST1/db05 oradata/PRDTEST1/TEMP_1。dbf的
,,,,错误=27061 txt:“Linux-x86_64错误:28:设备上没有剩余空间
附加信息:1
附加信息:8192年
错误的文件/test01/oracle/adm/PRDTEST1/诊断接头/rdbms/PRDTEST1/PRDTEST1/跟踪/PRDTEST1_dbw7_19235。委员会:
错误的文件/test01/oracle/adm/PRDTEST1/诊断接头/rdbms/PRDTEST1/PRDTEST1/跟踪/PRDTEST1_dbw7_19235。委员会:
附加信息:1
附加信息:8192
2014年3月14日20:13:16星期五
系统状态转储要求(例如=1,osid=19235 (DBW7)),总结=(实例异常终止)。
系统状态转储跟踪文件/test01/oracle/adm/PRDTEST1/诊断接头/rdbms/PRDTEST1/PRDTEST1/跟踪/PRDTEST1_diag_19213。委员会
终止发行流程实例。等待进程退出
2014年3月14日20:13:31星期五
实例终止未能杀死一个或多个流程
实例被DBW7终止,pid=19235
2014年3月14日22:55:44星期五
从ORACLE实例(正常)
马上开始查看文件系统的空间,确实是不够了。紧急调整了下文件,把库先起来,然后再协调系统的资源了。
问题虽然马上解决了。但是对于文件写入(报错异步io)的情况,数据库实例会同然掉。确实是一件很敏感的事情。
在metalink上查找有一个类似的错误,但是是基于NAS环境的,那个Unix环境做了一些系统变更导致了这个错误和这个问题还是有一些不同。
我在想对于如果数据文件写入失败,有没有一些措施来控制,保证不会把库给掉。发现在11.2.0.2版本之后,发现了一个隐含参数()
<强>查看隐含参数的脚本如下。强>
设置线宽132列名称格式故事本来列值格式a25
选择
x。ksppinm名字,
y。ksppstvl价值,
y。ksppstdf isdefault,,
解码(bitand (y.ksppstvf 7) 1,“修改”,4,“SYSTEM_MOD”,“假”)ismod,,
解码(bitand (y.ksppstvf, 2), 2,“真实”,“假”)isadj
从系统。x ksppi x美元,系统。x美元ksppcv y
在x。inst_id=userenv(实例),
和y。inst_id=userenv(实例),
和x。indx=y.indx
和x。ksppinm像“% _ %”,
order by翻译(x。ksppinm ' _ ', ' '),
/
默认这个参数_datafile_write_errors_crash_instance的值是真实的。
甲骨文给出的解释如下,还有一个相关的bug(文档ID 7691270.8)已经在11.2.0.2做了修复。
如果_datafile_write_errors_crash_instance=TRUE(默认),那么
,任何写入数据文件失败,因为一个IO错误causes
,一个实例崩溃只
,如果_datafile_write_errors_crash_instance=FALSE,那么行为
,恢复之前的行为(在此之前修复),这样
,写错误丢失离线文件(DB提供
,在archivelog模式和文件不是在系统表空间拷贝
,这种情况下,
实例流产) <强>简单的测试强>
大家可能想如果表空间不够了,数据文件空间不够了,数据库是不是也会掉下来。我简单在本地做了测试来看在并行插入的时候如果文件空间不够会不会把库掉。但是要模拟数据文件的错误,可能需要借助bb等工具来模拟了。
<强>步骤1。>强首先为了先把隐含参数设置为默认值真实
改变系统设置“_datafile_write_errors_crash_instance”=TRUE;
<强>步骤2。>强然后创建了一个假文件,保证文件系统中的空间只剩下很少的一部分。
dd if=/dev/0=/u02/ora11g/你好。txt b=1000米数=1