Oracle 11gR2 ASM磁碟組管理與新特性實踐[1]

531968912發表於2017-05-22

    在平常的工作中我們常常忽視了對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大小設定,並需要了解它和區間之間的關係。

參考文章:

--end--

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2139713/,如需轉載,請註明出處,否則將追究法律責任。

相關文章