Oracle 11gR2 ASM磁盘组管理与新特性实践
在平常的工作中我们常常忽视了对ASM实例的管理、维护和特性的了解,这篇文章是根据参考文章的指导来做的相关测试与练习,熟悉这些特性和功能能够帮助我们日常更好的完成ASM方面的工作。
一.测试环境。
[grid@rhel2 ~]$ cat /etc/issue
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
Kernel \r on an \m
[grid@rhel2 ~]$ uname -a
Linux rhel2.localdomain 2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
[root@rhel2 bin]# ./crsctl query crs softwareversion
Oracle Clusterware version on node [rhel2] is [11.2.0.2.0]
二.磁盘组兼容性属性。
1.设置磁盘组兼容性属性:
SQL> CREATE DISKGROUP data EXTERNAL REDUNDANCY DISK '/dev/raw/raw8'
2 ATTRIBUTE 'compatible.rdbms' = '10.1', 'compatible.asm' = '11.2', 'compatible.advm' ='11.2';
Diskgroup created.
要想使用11gR2的新功能ASM卷和文件系统,必须设置磁盘组的compatible.advm属性为11.2(由于ADVM是11gR2的新功能,所以compatible.advm只能设置为11.2),对应的compatible.asm属性也必须设置为11.2,否者将收到如下报错:
SQL> CREATE DISKGROUP data DISK '/dev/raw/raw8'
2 ATTRIBUTE 'compatible.rdbms' = '10.1', 'compatible.asm' = '11.1', 'compatible.advm' ='11.2';
CREATE DISKGROUP data DISK '/dev/raw/raw8'
*
ERROR at line 1:
ORA-15018: diskgroup cannot be created
ORA-15493: target ADVM compatibility (11.2.0.0.0) exceeds ASM compatibility (11.1.0.0.0)
compatible.advm只能设置为11.2:
SQL> CREATE DISKGROUP data EXTERNAL REDUNDANCY DISK '/dev/raw/raw8'
2 ATTRIBUTE 'compatible.rdbms' = '10.1','compatible.advm' ='11.1';
CREATE DISKGROUP data EXTERNAL REDUNDANCY DISK '/dev/raw/raw8'
*
ERROR at line 1:
ORA-15018: diskgroup cannot be created
ORA-15238: 11.1 is not a valid value for attribute compatible.advm
ORA-15494: compatible.advm must be 11.2.0.0.0 or higher
下面是对COMPATIBLE.ASM和COMPATIBLE.RDBMS含义的解释:
COMPATIBLE.ASM - The minimum version of the ASM software that can access the disk group. In 11g, the default setting is 10.1.
COMPATIBLE.RDBMS - The minimum COMPATIBLE database initialization parameter setting for any database instance that uses the disk group. In 11g, the default setting is 10.1.
使用ASMCA工具创建的磁盘组,compatible.asm默认值为11.2.0.0.0,compatible.rdbms默认值为10.1.0.0.0,compatible.advm为空。
2.修改磁盘组兼容性属性:
SQL> ALTER DISKGROUP data SET ATTRIBUTE 'compatible.rdbms' = '11.1';
Diskgroup altered.
磁盘组的属性只能增大,不能减小,如果增大过程出现错误,那么只能通过重建磁盘组来调整兼容性属性值。
3.查看磁盘组当前兼容性属性:
SQL> set linesize 200
SQL> col name format a10
SQL> col compatibility format a30
SQL> col DATABASE_COMPATIBILITY format a30
SQL> select group_number,name,compatibility,database_compatibility from v$asm_diskgroup where name='DATA';
GROUP_NUMBER NAME COMPATIBILITY DATABASE_COMPATIBILITY
------------ ---------- ------------------------------ ------------------------------
2 DATA 11.2.0.0.0 11.1.0.0.0
SQL> col name format a30
SQL> col value format a30
SQL> select name,value from v$asm_attribute where group_number=2 and name like 'compatible.%';
NAME VALUE
------------------------------ ------------------------------
compatible.asm 11.2.0.0.0
compatible.rdbms 11.1
compatible.advm 11.2.0.0.0
三.快速镜像重新同步功能。
在一个故障组短暂的磁盘失败期间,ASM记录改变区间的轨迹,以便在磁盘恢复正常后能够快速的同步改变的区间,而不是将整个磁盘的数据重新覆盖一遍,这能够大幅度的提高数据重新同步的过程。
该功能要求磁盘组的兼容性属性必须设置为11.1或者更高。
另外,该功能只对Normal和High冗余级别的磁盘组有用,因为External冗余级别的磁盘脱机会导致写失败。
SQL> CREATE DISKGROUP DATA NORMAL REDUNDANCY
2 FAILGROUP A
3 disk '/dev/raw/raw8' name data01
4 FAILGROUP B
5 disk '/dev/raw/raw9' name data02
6 ATTRIBUTE
7 'compatible.rdbms'='11.2',
8 'compatible.asm'='11.2',
9 'compatible.advm'='11.2';
Diskgroup created.
SQL> col name format a30
SQL> col value format a30
SQL> set linesize 200
SQL> select name,value from v$asm_attribute where name like 'compatible.%' and group_number=(
2 select group_number from v$asm_diskgroup where name='DATA');
NAME VALUE
------------------------------ ------------------------------
compatible.asm 11.2.0.0.0
compatible.rdbms 11.2.0.0.0
compatible.advm 11.2.0.0.0
磁盘默认的可脱机时间为3.6小时,可以通过修改磁盘组的disk_repair_time属性来调整这个值(H或者h表示小时,M或者m表示分钟):
SQL> select name,value from v$asm_attribute where name='disk_repair_time' and group_number=(
2 select group_number from v$asm_diskgroup where name='DATA');
NAME VALUE
------------------------------ ------------------------------
disk_repair_time 3.6h
SQL> alter diskgroup data set attribute 'disk_repair_time'='4.5h';
Diskgroup altered.
SQL> select name,value from v$asm_attribute where name='disk_repair_time' and group_number=(
2 select group_number from v$asm_diskgroup where name='DATA');
NAME VALUE
------------------------------ ------------------------------
disk_repair_time 4.5h
另外还可以使用ALTER DISKGROUP的DROP AFTER子句来覆盖磁盘组的disk_repair_time属性:
SQL> select name,group_number from v$asm_diskgroup where name='DATA';
NAME GROUP_NUMBER
------------------------------ ------------
DATA 2
SQL>
SQL> select group_number,name,state from v$asm_disk where group_number=2;
GROUP_NUMBER NAME STATE
------------ ------------------------------ ----------------
2 DATA02 NORMAL
2 DATA01 NORMAL
SQL> alter diskgroup data offline disk data02;
Diskgroup altered.
SQL> alter diskgroup data online disk data02;
Diskgroup altered.
SQL> alter diskgroup data offline disk data02 drop after 20m;
Diskgroup altered.
SQL> alter diskgroup data online disk data02;
Diskgroup altered.
四.SYSASM权限和OSASM(asmadmin)系统组。
为了使管理更加有针对性,Oracle 11gR2将管理权限进行细化,管理ASM的操作系统组叫做OSASM(asmadmin),凡是属于该组的用户都可以以sysasm的身份登录ASM实例。sysasm权限是管理ASM的最高权限,可以执行所有的ASM实例管理操作;另外还保留了sysdba权限,被赋予该权限的ASM用户只能执行普通的管理操作。SYSASM、SYSDBA是ASM实例用户具有的权限,asmadmin是操作系统组。
[grid@rhel2 ~]$ id grid
uid=1100(grid) gid=1000(oinstall) groups=1000(oinstall),1100(asmadmin),1300(asmdba),1301(asmoper)
[grid@rhel2 ~]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.2.0 Production on Wed Jul 10 06:24:31 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options
SQL> create user asm_check identified by asm_check;
User created.
SQL> grant sysasm to asm_check;
Grant succeeded.
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options
[grid@rhel2 ~]$ sqlplus asm_check/asm_check as sysasm
SQL*Plus: Release 11.2.0.2.0 Production on Wed Jul 10 06:25:34 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options
SQL> show user
USER is "SYS"
五.AU_SIZE大小设置。
对于磁盘组来说,除了上面讲到了compatible.*和disk_repair_time属性外,还有一个重要的属性au_size。该属性是设置磁盘组的分配单元大小,可配置的范围包括:1、2、4、8、16、32、64MB。ASM文件也是以区间的形式存储在ASM磁盘组中,在10g每个区间直接映射到AU,从11g开始区间能够映射到1个或多个AU。
当磁盘组兼容性属性设置为11.1或者更高,区间大小将自动增长,在11.1的版本,前20000个区间匹配AU大小,接下来的20000个区间匹配8个AU大小,大于40000的区间匹配64个AU大小,在11.2,这个增长比例从1:8:64变成了1:4:16。
执行以下的命令使用CREATE DISKGROUP语句的ATTRIBUTE子句控制AU的大小:
SQL> CREATE DISKGROUP disk_group_2
2 EXTERNAL REDUNDANCY
3 DISK '/dev/raw/raw10'
4 ATTRIBUTE 'compatible.rdbms'='11.1','compatible.asm'='11.1','au_size' = '32M';
Diskgroup created.
如果au_size设置较大,需要和compatible.rdbms,compatible.asm两个属性一起设置。
可扩展的区间大小和大AU的组合能够增加非常大的数据库的IO性能。
AU_SIZE只能在创建磁盘组的时候设置,之后只能查看不能调整。
六.新的ASMCMD命令及选项。
11g对ASMCMD工具也做了很多的增强。
1.[grid@rhel2 ~]$ asmcmd -p
ASMCMD [+] >
-p参数可以在提示符中显示ASM的当前全路径。
2.ASMCMD [+] >help lsdg
help [command]将显示命令的详细帮助信息。
3.lsdsk命令从V$ASM_DISK_STAT和V$ASM_DISK视图列出ASM磁盘信息。下面是该命令的用法:
lsdsk [-kptgMI][-G diskgroup ] [--suppressheader] [ --member|--candidate] [--discovery][--statistics][pattern]
ASMCMD [+] > lsdsk
Path
/dev/raw/raw1
/dev/raw/raw10
/dev/raw/raw11
/dev/raw/raw2
/dev/raw/raw3
/dev/raw/raw4
/dev/raw/raw5
/dev/raw/raw6
/dev/raw/raw7
/dev/raw/raw8
/dev/raw/raw9
ASMCMD [+] > lsdsk -k
Total_MB Free_MB OS_MB Name Failgroup Library Label UDID Product Redund Path
1024 746 1024 OCRVDISK_0000 OCRVDISK_0000 System UNKNOWN /dev/raw/raw1
5120 5062 5120 DISK_GROUP_2_0000 DISK_GROUP_2_0000 System UNKNOWN /dev/raw/raw10
5120 4986 5120 OCR_DATA2_0000 OCR_DATA2_0000 System UNKNOWN /dev/raw/raw11
1024 749 1024 OCRVDISK_0001 OCRVDISK_0001 System UNKNOWN /dev/raw/raw2
1024 747 1024 OCRVDISK_0002 OCRVDISK_0002 System UNKNOWN /dev/raw/raw3
3072 173 5120 DATA1_0000 DATA1_0000 System UNKNOWN /dev/raw/raw4
4096 444 5120 DATA1_0001 DATA1_0001 System UNKNOWN /dev/raw/raw5
4096 378 5120 DATA1_0002 DATA1_0002 System UNKNOWN /dev/raw/raw6
4096 385 5120 DATA1_0003 DATA1_0003 System UNKNOWN /dev/raw/raw7
5120 5067 5120 DATA01 A System UNKNOWN /dev/raw/raw8
5120 5067 5120 DATA02 B System UNKNOWN /dev/raw/raw9
ASMCMD [+] > lsdsk -p
Group_Num Disk_Num Incarn Mount_Stat Header_Stat Mode_Stat State Path
4 0 3915930866 CACHED MEMBER ONLINE NORMAL /dev/raw/raw1
3 0 3915930863 CACHED MEMBER ONLINE NORMAL /dev/raw/raw10
5 0 3915930867 CACHED MEMBER ONLINE NORMAL /dev/raw/raw11
4 1 3915930865 CACHED MEMBER ONLINE NORMAL /dev/raw/raw2
4 2 3915930864 CACHED MEMBER ONLINE NORMAL /dev/raw/raw3
1 0 3915930860 CACHED MEMBER ONLINE NORMAL /dev/raw/raw4
1 1 3915930859 CACHED MEMBER ONLINE NORMAL /dev/raw/raw5
1 2 3915930858 CACHED MEMBER ONLINE NORMAL /dev/raw/raw6
1 3 3915930857 CACHED MEMBER ONLINE NORMAL /dev/raw/raw7
2 0 3915930862 CACHED MEMBER ONLINE NORMAL /dev/raw/raw8
2 1 3915930861 CACHED MEMBER ONLINE NORMAL /dev/raw/raw9
ASMCMD [+] > lsdsk -t
Create_Date Mount_Date Repair_Timer Path
2011-12-08 15:28:48 2013-07-14 00:23:34 0 /dev/raw/raw1
2013-07-10 06:51:58 2013-07-14 00:23:33 0 /dev/raw/raw10
2011-12-28 18:57:13 2013-07-14 00:23:35 0 /dev/raw/raw11
2011-12-08 15:28:48 2013-07-14 00:23:34 0 /dev/raw/raw2
2011-12-08 15:28:48 2013-07-14 00:23:34 0 /dev/raw/raw3
2011-12-08 19:44:34 2013-07-14 00:23:32 0 /dev/raw/raw4
2011-12-08 19:44:34 2013-07-14 00:23:32 0 /dev/raw/raw5
2011-12-08 19:44:34 2013-07-14 00:23:32 0 /dev/raw/raw6
2011-12-08 19:44:34 2013-07-14 00:23:32 0 /dev/raw/raw7
2013-07-10 06:08:09 2013-07-14 00:23:33 0 /dev/raw/raw8
2013-07-10 06:08:09 2013-07-14 00:23:33 0 /dev/raw/raw9
这里顺便想提一下,V$ASM_DISK和V$ASM_DISK_STAT两个视图之间的区别在于查询V$ASM_DISK视图每次都会扫描磁盘头获取相关信息,而查询V$ASM_DISK_STAT视图相关信息是从内存中获取,这两个视图之间是有时间差,所以比较两个视图之间的数据差异可以获得ASM磁盘的IO性能等指标。其它的视图也有类似功能。
4.可以使用cp命令在ASM和本地、远程操作系统文件系统之间直接拷贝数据。下面是该命令的用法:
cp [-i][-f][connect_str:]src_file [connect_str:]tgt_file
ASMCMD [+data1/orcl/datafile] > cp USERS.276.816871609 /tmp/users01.dbf
copying +data1/orcl/datafile/USERS.276.816871609 -> /tmp/users01.dbf
ASMCMD [+data1/orcl/datafile] > cp /tmp/users01.dbf +DATA/users01.dbf
copying /tmp/users01.dbf -> +DATA/users01.dbf
cp只能拷贝Oracle自身的文件类型,例如:数据文件、日志文件等。
ASMCMD [+data1/orcl/datafile] > cd +DATA
ASMCMD [+DATA] > ls
ASM/
rhel-cluster/
users01.dbf
ASMCMD [+DATA] > ls -l
Type Redund Striped Time Sys Name
Y ASM/
Y rhel-cluster/
N users01.dbf => +DATA/ASM/DATAFILE/users01.dbf.256.820716625
有关ASM和文件系统之间的数据拷贝还可以参考文章:《使用RMAN在ASM和文件系统之间拷贝数据 》:http://blog.itpub.net/23135684/viewspace-775905/。
5.md_backup命令针对一个或更多磁盘组创建元数据拷贝,下面是该命令的用法:
md_backup backup_file [-G diskgroup [,diskgroup,...]]
结果文件包含需要重建ASM磁盘的所有元数据。
ASMCMD [+data1/orcl] > md_backup /tmp/backup.txt -G data
Disk group metadata to be backed up: DATA
Current alias directory path: rhel-cluster/ASMPARAMETERFILE
Current alias directory path: ASM
Current alias directory path: rhel-cluster
Current alias directory path: ASM/DATAFILE
6.md_restore命令允许从使用md_backup命令创建的元数据中还原磁盘组,下面是该命令的用法:
md_restore backup_file [--silent][--full|--nodg|--newdg -o 'old_diskgroup:new_diskgroup [,...]'][-S sql_script_file] [-G 'diskgroup [,diskgroup...]']
ASMCMD [+] > md_restore /tmp/backup.txt --full -G data
Current Diskgroup metadata being restored: DATA
Diskgroup DATA created!
System template BACKUPSET modified!
System template FLASHFILE modified!
System template CHANGETRACKING modified!
System template TEMPFILE modified!
System template ONLINELOG modified!
System template FLASHBACK modified!
System template CONTROLFILE modified!
System template ASMPARAMETERFILE modified!
System template DATAGUARDCONFIG modified!
System template DATAFILE modified!
System template OCRFILE modified!
System template XTRANSPORT modified!
System template PARAMETERFILE modified!
System template DUMPSET modified!
System template ARCHIVELOG modified!
System template AUTOBACKUP modified!
Directory +DATA/rhel-cluster re-created!
Directory +DATA/ASM re-created!
Directory +DATA/rhel-cluster/ASMPARAMETERFILE re-created!
Directory +DATA/ASM/DATAFILE re-created!
恢复磁盘组元数据信息磁盘组不能处于MOUNT状态,md_restore命令只恢复元数据信息,但磁盘组的数据是无法恢复的。
7.remap命令修复磁盘一个范围的物理块,不验证每个块的内容,只有读错误的块能被修复,下面是该命令的用法:
remap diskgroup disk block_range
ASMCMD [+] > remap data data01 1000-2000
七.失败组优先读。
在Oracle 10g,ASM一直读镜像区间设置的主拷贝,当两个节点和两个故障组位于相同的物理位置是没问题的,但是对于扩展集群的效率很低,常常引起不必要的网络传输。
从Oracle 11g开始,允许每个节点定义一个优先的故障组;允许扩展集群中的节点优先访问本地故障组。
配置磁盘组的优先读故障组要求兼容性属性必须设置为11.1或者更高。一旦兼容性选项正确,针对每个节点,ASM_PREFERRED_READ_FAILURE_GROUPS参数设置优先故障组。
SQL> select group_number,name,failgroup from v$asm_disk where group_number=2;
GROUP_NUMBER NAME FAILGROUP
------------ ------------------------------ ------------------------------
2 DATA02 B
2 DATA01 A
SQL> show parameter asm_preferred_read_failure_groups
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
asm_preferred_read_failure_groups string OCRVDISK.OCRVDISK_0001
SQL> alter system set asm_preferred_read_failure_groups='OCRVDISK.OCRVDISK_0001','DATA.DATA01' sid='+ASM1';
System altered.
SQL> alter system set asm_preferred_read_failure_groups='OCRVDISK.OCRVDISK_0001','DATA.DATA02' sid='+ASM2';
System altered.
SQL> show parameter asm_preferred_read_failure_groups
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
asm_preferred_read_failure_groups string OCRVDISK.OCRVDISK_0001, DATA.D
ATA02
八.快速平衡。
"ALTER DISKGROUP ... MOUNT"语句允许磁盘组在restricted模式加载。
SQL> alter diskgroup data dismount;
Diskgroup altered.
SQL> alter diskgroup data mount restricted;
Diskgroup altered.
SQL> alter diskgroup data dismount;
Diskgroup altered.
SQL> alter diskgroup data mount;
Diskgroup altered.
在RAC环境,磁盘组在RESTRICTED模式加载只能被单一实例访问,restricted磁盘组对于任何ASM客户端都是不活动的,即使在加载磁盘组的节点也是如此。
使用RESTRICTECD模式能提升RAC环境下rebalance操作的性能,这样能消除ASM实例之间锁和解锁区间映射消息的传递,一旦rebalance操作完成,应该卸载磁盘组,然后再以Normal模式(默认)加载。
九.磁盘组维护增强。
CRETAE DISKGROUP和ALTER DISKGROUP命令包含新的ATTRIBUTE子句(compatible,disk_repair_time,au_size)。
ALTER DISKGROUP命令的CHECK子句被简化,只包含两个选项,NOREPAIR和REPAIR,NOREPAIR是默认选项。错误概要被显示,完整的错误消息将写入告警日志。
ALTER DISKGROUP data CHECK; -- 类似NOREPAIR
ALTER DISKGROUP data CHECK NOREPAIR;
ALTER DISKGROUP data CHECK REPAIR;
ALTER DISKGROUP命令包含ONLINE和OFFLINE子句,因此磁盘能脱机修复,之后再联机。
-- 个别磁盘
ALTER DISKGROUP data OFFLINE DISK 'disk_0000','disk_0001';
ALTER DISKGROUP data ONLINE DISK 'disk_0000','disk_0001';
-- 故障组
ALTER DISKGROUP data OFFLINE DISKS IN FAILGROUP 'fg_0000';
ALTER DISKGROUP data ONLINE DISKS IN FAILGROUP 'fg_0000';
-- 使磁盘组中的所有磁盘在线
ALTER DISKGROUP data ONLINE ALL;
磁盘组不能通过ASM被加载,可以使用DROP DISKGROUP命令的FORCE关键字DROP磁盘组。
DROP DISKGROUP data FORCE;
对于以上谈到的众多特性而言,大部分功能都需要将磁盘组的兼容性属性设置为11.1或者更高;一部分特性都是在Normal和High冗余级别的磁盘组才具有的,例如:快速镜像重新同步功能,失败组优先读功能等;对于日常工作中最长用到的应该是AU_SIZE大小设置,并需要了解它和区间之间的关系。