遭遇Oracle11gR2 ASM文件无法扩展的Bug

在一个11gR2+ASM的环境中,因为产生了大量归档,导致控制文件需要扩展,结果数据库报错:

Errors in file /opt/oracle/diag/rdbms/test/test/trace/test_arc0_11146.trc:
ORA-00202: control file: '+DATA/control01.ctl'
ORA-17505: ksfdrsz:1 Failed to resize file to size 1920 blocks
ORA-15061: ASM operation not supported [41]
Control file expansion from 1600 blocks to 1920 blocks denied by OS

这是ASM的一个bug 8898852,可以在Oracle Support上找到对应的小patch,经过验证可以解决该问题。该patch已经包含在前两天刚发布的ASM的PSU中,只需要安装该PSU即可。

从目前我们使用11gR2的一些经验来看,bug还是比较多,尤其是一些影响比较大的bug,还是让人对11gR2无法完全放心,只能在特定的环境,和有足够容错方案的环境中,才能冒着风险来试用。

除了这个ASM文件不能扩展,有几个从10.2.0.4升级到11.2.0.1的库,在switchover中碰到了两次ORA-600 [ktbdchk1: bad dscn],出现问题后无法执行DML,非常严重的一个问题,并且暂时还没有好的办法解决,只能通过重建有问题的表的方式绕过,因为两次都是在切换后出现,初步推断是Active Data Guard带来的bug,开了SR和Oracle扯了很久,还在继续研究中。

据说Oracle 11.2.0.2将在年中发布,希望这个新的版本能更稳定些吧。

4月份,Oracle11.2.0.1的PSU和ASM(Grid Infrastructure)的第一个PSU都已经发布了,如果需要在产品环境中使用,建议这些PSU都打上吧

Oracle Database PSU Unix Patch Comments

11.2.0.1.1

Patch 9352237

11.2.0.1.1 for GI

Patch 9343627

11.1.0.7.3

Patch 9352179

11.1.0.7.2 for CRS

Patch 9207257

Released in January 2010

10.2.0.4.4

Patch 9352164

10.2.0.4.4 for CRS

Patch 9294403

注:该表格摘自My Oracle Support Note: 854428.1l

Oracle12G将不再支持裸设备?

一直以来,为了更好的IO性能,为了避免文件系统可能碰到的bug,可能很多DBA都倾向于在一些IO压力比较大的核心库上采用裸设备。毫无疑问,对比文件系统,裸设备的管理相对要复杂些,但其实一旦熟悉,基本上也相差不大。不过Oracle一直在存储和文件系统方面下功夫,ASM在OS层面不失为存储虚拟化的一个廉价解决方案,但是RAC的OCR和Voting Disk无法存放在ASM上,并且在稳定性,可靠性和可管理性还有待加强。在Oracle11g中,ASM已经有了不少的改进,并且有小道消息说Oracle准备将ASM发展成ASMFS,要是真的能实现,绝对具有吸引力。目前在淘宝的数据仓库环境中,RAC+ASM的组合还是比较让人满意的。至于OCFS,作为一个集群文件系统,应该说还有很长的路要走,而从Oracle11g来看,ASM才是Oracle力推的方式。

Oracle最近在Metalink上放出了一个文档(Note:578455.1 – Announcement of De-Support of RAW devices in Release 12G),号称在将来的12G版本中将放弃对裸设备的支持。当然,要实现这一目的,Oracle首先要提供一个足够说服客户的理由,比如未来ASM能够支持OCR和Voting disk,目前ASM还依赖CSS,肯定无法做到这一点,那么12g的ASM可能就是一个独立于整个clusterware的东西,这就无限接近于传说中的ASMFS了。

De-Support of Raw

This document is to announce the de-support of raw devices in a future Oracle 12 g release. This means customers can no longer keep their datafiles, OCR or Voting disks on raw devices in Oracle 12g.

If raw devices are not being used in the current release then there is nothing to be done. However if raw devices are being currently used, then planning should be done to migrate off the raw devices. There are many choices currently to replace raw devices, including ASM, OCFS, and other cluster file systems.

ASM如何识别磁盘

在ASM中,要创建diskgroup或者往已有的diskgroup里添加新的disk,则该disk必须已经识别,也就是要在v$asm_disk里有记录。ASM会根据asm_diskstring指定的路径去检查所有的磁盘。另外,查询v$asm_diskgroup和v$asm_disk也会导致这个识别磁盘动作的发生,所以平时最好查询v$asm_disk_stat来替代v$asm_disk。

Oracle也提供了一个工具来手工识别磁盘,就是KFOD,注意不是KFED哦。

$kfod -h
_asm_a/llow_only_raw_disks KFOD allow only raw devices [_asm_allow_only_raw_disks=TRUE/(FALSE)]
_asm_l/ibraries ASM Libraries[_asm_libraries=’lib1′,’lib2′,…]
_asms/id ASM Instance[_asmsid=sid]
a/sm_diskstring ASM Diskstring [asm_diskstring=’discoverystring’, ‘discoverystring’ …]
d/isks Disks to discover [disks=raw,asm,all]
g/roup Group discover [group=controlfile]
n/ohdr KFOD header suppression [nohdr=TRUE/(FALSE)]
o/p KFOD options type [OP=DISKS/GROUPS/ALL]
p/file ASM parameter file [pfile=’parameterfile’]
s/tatus Include disk header status [status=TRUE/(FALSE)]
v/erbose KFOD verbose errors [verbose=TRUE/(FALSE)]

可以看到KFOD使用起来还是比较简单的。一个实际执行的例子如下:

$kfod disks=all status=true
—————————————————————
Disk Size Header Path
==========================================================
1: 1023 Mb FOREIGN /dev/raw/raw1
2: 273708 Mb MEMBER /dev/raw/raw10
3: 273708 Mb MEMBER /dev/raw/raw11
4: 273708 Mb MEMBER /dev/raw/raw12

————————————————————–
ORACLE_SID ORACLE_HOME
=========================================================
+ASM4 /u01/oracle/product/10g/db
+ASM3 /u01/oracle/product/10g/db
+ASM2 /u01/oracle/product/10g/db
+ASM1 /u01/oracle/product/10g/db

Oracle数据库如何识别ASM磁盘组

假如使用ASM做为Oracle数据库的数据存储方式,那么Oracle数据库是怎么来识别ASM的diskgroup的呢,也就是数据库的instanc和ASM的instance之间是如何沟通的呢?简单的说,就是ocssd(Oracle Cluster Support Services daemon)。本文假设为Linux环境下的RAC+ASM系统。

对于ASM来说,ocssd是必须的,所以在使用dbca创建ASM Instance的时候,就会提示要先安装ocssd。如果是单机,执行$ORACLE_HOME/bin/localconfig add安装ocssd。ocssd通过inittab自动启动,在安装的时候就会在/etc/inittab中加入以下条目(rac环境):

h2:35:respawn:/etc/init.d/init.cssd fatal >/dev/null 2>&1

其中,35表示在os的运行级别(runlevel)为3或者5的时候启动/etc/init.d/init.cssd
respawn表示init.cssd进程如果异常终止,则自动重新启动

ocssd进程启动后会打开一系列的文件(通过/proc/pid/fd或者lsof -a -p pid可以获得filedescriptor的信息):
消息文件
— $CRS_HOME/srvm/mesg/procus.msb
— $CRS_HOME/css/mesg/clssus.msb
— $CRS_HOME/has/mesg/clsdus.msb
日志文件
— $CRS_HOME/log/hostname/cssd/cssdOUT.log
— $CRS_HOME/log/hostname/cssd/ocssd.log
— $CRS_HOME/log/hostname/alertSID.log
OCR(Oracle Cluster Registry),本例中在裸设备上,如果是单机也可能在本地文件系统中,典型路径$ORACLE_HOME/cdata/localhost/local.ocr
— /dev/raw/raw1
— /dev/raw/raw2
以及一些socket端口
— socket:[578057]
— socket:[578062]

ASM instace启动以后,通过gmon进程和osccd通信,将ASM的一些信息告诉给ocssd,而数据库则从ocssd获得这些信息,也就是说,ocssd是ASM Instance和Database之间的纽带。

ASM/ocssd/database之间具体通信的步骤,可以参考这里

无觅相关文章插件,快速提升流量