

闫献锋,长期关注信息系统基础架构、主机与数据库运维与优化,对故障分析诊断、优化调整有一定的心得。
1、概述
ASMLib的是Oracle数据库10g及以上版本的自动存储管理功能的支持库。 Oracle提供了该库的在Linux操作系统下的的具体实现。在默认的配置情况下ASMLib并不会去关心具体使用哪条路径,它只是提供了一个库文件,选择由操作系统所发现的设备文件,具体取决于存储驱动程序,它可能是/dev/sdb,也可能是/dev/mapper/mpathb。ASMLib程序允许两个磁盘扫描顺序的修改。首先它允许排除某些磁盘。其次也可以指定首先要扫描的磁盘,在此列表中的磁盘先被扫描,其他不在此列表中的磁盘后被扫描。
ASMLib的配置文件是/etc/sysconfig/oracleasm,是一个软连接,链接到/etc/sysconfig/oracleasm-dev_oracleasm。它包含了所有的配置选项。配置文件包含了许多的配置变量。下表是我们关心的一些配置项:
配置项 | 配置说明 |
ORACLEASM_SCANORDE | 指定要扫描的磁盘的顺序 |
ORACLEASM_SCANEXCLUDE | 变量指定的磁盘将被忽略。 |
通过调整ORACLEASM_SCANORDE与ORACLEASM_SCANEXCLUDE,我们可以在使用ASMLib的环境中把存储设备从单路径调整到多路径,从而保证存储方面的高可用性,消除存储方面的单点故障。
2、步骤
停止数据库和集群
配置多路
一般情况下,修改/etc/multipath.conf,参考下面的配置进行调整multipath.conf文件即可。
vi /etc/multipath.conf multipaths { multipath { wwid "360060e801667g700000167j700030053" alias mpocr1 } |
重启multipathd服务:
root@test01]# service multipathd restart |
通过multipath命令查看多路的配置是否合理。
root@test01 ]# multipath -l mpocr1 (360060e801667g700000167j700030053) dm-40 HP,OPEN-V size=50G features='1 queue_if_no_path' hwhandler='0' wp=rw `-+- policy='round-robin 0' prio=0 status=active |- 0:0:0:38 sdam 66:96 active undef running `- 1:0:0:38 sdcu 70:32 active undef running |
根据目标环境,调整ORACLEASM_SCANORDE和ORACLEASM_SCANEXCLUDE(我们这里针对multipath环境为例做一些说明)
#编辑文件/etc/sysconfig/oracleasm vi etc/sysconfig/oracleasm # ORACLEASM_SCANORDER: Matching patterns to order disk scanning ORACLEASM_SCANORDER="mpath dm" (OR ORACLEASM_SCANORDER="dm")
# ORACLEASM_SCANEXCLUDE:Matching patterns to exclude disks from scan ORACLEASM_SCANEXCLUDE="sd"
#重启oracleasm服务 /etc/init.d/oracleasm restart
#检查oracleasm磁盘 /etc/init.d/oracleasm querydisk -d ocr1 |
启动集群和数据库
检查集群和数据库是否能正常启动
3、常见问题
a) 单路径设备为什么能转换到多路径设备?
实际上数据是存储在磁盘上,单路径设备和多路径设备只是我们对于磁盘的描述,只要数据在,只要存储提供了相应的接口,我们就能通过调整配置项使多路设备优先生效。
b) 在使用/etc/init.d/oracleasm删除和重建磁盘之后,为什么crs无法正常启动?
asm里面有一套自己的元数据描述,重建之后这套元数据被破坏掉了。
c) 使用asm有什么额外注意的地方?
建议定期备份磁盘头部
备份命令: kfed read /dev/dm-10 aunum=0 blknum=0 text=dm10_header.txt 恢复命令: kfed write /dev/dm-10 aunum=0 blknum=0 text=dm10_header.txt |




