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哦。
_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使用起来还是比较简单的。一个实际执行的例子如下:
---------------------------------------------------------------
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环境):
其中,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之间具体通信的步骤,可以参考这里。
Oracle11g ASMCMD新命令
Oracle10g的ASMCMD命令,提供了通过命令行方式管理ASM的接口,但是功能非常有限,比如无法在asm和os之间直接复制文件,就是一件很让人头痛的事情,只能通过rman或者dbms_file_transfer实现。
Oracle11g的ASMCMD终于加上了一个比较实用的cp命令,不但可以在ASM和OS之间复制文件,也可以在不同的ASM Instance和Diskgroup之间复制文件,这就非常的方便了。
source +dgtest/test/datafile/USERS.264.646186565
target users.dbf
copying file(s)...
file, E:\ORACLE\PRODUCT\11.1.0\DB_1\DATABASE\USERS.DBF, copy committed.