ASM 管理篇

靜以致遠√團團發表於2014-08-01

1asm_diskstring 引數


該引數用來指定asm磁碟的搜尋模式,簡單的理解就是控制ASM檢索磁碟的規則

指定asm_diskstring的值為’ORCL:ASM*’

SQL> alter system set asm_diskstring='ORCL:ASM*' scope=both;

System altered.

 

SQL> show parameter asm_diskstring

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

asm_diskstring                       string      ORCL:ASM*

 

SQL> col NAME for a10

SQL> col PATH for a15

SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,TOTAL_MB,FREE_MB from v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER NAME       PATH              TOTAL_MB    FREE_MB

------------ ----------- ---------- --------------- ---------- ----------

           1           0 ASM_DISK_1 ORCL:ASM_DISK_1       8189       7372

           1           1 ASM_DISK_2 ORCL:ASM_DISK_2       8189       7373

           1           2 ASM_DISK_3 ORCL:ASM_DISK_3       8189       7370

/*需要注意的是,在訪問v$asm_disk檢視時,會檢索所以磁碟,而在訪問v$asm_disk_stat檢視時不需要檢索磁碟,在磁碟沒有更新的情況下,後者更加“廉價”*/

 

asm_diskstring的值設定的必須是ASM組中磁碟當前例項所能檢索到的值,其他值將無法設定

SQL> alter system set asm_diskstring='ORCL:ASM_abc' scope=both;

alter system set asm_diskstring='ORCL:ASM_abc' scope=both

*

ERROR at line 1:

ORA-02097: parameter cannot be modified because specified value is invalid

ORA-15014: location 'ORCL:ASM_DISK_1' is not in the discovery set


2、磁碟管理


新增刪除硬碟

首先介紹一下幾個概念

a)、ASM提供了3種冗餘方法

external redundancy 表示Oracle不幫你管理映象,功能由外部儲存系統實現
normal redundancy (預設方式)表示Oracle提供2路映象來保護資料。 
high redundancy 表示Oracle提供3路映象來保護資料。

 

b)、ASM failure group:

Oracle透過failure group來提供資料的高可用性。ASM使用的映象演算法並不是映象整個disk,而是作extent級的映象。所以很明顯如果為各個failure group使用不同容量的disk是不明智的,因為這樣在Oracle分配下一個extent的時候可能就會出現問題。在normal redundancy模式下,ASM環境中每分配一個extent都會有一個primary copy和一個second copyASM的演算法保證了second copyprimary copy一定是在不同的failure group中,這就是failure group的意義。透過這個演算法,ASM保證了即使一個failure group中的所有disk都損壞了,資料也是毫髮無傷的。

    Oracle在分配extent的時候,所有failure group中的這個將擁有相同資料的extent稱為一個extent set,當Oracle將資料寫入檔案的時候,primary copy可能在任何一個failure group中,而second copy則在另外的failure group中,當Oracle讀取資料的時候,除非是primary copy不可用,否則將優先從primary copy中讀取資料,透過這種寫入無序,讀取有序的演算法,Oracle保證了資料讀取儘量分佈在多個disk中。

以下測試僅為了測試fileglure group,不是正常刪除硬碟的方式

現在我的環境中group1中有兩塊硬碟,冗餘方式是預設的normal redundancy,資料庫orcle安裝在該disk_grup

SQL> col FAILGROUP for a15

SQL> col name for a10

SQL> col path for a15

SQL> select GROUP_NUMBER,DISK_NUMBER,FAILGROUP,FREE_MB,NAME,PATH from v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER FAILGROUP          FREE_MB NAME       PATH

------------ ----------- --------------- ---------- ---------- ---------------

           1           0 ASM_DISK_1            7001 ASM_DISK_1 ORCL:ASM_DISK_1

           1           1 ASM_DISK_2            7001 ASM_DISK_2 ORCL:ASM_DISK_2

為了模擬損壞,我直接在vmware中將第二塊硬碟刪除,兩塊8g硬碟現在僅剩一塊

 

正常啟動系統,啟動css服務後,scandiskasm會自動將損壞的硬碟清理掉

[oracle@orclasm ~]$ oracleasm scandisks

Reloading disk partitions: done

Cleaning any stale ASM disks...

Scanning system for ASM disks...

[oracle@orclasm ~]$ oracleasm listdisks

ASM_DISK_1

此時對資料庫無影響,也就是說兩塊filedisk中刪除任何塊,資料庫均可正常執行

[oracle@orclasm ~]$ export ORACLE_SID=orcl

[oracle@orclasm ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Aug 1 10:42:51 2014

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to an idle instance.

 

SQL> startup

ORACLE instance started.

 

Total System Global Area  167772160 bytes

Fixed Size                  1218316 bytes

Variable Size              79694068 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

新增硬碟

    新增兩塊新的硬碟到系統,方便測試

     

[root@orclasm ~]# fdisk /dev/sdc

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-1044, default 1): 

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044): 

Using default value 1044

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[root@orclasm ~]# fdisk /dev/sdd

[root@orclasm ~]# oracleasm createdisk asm_disk_2 /dev/sdc1

Writing disk header: done

Instantiating disk: done

[root@orclasm ~]# oracleasm createdisk asm_disk_3 /dev/sdd1

Writing disk header: done

Instantiating disk: done

 

[root@orclasm ~]# oracleasm scandisks

Reloading disk partitions: done

Cleaning any stale ASM disks...

Scanning system for ASM disks...

[root@orclasm ~]# oracleasm listdisks

ASM_DISK_1

ASM_DISK_2

ASM_DISK_3

 

[oracle@orclasm ~]$ export ORACLE_SID=+ASM

[oracle@orclasm ~]$ sqlplus / as sysdba

 

指定failgroup新增硬碟

SQL> alter diskgroup data add failgroup asm_disk_f_2 disk 'ORCL:ASM_DISK_2' name asm_disk_2;

Diskgroup altered.

 

在不指定failgroup的情況先,預設的disk name將是failgroup

SQL> alter diskgroup data add disk 'ORCL:ASM_DISK_3' name asm_disk_3;

Diskgroup altered

 

當加入一塊磁碟時,ASM從磁碟組內已有的各塊磁碟上讀出部分AU寫入到新加入的磁碟中。以實現各盤資料量均衡。

 

SQL> select count(*) from v$asm_operation;

 

  COUNT(*)

----------

         1

SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,FREE_MB,TOTAL_MB from v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER NAME         PATH               FREE_MB   TOTAL_MB

------------ ----------- ------------ --------------- ---------- ----------

           1           0 ASM_DISK_1   ORCL:ASM_DISK_1       7371       8189

           1           1 ASM_DISK_2   ORCL:ASM_DISK_2       7372       8189

           1           2 ASM_DISK_3   ORCL:ASM_DISK_3       7372       8189

刪除硬碟 

當刪除一塊磁碟時,ASM從即將刪除的磁碟上讀出所有的AU,然後平均寫入到組內其它的磁碟上。以實現各盤資料量均衡。 

 

SQL> alter diskgroup data drop disk asm_disk_3;

Diskgroup altered.

 

此時ASM會自動將被刪除的硬碟中的資料寫入其他兩組磁碟中

SQL> select count(*) from v$asm_operation;

  COUNT(*)

----------

         1

SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,FREE_MB,TOTAL_MB from v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER NAME         PATH               FREE_MB   TOTAL_MB

------------ ----------- ------------ --------------- ---------- ----------

           1           0 ASM_DISK_1   ORCL:ASM_DISK_1       7371       8189

           1           1 ASM_DISK_2   ORCL:ASM_DISK_2       7372       8189

           1           2 ASM_DISK_3   ORCL:ASM_DISK_3       7422       8189

 

SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,FREE_MB,TOTAL_MB from v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER NAME         PATH               FREE_MB   TOTAL_MB

------------ ----------- ------------ --------------- ---------- ----------

           1           0 ASM_DISK_1   ORCL:ASM_DISK_1       7252       8189

           1           1 ASM_DISK_2   ORCL:ASM_DISK_2       7251       8189

           1           2 ASM_DISK_3   ORCL:ASM_DISK_3       7662       8189

SQL> select count(*) from v$asm_operation;

 

  COUNT(*)

----------

         0

 

SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,PATH,FREE_MB,TOTAL_MB from v$asm_disk;

 

GROUP_NUMBER DISK_NUMBER NAME         PATH               FREE_MB   TOTAL_MB

------------ ----------- ------------ --------------- ---------- ----------

           0           0              ORCL:ASM_DISK_3          0       8189

           1           0 ASM_DISK_1   ORCL:ASM_DISK_1       7001       8189

           1           1 ASM_DISK_2   ORCL:ASM_DISK_2       7001       8189

需要注意的是ASM為了保護磁碟的正常冗餘,如果因為刪除磁碟導致不滿足最少冗餘磁碟個數,該磁碟將等到有新的磁碟加入磁碟組,把資料轉移到新的磁碟上之後再進行刪除。

比如冗餘度為normal,至少需要兩塊硬碟,而我刪除了其中的一個,那麼ASM將等待新增一塊新的硬碟後,把被刪除的硬碟資料轉移到這塊新的硬碟上,再去刪除該硬碟。

新增磁碟組

create diskgroup diskgroup_name 

 redundancy 

failgroup failgroup_name disk 'disk_nmae' name asm_disk_name 

 

failgroup的個數的限制: 

HIGH---------- failgroup >= 3 

NORMAL---------- failgroup >= 2 

    EXTERNAL-------- failgroup == 0  (指定外部冗餘)
    此處使用的三塊硬碟(sdd1sde1sdf1)來做高度冗餘的一個磁碟組DATA2,硬碟新增方法跟上面相似

    [root@orclasm ~]# oracleasm createdisk asm_disk_3 /dev/sdd1

    Writing disk header: done

    Instantiating disk: done

    [root@orclasm ~]# oracleasm createdisk asm_disk_4 /dev/sde1

    Writing disk header: done

    Instantiating disk: done

    [root@orclasm ~]# oracleasm createdisk asm_disk_5 /dev/sdf1

    Writing disk header: done

    Instantiating disk: done

    [root@orclasm ~]# oracleasm scandisks

    Reloading disk partitions: done

    Cleaning any stale ASM disks...

    Scanning system for ASM disks...

    [root@orclasm ~]# oracleasm listdisks

    ASM_DISK_1

    ASM_DISK_2

    ASM_DISK_3

    ASM_DISK_4

    ASM_DISK_5

 

    SQL> select GROUP_NUMBER,NAME,PATH from v$asm_disk;

 

    GROUP_NUMBER NAME                           PATH

    ------------ ------------------------------ ---------------

               0                                ORCL:ASM_DISK_3

               0                                ORCL:ASM_DISK_4

               0                                ORCL:ASM_DISK_5

               1 DATA_ASM_DISK_2                ORCL:ASM_DISK_2

               1 DATA_ASM_DISK_1                ORCL:ASM_DISK_1

 

    SQL> create diskgroup data2

      2  high redundancy

      3  failgroup data2_fail_1 disk 'ORCL:ASM_DISK_3' name data2_asm_disk_1

      4  failgroup data2_fail_2 disk 'ORCL:ASM_DISK_4' name data2_asm_disk_2

      5  failgroup data2_fail_3 disk 'ORCL:ASM_DISK_5' name data2_asm_disk_3

      6  /

    Diskgroup created.

 

    SQL> select GROUP_NUMBER,NAME,FREE_MB,TOTAL_MB,STATE from v$asm_diskgroup;

 

    GROUP_NUMBER NAME          FREE_MB   TOTAL_MB STATE

    ------------ ---------- ---------- ---------- -----------

               1 DATA            14002      16378 MOUNTED

               2 DATA2           24414      24567 MOUNTED

 


解除安裝掛載磁碟組

SQL> alter diskgroup data2 dismount;

Diskgroup altered.

 

SQL> select GROUP_NUMBER,NAME,FREE_MB,TOTAL_MB,STATE from v$asm_diskgroup;

 

GROUP_NUMBER NAME          FREE_MB   TOTAL_MB STATE

------------ ---------- ---------- ---------- -----------

           1 DATA            14002      16378 MOUNTED

           0 DATA2               0          0 DISMOUNTED

 

SQL> alter diskgroup data2 mount;

Diskgroup altered.

/*或者使用alter diskgroup all mount; 掛載所以磁碟組*/

SQL> select GROUP_NUMBER,NAME,FREE_MB,TOTAL_MB,STATE from v$asm_diskgroup;

 

GROUP_NUMBER NAME          FREE_MB   TOTAL_MB STATE

------------ ---------- ---------- ---------- -----------

           1 DATA            14002      16378 MOUNTED

           2 DATA2           24414      24567 MOUNTED

刪除磁碟組

SQL> drop diskgroup data2;

Diskgroup dropped.

3、目錄管理

目錄概念 

A)表示根目錄 

B)、目錄不能遞迴建立 

C)、不能直接刪除非空目錄,需要先刪目錄下的內容,然後再刪上層目錄

目錄的操作

直接遞迴新增目錄將報錯

SQL> alter diskgroup data add directory '+data/test_dir1/test_dir2';

alter diskgroup data add directory '+data/test_dir1/test_dir2'

*

ERROR at line 1:

ORA-15032: not all alterations performed

ORA-15173: entry 'test_dir1' does not exist in directory '/'

 

SQL> alter diskgroup data add directory '+data/test_dir1';

Diskgroup altered.

 

SQL> alter diskgroup data add directory '+data/test_dir1/test_dir2';

Diskgroup altered.

 

刪除目錄

SQL> alter diskgroup data drop directory '+data/test_dir1/test_dir2';

Diskgroup altered.

 

SQL> alter diskgroup data drop directory '+data/test_dir1';

Diskgroup altered.

 

ASMCMD管理目錄

[oracle@orclasm ~]$ asmcmd

ASMCMD> help 

commands:

        --------

        cd

        du

        find

        help

        ls

        lsct

        lsdg

        mkalias

        mkdir

        pwd

        rm

        rmalias

ASMCMD> cd + //+ASM根目錄

ASMCMD> ls

DATA/

ASMCMD> mkdir +DATA/test_dir1  //建立目錄

ASMCMD> mkdir +DATA/test_dir1/test_dir2

ASMCMD> cd +DATA/test_dir1/

ASMCMD> ls

test_dir2/

ASMCMD> rm test_dir2   //刪除目錄

ASMCMD> ls

ASMCMD> cd +

ASMCMD> rm +DATA/test_dir1

ASMCMD> cd +DATA

ASMCMD> ls

ORCL/

 

建立刪除別名

ASMCMD> mkalias '+DATA/ORCL/datafile/SYSTEM.256.854421493' system.dbf

ASMCMD> rmalias system.dbf

/*注意別名建立保留在當前目錄,刪除時也要到當前目錄刪除*/

檔案管理

    ASM檔案概述

ASM檔案的命名不同於普通檔案的命名,它的檔名一般不直接指定,由ASM系統自己生成,並且其管理方式是OMF。如果人為指定,則檔案的管理方式就不再是OMF。 

  檔案的命名規則 

    1)、完全命名: 

格式:+diskgroup_name/database_name/filetype/file_name.xxx.xxxx 

作用:只能用於引用,不能在建立ASM檔案時指定。 

說明:xxx表示數字,是唯一的。 

例如:+dgdata/info/datafile/system.256.78684974 

 

2)、數字命名:

  格式:file_name.xxx.xxxx 

作用:只能用於引用,不能在建立ASM檔案時指定。 

說明:xxx表示數字,是唯一的。 

例如:system.256.78684974 

 

3)、不完全命名: 

  格式:+diskgroup_name 

作用:用於建立ASM檔案,在建立檔案時指定,由ASM 自動生成對應的檔名。 

說明:檔案是OMF。 

例如:

SQL> create tablespace test01 datafile '+data' size 10m;

Tablespace created.

SQL> select name,file# from v$datafile;

 

NAME                                                   FILE#

------------------------------------------------- ----------

+DATA/orcl/datafile/system.256.854421493                   1

+DATA/orcl/datafile/undotbs1.258.854421495                 2

+DATA/orcl/datafile/sysaux.257.854421493                   3

+DATA/orcl/datafile/users.259.854421495                    4

+DATA/orcl/datafile/test01.270.854505245                   5

 

4)、帶模板的不完全命名: 

格式:+diskgroup_name template_name) 

作用:用於建立ASM檔案,在建立檔案時指定,由ASM 自動生成對應的檔名。 

說明:檔案是OMF。 

例如:create tablespace test datafile +dgdata(my_template)’ size 100m; 

建立一個模板

 

[oracle@orclasm ~]$ export ORACLE_SID=+ASM

[oracle@orclasm ~]$ sqlplus / as sysdba

SQL> alter diskgroup data add template my_temp attributes(high fine);

Diskgroup altered.

/*alter diskgroup data drop template my_temp;用來刪除模板*/

[oracle@orclasm ~]$ export ORACLE_SID=orcl

[oracle@orclasm ~]$ sqlplus / as sysdba

 

SQL> create tablespace test02 datafile '+data(my_temp)' size 10m;

Tablespace created.

SQL> select name,file# from v$datafile;

 

NAME                                                    FILE#

-------------------------------------------------- ----------

+DATA/orcl/datafile/system.256.854421493                    1

+DATA/orcl/datafile/undotbs1.258.854421495                  2

+DATA/orcl/datafile/sysaux.257.854421493                    3

+DATA/orcl/datafile/users.259.854421495                     4

+DATA/orcl/datafile/test01.270.854505245                    5

+DATA/orcl/datafile/test02.271.854505671                    6

 


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

相關文章