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大小设置,并需要了解它和区间之间的关系。

如何修改ASM的sys密码

如何将ASM中的数据文件复制到操作系统中

Oracle 11g RAC ASM磁盘全部丢失后的恢复

Oracle 11g从入门到精通 PDF+光盘源代码

RHEL6 ASM方式安装Oracle 11g R2

Oracle 10g 手工创建ASM数据库

Ubuntu 12.04(amd64)安装完Oracle 11gR2后各种问题解决方法

如何修改Oracle 10g ASM的sys密码

相关内容