Oracle ASMLIB 系列-- oracleasm
简介
创建ASM磁盘请参考:https://www.xmmup.com/zaioraclezhongchuangjianasmcipandenzhongfangfa.html
说明:RHEL6、 RHEL7、CentOS6、CentOS7 都可以使用asmlib,只不过需要安装kmod-oracleasm包。 RHEL5不需要安装 kmod-oracleasm包 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | ---------------------------- oracleasm常用命令 asmlib oracleasm日志: tail -f /var/log/oracleasm /usr/sbin/oracleasm configure -i /usr/sbin/oracleasm createdisk DISK1 /dev/sdb1 /etc/init.d/oracleasm scandisks /etc/init.d/oracleasm listdisks /etc/init.d/oracleasm enable /etc/init.d/oracleasm restart /etc/init.d/oracleasm status /etc/init.d/oracleasm init /usr/sbin/oracleasm enable /usr/sbin/oracleasm restart /usr/sbin/oracleasm createdisk DISKNAME devicename /usr/sbin/oracleasm deletedisk DISKNAME /usr/sbin/oracleasm querydisk {DISKNAME | devicename} /usr/sbin/oracleasm listdisks /usr/sbin/oracleasm scandisks ls -l /dev/oracleasm/disks --asmlib配置文件 cat /etc/sysconfig/oracleasm oracleasm configure oracleasm日志: tail -f /var/log/oracleasm 安装: ## 先安装kmod-oracleasm,再安装oracleasmlib和oracleasm-support --------------- rhel6.5安装asmlib:https:///search yum install -y kmod-oracleasm # # wget 下载:https:///linux/downloads/linux-asmlib-rhel6-downloads.html wget wget rpm -ivh *.rpm oracleasm configure -i # grid,asmadmin,y,y oracleasm configure -d oracleasm configure -e oracleasm init oracleasm status fdisk -l | grep dev oracleasm createdisk ocr01 /dev/vdb1 oracleasm listdisks oracleasm renamedisk -f /dev/sdf1 asmdisk3 --------------- rhel7安装asmlib:https:///search yum install -y kmod-oracleasm # # wget 下载:https:///linux/downloads/linux-asmlib-rhel7-downloads.html wget wget rpm -ivh *.rpm systemctl enable oracleasm.service oracleasm configure -i # grid,asmadmin,y,y oracleasm configure -d oracleasm configure -e oracleasm init oracleasm status fdisk -l | grep dev oracleasm createdisk ocr01 /dev/vdb1 oracleasm listdisks oracleasm renamedisk -f /dev/sdf1 asmdisk3 ------ ASM磁盘 $ORACLE_HOME/bin/kfod disk=asm s=true ds=true c=true /grid/stage/ext/bin/kfod disk=asm s=true ds=true c=true # 18c kfod disks=asm ds=true cluster=true create diskgroup DATA external redundancy disk '/dev/raw/raw*'; create diskgroup FRA external redundancy disk '/dev/rhdisk3'; --创建磁盘组FRA CREATE DISKGROUP ACFSDG external redundancy DISK '/dev/oracleasm/disks/VOL1' ATTRIBUTE 'compatible.asm' = '11.2','compatible.rdbms' = '11.2','compatible.advm'='11.2'; create diskgroup OCR external redundancy disk 'ORCL:OVDISK' attribute 'compatible.asm'='11.2','compatible.rdbms'='11.2'; CREATE DISKGROUP dgroup1 NORMAL REDUNDANCY disk '/dev/raw/raw6', '/dev/raw/raw7'; CREATE DISKGROUP dgroup1 HIGH REDUNDANCY disk '/dev/raw/raw6', '/dev/raw/raw7', '/dev/raw/raw8'; create diskgroup DG1 external redundancy failgroup FG1 disk '/dev/raw/raw6' name DG2_FG1_VOL1 failgroup FG2 disk '/dev/raw/raw7' name DG2_FG2_VOL2; create diskgroup DG2 normal redundancy failgroup FG1 disk '/dev/raw/raw6' name DG2_FG1_VOL1 failgroup FG2 disk '/dev/raw/raw7' name DG2_FG2_VOL2; create diskgroup DG2 normal redundancy failgroup FG1 disk '/dev/raw/raw6','/dev/raw/raw7' name DG2_FG1_VOL1 failgroup FG2 disk '/dev/raw/raw8','/dev/raw/raw9' name DG2_FG2_VOL2; ---修改磁盘组的兼容属性 ALTER DISKGROUP asm_dg SET ATTRIBUTE 'compatible.asm' = '11.1'; ALTER DISKGROUP asm_dg SET ATTRIBUTE 'compatible.rdbms' = '11.1'; COLUMN name FORMAT A10 COLUMN compatibility FORMAT A20 COLUMN database_compatibility FORMAT A20 SELECT group_number, name, compatibility, database_compatibility FROM v$asm_diskgroup; set line 9999 set pagesize 9999 col path format a60 SELECT a.group_number, disk_number,mount_status, a.name, path FROM v$asm_disk a order by a.disk_number; select instance_name,status from v$instance; set line 999 select name,state,free_mb,required_mirror_free_mb,usable_file_mb,a.group_number, disk_number,mount_status, path from v$asm_diskgroup a; select a.group_number,name,TYPE,state,TOTAL_MB,free_mb from v$asm_diskgroup a; select name,state,free_mb,required_mirror_free_mb,usable_file_mb,a.group_number from v$asm_diskgroup a; alter diskgroup DG1 mount; ---nomount状态下强制删除磁盘组 drop diskgroup oradg force including contents; alter diskgroup DG1 drop disk DG1_VOL5; --删除磁盘组DG1中的磁盘VOL5 alter system set asm_diskstring='','ORCL:*','/dev/raw/raw*','/dev/oracleasm/disks/VOL*'; alter system set asm_diskstring='/dev/asm-disk*','/dev/raw/raw*'; alter diskgroup DATA add disk '/dev/raw/raw1'; export GRID_HOME=$ORACLE_HOME # 查询ASM磁盘 $GRID_HOME/bin/kfod disks=asm st=true ds=true cluster=true # /grid/stage/ext/bin/kfod disks=asm st=true ds=true cluster=true ------------------------ faking asmdisk asm磁盘 ---- 添加loop设备个数 第一种办法:修改 /etc/modprobe.conf 文件添加参数:options loop max_loop=20 可以通过 modprobe -v loop 命令立即加载该模块,或重启 第二种办法(通用):mknod -m 0660 /dev/loopX b 7 X raw -qa losetup -a --mknod -m 0660 /dev/loopX b 7 X mknod -m 0660 /dev/loop9 b 7 9 mkdir /asmdisk dd if=/dev/zero of=/asmdisk/disk1 bs=1024k count=2000 dd if=/dev/zero of=/asmdisk/disk2 bs=1024k count=2000 dd if=/dev/zero of=/asmdisk/disk3 bs=1024k count=2000 dd if=/dev/zero of=/asmdisk/disk4 bs=1024k count=2000 dd if=/dev/zero of=/asmdisk/disk5 bs=1024k count=2000 /sbin/losetup /dev/loop1 /asmdisk/disk1 /sbin/losetup /dev/loop2 /asmdisk/disk2 /sbin/losetup /dev/loop3 /asmdisk/disk3 /sbin/losetup /dev/loop4 /asmdisk/disk4 /sbin/losetup /dev/loop5 /asmdisk/disk5 raw /dev/raw/raw1 /dev/loop1 raw /dev/raw/raw2 /dev/loop2 raw /dev/raw/raw3 /dev/loop3 raw /dev/raw/raw4 /dev/loop4 raw /dev/raw/raw5 /dev/loop5 chmod 660 /dev/raw/raw1 chmod 660 /dev/raw/raw2 chmod 660 /dev/raw/raw3 chmod 660 /dev/raw/raw4 chmod 660 /dev/raw/raw5 chown oracle:dba /dev/raw/raw1 chown oracle:dba /dev/raw/raw2 chown oracle:dba /dev/raw/raw3 chown oracle:dba /dev/raw/raw4 chown oracle:dba /dev/raw/raw5 ------ 将以下内容添加到文件/etc/rc.local文件中 ------Add the following entries to the file "/etc/rc.local" /sbin/losetup /dev/loop1 /asmdisk/disk1 /sbin/losetup /dev/loop2 /asmdisk/disk2 /sbin/losetup /dev/loop3 /asmdisk/disk3 /sbin/losetup /dev/loop4 /asmdisk/disk4 /sbin/losetup /dev/loop5 /asmdisk/disk5 raw /dev/raw/raw1 /dev/loop1 raw /dev/raw/raw2 /dev/loop2 raw /dev/raw/raw3 /dev/loop3 raw /dev/raw/raw4 /dev/loop4 raw /dev/raw/raw5 /dev/loop5 chmod 660 /dev/raw/raw1 chmod 660 /dev/raw/raw2 chmod 660 /dev/raw/raw3 chmod 660 /dev/raw/raw4 chmod 660 /dev/raw/raw5 chown grid:asmadmin /dev/raw/raw1 chown grid:asmadmin /dev/raw/raw2 chown grid:asmadmin /dev/raw/raw3 chown grid:asmadmin /dev/raw/raw4 chown grid:asmadmin /dev/raw/raw5 ------------------------ Simulating Asm by faking hardware -->Faking Hardware -->Instaling ASM Lib -->Configuring the disks -->Install DB & ASM instance ---Faking Hardware: root 用户 mkdir /asmdisk dd if=/dev/zero of=/asmdisk/disk1 bs=1024k count=2000 dd if=/dev/zero of=/asmdisk/disk2 bs=1024k count=2000 /sbin/losetup /dev/loop1 /asmdisk/disk1 /sbin/losetup /dev/loop2 /asmdisk/disk2 raw /dev/raw/raw1 /dev/loop1 raw /dev/raw/raw2 /dev/loop2 chmod 660 /dev/raw/raw1 chmod 660 /dev/raw/raw2 chown grid:asmadmin /dev/raw/raw1 chown grid:asmadmin /dev/raw/raw2 ------Add the following entries to the file "/etc/rc.local" echo "/sbin/losetup /dev/loop1 /asmdisk/disk1" >>/etc/rc.local echo "/sbin/losetup /dev/loop2 /asmdisk/disk2" >>/etc/rc.local |
faking出来的磁盘也可以用于ASMLIB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # mknod -m 0660 /dev/loop3 b 7 3 # losetup -d loop1 #删除loop设备 losetup -a mkdir /asmdisk dd if=/dev/zero of=/asmdisk/disk1 bs=1024k count=2000 dd if=/dev/zero of=/asmdisk/disk2 bs=1024k count=2000 dd if=/dev/zero of=/asmdisk/disk3 bs=1024k count=2000 /sbin/losetup /dev/loop1 /asmdisk/disk1 /sbin/losetup /dev/loop2 /asmdisk/disk2 /sbin/losetup /dev/loop3 /asmdisk/disk3 oracleasm createdisk ASM1 /dev/loop1 oracleasm createdisk ASM2 /dev/loop2 oracleasm createdisk ASM3 /dev/loop3 ----以下内容加入到/etc/rc.local /sbin/losetup /dev/loop1 /asmdisk/disk1 /sbin/losetup /dev/loop2 /asmdisk/disk2 /sbin/losetup /dev/loop3 /asmdisk/disk3 oracleasm scandisks # linux7下需要执行chmod +x /etc/rc.d/rc.local |
ASMLIB是什么?常用命令有哪些?其运行日志路径在哪里?
在存储管理员给服务器提供磁盘设备后,它们对于服务器来说是可用的并且可以在Linux系统中的/proc/partitions虚拟文件中可以看到。系统管理然后使用fdisk工具来对磁盘设备进行分区。被分区后磁盘设备现在可以被配置为ASMLIB磁盘,系统管理员就可以创建ASM磁盘。ASMLIB是Oracle 10g与11g中ASM功能的支持Library。ASMLIB允许Oracle数据库更有效的使用ASM与访问磁盘组。ASMLIB是ASM的一个插件,提供了一种识别与访问块设备的接口。另外,ASMLIB API能够让存储与操作系统厂商来提供存储相关的扩展功能。这些功能可能提供一些好处,比如提高性能与增加完整性,但ASMLIB对于ASM不是必须使用的。ASMLIB的一些常用命令如下所示:
l 创建ASM磁盘命令:oracleasm createdisk
l 扫描ASM磁盘命令:oracleasm scandisks
l 列举ASM磁盘命令:oracleasm listdisks
其它命令请查看官方文档。ASMLIB运行的日志文件路径在:/var/log/oracleasm。
1 2 3 4 5 6 7 8 9 10 11 | 在采用ASMLIB作为ASM驱动时,此时,通过V$ASM_DISK视图无法确认具体物理磁盘: SQL> SELECT DISK_NUMBER,PATH FROM V$ASM_DISK WHERE GROUP_NUMBER=1; DISK_NUMBER PATH ----------- ------------ 0 ORCL:VOL12 可以通过major号确定: [root@rac1 ~]# ls -l /dev/oracleasm/disks/VOL12 brw-rw---- 1 oracle oinstall 8, 29 May 15 22:02 /dev/oracleasm/disks/VOL12 [root@rac1 ~]# ls -l /dev/sd* |grep "8, 29" brw-r----- 1 root disk 8, 29 May 15 22:02 /dev/sdb13 由此可知,对应的磁盘是/dev/sdb13。 |
对于如下的磁盘:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SQL> col name format a10 SQL> set line 9999 SQL> col path format a15 SQL> col LIBRARY format a60 SQL> select GROUP_NUMBER,path,name,disk_number,total_mb,free_mb,LIBRARY from v$asm_disk order by GROUP_NUMBER desc,disk_number; GROUP_NUMBER PATH NAME DISK_NUMBER TOTAL_MB FREE_MB LIBRARY ------------ --------------- ---------- ----------- ---------- ---------- ------------------------------------------------------------ 3 /dev/raw/raw6 FRA_0000 0 1000 992 System 3 ORCL:VOL3 FRA_0003 1 6934 6901 ASM Library - Generic Linux, version 2.0.4 (KABI_V2) 2 /dev/raw/raw1 OCR_0000 0 1000 940 System 1 /dev/raw/raw3 DATA_0000 0 1000 889 System 1 ORCL:VOL1 DATA_0003 1 9546 8530 ASM Library - Generic Linux, version 2.0.4 (KABI_V2) |
如果不能显示“ORCL:*”格式,说明asmlib没有正确加载,可以尝试重启OS。
如果LIBRARY显示System,那么需要设置asm_diskstring的值,它的值包括'/dev/oracleasm/disks/VOL*'。如果LIBRARY显示“ASM Library - Generic Linux, version 2.0.4 (KABI_V2)”,那么asm_diskstring的值可以为空或“ORCL:*”。
命令如下所示:
1 2 3 4 | alter system set asm_diskstring=''; alter system set asm_diskstring='ORCL:*','/dev/raw/raw*'; alter system set asm_diskstring='/dev/oracleasm/disks/VOL*','/dev/raw/raw*'; |
需要说明的一点是,在RHEL6(Red Hat Enterprise Linux 6)以前,Oracle均是使用ASMLIB这个内核支持库配置ASM。ASMLIB是一种基于Linux module,专门为ASM特性设计的内核支持库(kernel support library)。但是,在2011年5月,甲骨文发表了一份Oracle数据库ASMLib的声明,声明中称甲骨文将不再提供RHEL6的ASMLIB和相关更新。因此,目前在RHEL6上使用Oracle ASM,已不再使用ASMLIB,而是采用udev设备文件来配置ASM。
使用ASMLIB管理磁盘
在存储管理员给服务器提供磁盘设备后,它们对于服务器来说是可用的并且可以在Linux系统中 的/proc/partitions虚拟文件中可以看到。系统管理然后使用Linux fdisk工具来对磁盘设备进行分 区。被分区后磁盘设备现在可以被配置为ASMLIB磁盘,系统管理员创建ASMLIB磁盘。创建命 令:oracleasm createdisk。createdisk命令使用两个输入参数,通过设备来生成用户定义的磁盘名:
1 2 | [root@racnode1]#/etc/init.d/oracleasm createdisk VOL1 /dev/sdg1 Creating Oracle ASM disk "VOL1" [ OK ] |
磁盘名被限制为30个字符。它们必须使用字母开头但可以由其它ASCII字符组成,包括:大写字母, 数字和下划线。每一个被创建成功的磁盘被标识为ASMLIB磁盘并且会被显示在oracleasm文件系统 中/dev/oracleasm/disks/。文件系统是一种特定的不受任何方式进行维护。
用户可查询磁盘设备来判断是否它们是有效的ASMLIB磁盘。为了查询,使用下面的oracleasm querydisk命令。querydisk命令可以应用于裸设备和ASMLIB磁盘
1 2 3 4 | [root@racnode1]#/etc/init.d/oracleasm querydisk /dev/sdg1 Checking if device "/dev/sdg" is an Oracle ASM disk [ OK ] [root@racnode1]#/etc/init.d/oracleasm querydisk VOL1 Checking for ASM disk "VOL1" [ OK ] |
另外,所有被标记的磁盘与使用ASMLIB创建的磁盘可以使用以下oracleasm listdisks命令来显示:
1 2 3 4 | [root@racnode1]#/etc/init.d/oracleasm listdisks VOL1 VOL2 VOL3 |
如果一个磁盘设备不是一个ASMLIB磁盘,会显示以下信息:
1 2 | [root@racnode1]#/etc/init.d/oracleasm querydisk /dev/sdh1 Checking if device "/dev/sdh1" is an Oracle ASM disk [FAILED] |
对于ASM不再需要的磁盘可以撤消标记并且使用oracleasm deletedisk命令来删除:
1 2 | [root@racnode1]#/etc/init.d/oracleasm deletedisk VOL1 Deleting Oracle ASM disk "VOL1" [ OK ] |
当ASMLIB用于RAC环境时,对于RAC的共享磁盘架构允许使用oracleasm createdisk命令只在一个节点 上创建ASMLIB磁盘,其它节点只需要使用ASMLIB扫描来查找ASMLIB磁盘就可以了。例如,对于两节点 RAC环境,节点1可以标记ASMLIB磁盘,节点2然后执行扫描ASMLIB磁盘来查找这些ASMLIB磁盘。
1 2 3 4 | [root@racnode1]#/etc/init.d/oracleasm createdisk VOL1 /dev/sdg1 Creating Oracle ASM disk "VOL1" [ OK ] [root@racnode2]#/etc/init.d/oracleasm scandisks Scanning system for ASM disks [ OK ] |
在合适的ASMLIB磁盘创建后,ASM的init.ora参数asm_diskstring可以保留缺省的NULL或者设置 为'ORCL:*'。一旦设置后,ASM将可以发现以下磁盘:
1 2 3 4 5 6 | SQL> select name, library, path from v$asm_disk; NAME LIBRARY PATH ----------- ------------------------- ------------------------- VOL1 ASM Library Generic Linux ORCL:VOL1 VOL2 ASM Library Generic Linux ORCL:VOL2 VOL3 ASM Library Generic Linux ORCL:VOL3 |
注意,如果ASMLIB没有使用,那么上面的查询LIBRARY列将返回"System"。
重命名Disk
renamedisk命令被用来改变现有成员的标签而不会丢失数据。注意修改磁盘时只有当ASM不访问该磁 盘才行。因此磁盘组必须dismount,并且在RAC环境中,所有ASM节点必须都dismount磁盘组。当有 ASM实例访问被重新标签的磁盘时执行renamedisk操作可能造成损坏。因为renamedisk命令是危险的 通过打印消息可以看到:
1 2 3 4 5 6 7 8 | [root@racnode1]#/etc/init.d/oracleasm renamedisk /dev/sdb3 VOL1 Warning: Changing the label of a disk marked for ASM is a very dangerous operation. If this is really what you mean to do, you must ensure that all Oracle and ASM instances have ceased using this disk. Otherwise, you may LOSE DATA. If you really wish to change the label, rerun with the force-renamedisk command. [root@racnode1]#/etc/init.d/oracleasm force-renamedisk /dev/sdb3 VOL1 Renaming disk "/dev/sdb3" to "VOL1" [ OK ] |
force_renamedisk命令使用两个参数:裸设备名,其次是ASM磁盘名。
discover磁盘
命令/sbin/oracleasm-discover是一个简单的工具来判断Oracle的Linux ASMLIB在discover操作时所看到那个磁盘。这个命令更多一个调试工具来验证discover所列出的请求磁盘。这个命令也列出了每个磁盘的最大I/O大小。最大I/O大小,ASMLIB可以作为一个命令发送给设备。
1 2 3 4 5 | [root@racnode1]#/usr/sbin/oracleasm-discover 'ORCL:*' Using ASMLib from /opt/oracle/extapi/32/asm/orcl/1/libasm.so [ASM Library - Generic Linux, version 2.0.0 (KABI_V1)] Discovered disk: ORCL:VOL1 [819200 blocks (419430400 bytes), maxio 512] Discovered disk: ORCL:VOL2 [1955808 blocks (1001373696 bytes), maxio 512] |
最大I/O大小来自SCSI HBA设备与磁盘设备链中的其它设备。在上面的例子中,maxio等于512,512 byte或256K。如果maxio显示了最小值,比如128,那么它可能是中间组件比如多路径设备或HBA设备限制的原因。
升级ASMLIB
为了升级ASMLIB,系统管理员可以执行以下步骤。注意这是严格意义上的软件升级并且没有磁盘标签 被维护。这是一个节点本地升级,因此在RAC环境中,每个单独的节点应该被升级。
1.关闭ASM
2.执行/etc/init.d/oracleasm stop
3.执行rpm -Uvh oracleasm-*.rpm
4.执行/etc/init.d/oracleasm start
5.启动ASM
诊断ASMLIB
诊断ASMLIB从上到下的操作步骤为:
1.使用的Oracle ASMLIB的当前版本。验证软件版本。ASMLIB请求一个设备精确匹配给内核,因此使 用与uname -a命令输出匹配的oracleasm内核包。
1 2 3 4 5 6 7 | [root@racnode1]# rpm -qa |grep oracleasm oracleasm-support-2.0.3-1.i386.rpm oracleasmlib-2.0.2-1.i386.rpm oracleasm-2.6.9-42.0.3.ELsmp-2.0.3-1.i686.rpm [root@racnode1]# uname -a Linux racnode1.us.oracle.com 2.6.9-42.0.3.ELsmp #1Thu May 15 17:03:45 EST 2006 i686 i686 i386 GNU/Linux |
2.验证ASMLIB的安装设置
3.确保oracleasm configure命令正确运行,使用以下信息进行确认配置:
a.以root用户执行lsmod命令来显示加载的oracleasm模块。使用oracleasm模块"Used by"列会被设 置为1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | [root@db2 ~]# lsmod Module Size Used by oracleasm 53591 1 8021q 20994 0 garp 7297 1 8021q stp 2256 1 garp llc 5608 2 garp,stp cpufreq_ondemand 9398 80 ip6t_REJECT 4486 2 nf_conntrack_ipv6 10595 3 nf_defrag_ipv6 11368 1 nf_conntrack_ipv6 xt_state 1370 3 nf_conntrack 84658 2 nf_conntrack_ipv6,xt_state ip6table_filter 1671 1 ip6_tables 19409 1 ip6table_filter ipv6 339024 660 ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6 dm_round_robin 2531 34 dm_multipath 18562 18 dm_round_robin uinput 8917 0 sg 30968 0 serio_raw 5631 0 iTCO_wdt 6353 0 iTCO_vendor_support 3030 1 iTCO_wdt coretemp 6997 0 acpi_cpufreq 13345 0 freq_table 6987 2 cpufreq_ondemand,acpi_cpufreq mperf 1555 1 acpi_cpufreq intel_powerclamp 10841 0 kvm_intel 130025 0 kvm 438077 1 kvm_intel crc32c_intel 14496 0 ghash_clmulni_intel 4707 0 microcode 115607 0 pcspkr 2150 0 igb 186225 0 hwmon 2087 2 coretemp,igb i2c_i801 12911 0 i2c_core 31228 1 i2c_i801 lpc_ich 12496 0 mfd_core 3955 1 lpc_ich ioatdma 61937 168 dca 7283 2 igb,ioatdma i7core_edac 20072 0 edac_core 54168 1 i7core_edac shpchp 27901 0 ext4 532546 2 jbd2 100769 1 ext4 mbcache 7575 1 ext4 sd_mod 41045 38 crc_t10dif 1547 1 sd_mod qla2xxx 562439 68 scsi_transport_fc 54538 1 qla2xxx scsi_tgt 12075 1 scsi_transport_fc sr_mod 15980 0 cdrom 40900 1 sr_mod usb_storage 53806 0 megaraid_sas 101114 3 aesni_intel 45744 0 ablk_helper 2997 1 aesni_intel cryptd 10460 3 ghash_clmulni_intel,aesni_intel,ablk_helper lrw 4222 1 aesni_intel aes_x86_64 7967 1 aesni_intel xts 3466 1 aesni_intel gf128mul 7999 2 lrw,xts pata_acpi 3782 0 ata_generic 3758 0 ata_piix 26525 0 dm_mirror 14208 0 dm_region_hash 11094 1 dm_mirror dm_log 9681 2 dm_mirror,dm_region_hash dm_mod 85047 41 dm_multipath,dm_mirror,dm_log |
b.执行命令cat /proc/filesystem,并且确保在文件系统列表中存在一条名叫oracleasmfs的记录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | [root@db2 ~]# cat /proc/filesystems nodev sysfs nodev rootfs nodev bdev nodev proc nodev cgroup nodev cpuset nodev tmpfs nodev devtmpfs nodev binfmt_misc nodev debugfs nodev securityfs nodev sockfs nodev pipefs nodev anon_inodefs nodev devpts nodev ramfs nodev hugetlbfs iso9660 nodev pstore nodev mqueue ext4 nodev asmdisk nodev oracleasmfs |
c.执行命令 df -ha,它将显示所mount的oracleasmfs
1 2 3 4 5 6 7 8 9 | /dev/mapper/vg_db2-LogVol00 1.1T 437G 592G 43% / proc 0 0 0 - /proc sysfs 0 0 0 - /sys devpts 0 0 0 - /dev/pts tmpfs 126G 1005M 125G 1% /dev/shm /dev/sda1 190M 79M 98M 45% /boot none 0 0 0 - /proc/sys/fs/binfmt_misc oracleasmfs 0 0 0 - /dev/oracleasm |
确保oracleasm createdisk正确执行。为了让ASM使用,磁盘被通过createdisk命令来标记。当磁盘被标记后,会在磁盘头中写入签名--,磁盘将被标记ASM使用。可以使用以下命令来验证.执行oracleasm listdisks命令。这个命令将显示被标记为ASMLIB的磁盘。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [root@db2 ~]# oracleasm listdisks ARCH0 ARCH1 ARCH2 ARCH3 CW_DATA1 OCR1 OCR2 OCR3 RLZY_ARCH1 RLZY_DATA1 RLZY_DATA2 RLZY_DATA3 SBK_DATA0 SBK_DATA1 SBK_DATA2 YB_DATA4 YB_DATA5 |
.对每个被标记为ASMLIB磁盘执行oracleasm querydisk命令来确保标记
1 2 | [root@db2 ~]# oracleasm querydisk YB_DATA4 Disk "YB_DATA4" is a valid ASM disk |
4.执行ls -l /dev/oracleasm/disks来确保磁盘的所属组与权限是grid:asmadmin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@db2 ~]# ls -l /dev/oracleasm/disks total 0 brw-rw---- 1 grid asmadmin 252, 8 Dec 7 20:14 ARCH0 brw-rw---- 1 grid asmadmin 252, 9 Dec 7 20:17 ARCH1 brw-rw---- 1 grid asmadmin 252, 10 Dec 7 20:18 ARCH2 brw-rw---- 1 grid asmadmin 252, 11 Dec 7 20:18 ARCH3 brw-rw---- 1 grid asmadmin 252, 14 Dec 7 20:18 CW_DATA1 brw-rw---- 1 grid asmadmin 252, 1 Dec 7 20:18 OCR1 brw-rw---- 1 grid asmadmin 252, 2 Dec 7 20:18 OCR2 brw-rw---- 1 grid asmadmin 252, 6 Dec 7 20:18 OCR3 brw-rw---- 1 grid asmadmin 252, 7 Dec 7 20:18 RLZY_ARCH1 brw-rw---- 1 grid asmadmin 252, 3 Dec 7 20:18 RLZY_DATA1 brw-rw---- 1 grid asmadmin 252, 4 Dec 7 20:18 RLZY_DATA2 brw-rw---- 1 grid asmadmin 252, 5 Dec 7 20:18 RLZY_DATA3 brw-rw---- 1 grid asmadmin 252, 15 Dec 7 20:18 SBK_DATA0 brw-rw---- 1 grid asmadmin 252, 16 Dec 7 20:18 SBK_DATA1 brw-rw---- 1 grid asmadmin 252, 17 Dec 7 20:18 SBK_DATA2 brw-rw---- 1 grid asmadmin 252, 12 Dec 7 20:18 YB_DATA4 brw-rw---- 1 grid asmadmin 252, 13 Dec 7 20:18 YB_DATA5 |
5.验证ASMLIB发现字符串(可以在DBCA中指定或设置asm_diskstring参数)是否被设置ORCL:*或NULL。 如果ASM实例在运行,那么检查ASM的alert log查看是否正确设置。
6.对ASM alert log中关于发现所显示的任何信息使用Linux/Unix的grep命令。如果成功加载ASMLIB 将会显示以下信息:
1 2 | Loaded ASM Library - Generic Linux, version 2.0.1 library for ASMLIB interface |
下面的查询显示被发现的ASMLIB磁盘:
1 2 3 4 5 6 | SQL> SELECT LIBRARY, PATH FROM V$ASM_DISK; LIBRARY PATH ------------------------------------------- ---------------- ASM Library - Generic Linux, version 2.0.0.1 ORCL:VOL1 ASM Library - Generic Linux, version 2.0.0.1 ORCL:VOL2 ASM Library - Generic Linux, version 2.0.0.1 ORCL:VOL3 |
如果在Library列显示system,那么asm_diskstring没有设备--,ASMLIB不能用于访问磁盘。ASMLIB 需要通过磁盘符ORCL:来访问磁盘。检查asm_diskstring是否设置为ORCL:或NULL:
1 2 3 4 5 6 | SQL> SELECT LIBRARY, PATH FROM V$ASM_DISK; LIBRARY PATH -------------- ------------------------------------------------- System /dev/oracleasm/disks/DATA1D1 System /dev/oracleasm/disks/DATA1D2 System /dev/oracleasm/disks/DATA1D3 |
7.查看ASM alert log中是否有以下错误信息:
1 | ORA-15186: ASMLIB error function = [asm_open], error = [1],mesg = [Operation not permitted] |
这个消息通常意味着在/etc/init.d/oracleasm configure操作时ASMLIB配置权限不正确
迁移到ASMLIB
在许多情况下可能需要将一个"member"ASM裸磁盘转换为一个ASMLIB磁盘。例如,当安装ASMLIB后需 要执行。相反,如果需要卸载ASMLIB,可以将一个ASMLIB磁盘转换为一个标准的ASM磁盘。所有这种操 作不会损坏磁盘上的数据。然而,在转换之前必须将磁盘组dismount。
这种转换不会损坏数据因为磁盘上的结构和磁盘打开ASM所读取的信息。ASM读取磁盘头并且识别它属 于那个磁盘组。当一个磁盘被增加到一个磁盘组时,ASM将对磁盘写入一些信息。两个重要的条目是 磁盘标记与ASMLIB标签。所有ASM磁盘有一个标记ORCLSDISK印记在磁盘上面。如果标记已经存在,那 么磁盘可以当前被使用或者被ASM格式化了。这个标记可以由ASM或ASMLIB所创建。例如,当ASM在创 建磁盘组时使用一个磁盘作为一个裸设备时,ASM会自动增加这个标记。相反,当通过ASMLIB命 令/etc/init.d/oracleasm createdisk命令时磁盘会增加ASMLIB标记。不管使用那种工具创建标记, 一旦标记被创建,磁盘就会被打上标签。
磁盘头的第二部分与ASMLIB相关,是ASMLIB标签。这是指派给ASMLIB用来标识磁盘的24个字符的字符 串。当通过ASMLIB的/etc/init.d/oracleasm createdisk命令来配置磁盘时,相关的标签会被写入设备。注意ASM会保存磁盘的内容,但写入这部分信息是留给ASMLIB。
下面是一个对ASM磁盘(不是ASMLIB)的一个简单dump,这个磁盘被加入一个磁盘。在磁盘头中的ASM磁 盘名为DATA_0003:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [root@db2 ~]# dd if=/dev/mapper/yb_data4 bs=128 count=1 | od -a 1+0 records in 1+0 records out 0000000 soh stx soh soh nul nul nul nul etx nul nul nul K eot [ l 128 bytes (128 B) copied0000020 N d ? nul nul nul nul nul nul nul nul nul nul nul nul nul , 0.000253206 s, 506 kB/s 0000040 O R C L D I S K nul nul nul nul nul nul nul nul 0000060 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul 0000100 nul nul sp vt etx nul soh etx D A T A _ 0 0 0 0000120 3 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul 0000140 nul nul nul nul nul nul nul nul D A T A nul nul nul nul 0000160 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul 0000200 [root@db2 ~]# |
下面例子使对使用/etc/init.d/oracleasm createdisk命令所创建的ASMLIB磁盘进行一个简单的dump 注意YB_DATA4被写入ORCLDISK标签中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [root@db2 ~]# oracleasm querydisk -v -p YB_DATA4 Disk "YB_DATA4" is a valid ASM disk /dev/sdn: LABEL="YB_DATA4" TYPE="oracleasm" /dev/sdae: LABEL="YB_DATA4" TYPE="oracleasm" /dev/mapper/yb_data4: LABEL="YB_DATA4" TYPE="oracleasm" [root@db2 ~]# dd if=/dev/mapper/yb_data4 bs=128 count=1 | od -a 1+0 records in 1+0 records out 128 bytes (128 B) copied, 0.000204442 s, 626 kB/s 0000000 soh stx soh soh nul nul nul nul etx nul nul nul K eot [ l 0000020 N d ? nul nul nul nul nul nul nul nul nul nul nul nul nul 0000040 O R C L D I S K Y B _ D A T A 4 0000060 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul 0000100 nul nul sp vt etx nul soh etx D A T A _ 0 0 0 0000120 3 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul 0000140 nul nul nul nul nul nul nul nul D A T A nul nul nul nul 0000160 nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul nul 0000200 |
在这个例子中,标记ORCLDISK与YB_DATA4被写入磁盘头。下面ASMLIB扫描磁盘时,它将查看标记 ORCLDISK与YB_DATA4,并使用YB_DATA创建一个ASMLIB磁盘到设备的映射。后续,ASM将通过ASMLIB驱 动来发现这个磁盘。如果磁盘最初没有通过ASMLIB管理,当ASM发现磁盘时,将通过ASM裸设备访问, 它将检测试没有ASMLIB标记存在。这就是为什么从ASMLIB访问迁移到裸设备来访问不存在问题的原因 。
使用ASMLIB与Multipath工具
多路径设备使用伪设备来生成虚拟子路径。在执行磁盘发现操作时,ASMLIB使用伪文 件/proc/partitions。这是一个Linux文件它记录了所有设备与之匹配的分区。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | [root@db2 ~]# cat /proc/partitions major minor #blocks name 11 0 1048575 sr0 11 1 1048575 sr1 8 0 1171062784 sda 8 1 204800 sda1 8 2 16777216 sda2 8 3 1154079744 sda3 8 64 629145600 sde 8 48 10485760 sdd 8 32 10485760 sdc 8 80 629145600 sdf 8 96 629145600 sdg 8 112 10485760 sdh 8 128 629145600 sdi 8 144 629145600 sdj 8 160 629145600 sdk 8 176 629145600 sdl 8 192 629145600 sdm 8 224 629145600 sdo 8 208 629145600 sdn 65 0 629145600 sdq 8 240 209715200 sdp 65 16 629145600 sdr 65 32 629145600 sds 65 48 10485760 sdt 65 64 10485760 sdu 65 80 629145600 sdv 65 96 629145600 sdw 65 112 629145600 sdx 65 128 10485760 sdy 65 144 629145600 sdz 65 160 629145600 sdaa 65 176 629145600 sdab 65 192 629145600 sdac 65 208 629145600 sdad 65 224 629145600 sdae 65 240 629145600 sdaf 66 0 209715200 sdag 66 16 629145600 sdah 66 32 629145600 sdai 66 48 629145600 sdaj 252 0 1154076672 dm-0 252 1 10485760 dm-1 252 2 10485760 dm-2 252 3 629145600 dm-3 252 4 629145600 dm-4 252 5 629145600 dm-5 252 6 10485760 dm-6 252 7 629145600 dm-7 252 8 629145600 dm-8 252 9 629145600 dm-9 252 10 629145600 dm-10 252 11 629145600 dm-11 252 12 629145600 dm-12 252 13 629145600 dm-13 252 14 209715200 dm-14 252 15 629145600 dm-15 252 16 629145600 dm-16 252 17 629145600 dm-17 |
为了让多路径正确工作,ASMLIB必须只能对伪设备操作。因此ASMLIB必须使用伪设备来进行修改。通 过修改/etc/sysconfig/oracleasm中的两个参数来进行配置:
.oracleasm_scanorder使用通用前缀指定ASMLIB扫描设备的顺序。
.oracleasm_scanexclude通过ASMLIB指定那个设备不被发现。
例如,使用IBM v7000与多路径配置ASMLIB进行如下设置:
ORACLEASM_SCANORDER="dm"
ORACLEASM_SCANEXCLUDE="sd"
在这个例子中,ASMLIB基于/dev/dm来扫描磁盘并且排除/dev/sd*的设备。下面 是/etc/sysconfig/oracleasm文件的一个配置例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | [root@db2 ~]# cat /etc/sysconfig/oracleasm # # This is a configuration file for automatic loading of the Oracle # Automatic Storage Management library kernel driver. It is generated # By running /etc/init.d/oracleasm configure. Please use that method # to modify this file # # ORACLEASM_ENABLED: 'true' means to load the driver on boot. ORACLEASM_ENABLED=true # ORACLEASM_UID: Default user owning the /dev/oracleasm mount point. ORACLEASM_UID=grid # ORACLEASM_GID: Default group owning the /dev/oracleasm mount point. ORACLEASM_GID=asmadmin # ORACLEASM_SCANBOOT: 'true' means scan for ASM disks on boot. ORACLEASM_SCANBOOT=true # ORACLEASM_SCANORDER: Matching patterns to order disk scanning ORACLEASM_SCANORDER="dm" # ORACLEASM_SCANEXCLUDE: Matching patterns to exclude disks from scan ORACLEASM_SCANEXCLUDE="sd" # ORACLEASM_USE_LOGICAL_BLOCK_SIZE: 'true' means use the logical block size # reported by the underlying disk instead of the physical. The default # is 'false' ORACLEASM_USE_LOGICAL_BLOCK_SIZE=false |
小结:
ASMLIB是Oracle 10g与11g中ASM功能的支持library。ASMLIB允许Oracle数据库更有效的使用ASM与访 问磁盘组。ASMLIB的目的,它是ASM的一个插件,提供了一种识别与访问块设备的替接口。另外, ASMLIB API能够让存储与操作系统厂商来提供存储相关的扩展功能。这些功能可能提供一些好处,比 如提高性能与增加完整性。但ASMLIB对于ASM不是必须使用的。