ASM 磁碟、目錄的管理

shilei1發表於2011-08-09


分類: ASM 相關特性 623人閱讀 評論(0) 舉報

--========================

-- ASM 磁碟、目錄的管理

--========================

 

    ASM磁碟是ASM體系結構的重要組成部分,ASM磁碟由ASM例項來定位、管理,本文主要講述ASM磁碟組、故障組等等。

    有關ASM例項及ASM資料庫的建立請參考:建立ASM例項及ASM資料庫

 

一、相關概念

    1.ASM 磁碟組

        ASM儲存管理除了ASM例項之外,最大的組成部分就是ASM磁碟組。一個ASM磁碟組由過多個ASM磁碟組成

        一個磁碟組內可以存放多個資料檔案,一個資料檔案僅僅只能位於一個磁碟組內,不能跨磁碟組

        多個資料庫可以共享相同的或多個磁碟組

        磁碟組的冗餘型別可以分為三類:標準冗餘,高度冗餘,外部冗餘

        對於已建立的磁碟組,不能夠更改其冗餘級別,如要更改,需要刪除該磁碟組後再重新建立

 

    2.ASM 磁碟 

        ASM磁碟透過標準的OS介面來訪問,由Oracle使用者來讀寫,在聚集的所有節點可以被訪問

        ASM磁碟在不同的節點可以使用不同的名字

        ASM磁碟可以使網路檔案系統

        ASM磁碟上的物件被冗餘保護

        每一個ASM磁碟的第塊用於定義磁碟的頭部資訊,ASM磁碟名字編號,建立的時間戳等

        ASM檔案會均勻分佈在一個ASM組內的各個磁碟中

 

    3.ASM 故障組

        一個磁碟組可以由兩個或多個故障組組成

        一個故障組由一個或多個ASM磁碟組成

        故障組提供了共享相同資源的冗餘,我們可以這樣來理解標準冗餘

            假定有磁碟組DG1,且建立了兩個故障組fgroup1,fgroup2,每個故障組由個ASM磁碟組成,則對標準冗餘而言,兩個故障組互為映象

            failgroup1  --&gt asmdiskA , asmdiskB

            failgroup2  --&gt asmdiskC , asmdiskD

            假定檔案datafileA大小為MB,則個extent均勻分佈到asmdiskA,asmdiskB,同樣asmdiskC,asmdiskD也包含該檔案的至個extent

            即只要有一個extent在故障組fgroup1中存在,必定有一個映象的extent存在於fgroup2中,反之亦然,兩個extent互為映象。

            當一個故障組中的某個磁碟損壞,假定為asmdiskA ,則asmdiskA中原來儲存的extent將會從failgroup2中複製到asmdiskB中。

            總之,故障組failgroup1failgroup2必定有相同的extent副本

        標準冗餘至少需要兩個故障組,高度冗餘則至少需要個故障組。事實上對於未明確指定故障組的情況下,一個標準冗餘至少需要兩個

            asm磁碟,而高度冗餘至少需要個asm磁碟

       

    4.分配單元

        ASM磁碟的最小粒度是分配單元,大小預設是M,也可設定為K進行細粒度訪問

        支援粗粒度和細粒度分配單元進行讀寫來實現裝載平衡和減少延遲

        ASM檔案由一些分配單元的集合組成

       

    5.ASM 檔案 

        Oracle自身而言,實際上與標準的檔案並沒有太多區別

        ASM檔案一般位於磁碟組內建立的子目錄內,磁碟組以加號開頭,相當於Linux系統的根目錄

            +DG1/oradb/datafile/system.258.346542

        ASM可以為控制檔案,資料檔案,聯機日誌檔案,引數檔案,歸檔日誌,備份等

            不支援trace檔案,可執行檔案,OCRVotingdisk等,注:Oracle 11g R2可支援

        使用extent maps來記錄檔案到磁碟的對映

 

    6.I/O分佈

        可以使用條帶化和映象來保護資料

        檔案被平均分佈在一個組內的所有磁碟中

        磁碟的新增與刪除,ASM會自動重新分配AU,因此也不存在碎片的問題

        I/O分批到不同的磁碟控制器提高了讀寫資料

       

    7.Rebalance

        ASM 檔案被均衡地分佈在一個磁碟組的所有磁碟中

        磁碟新增時,當前磁碟組載入的所有磁碟中共享的部分extent將會被移植到新的磁碟中,直到重新分佈完成才正常提供I/O均衡

        磁碟刪除或故障時,刪除磁碟或故障磁碟的extent將會被均勻的分佈到剩餘的磁碟中

        未使用force關鍵字drop磁碟操作,該磁碟上所有資料rebalance完畢後才被釋放.即完畢後磁碟離線,置磁碟頭部狀態為former

        總之,任意儲存性質改變(磁碟增加,刪除,故障)都將導致rebalance,且由asm自動完成,無需人工干預,在一個時間段通常會鎖定一個盤區

           

    8.ASM磁碟組的管理

        通常建議建立兩個磁碟組,一個用於儲存資料檔案,一個用於儲存閃回,備份恢復使用

        Flash Recovery Area 的大小取決於閃回內容需要保留的時間長短

        儘可能將資料區與閃回區使用不同的物理通道

        儘可能一次性mount所有需要用到的磁碟

        建議使用效能,磁碟大小相近的磁碟。假定兩個故障組FG1FG2各使用一塊磁碟,則FG1內的磁碟應保持與FG2內的磁碟大小相同,

            否則會以最小的磁碟空間作為可使用空間

   

    9.ASM磁碟組的管理方式

        SQLPlus

        OEM

        DBCA

        ASMCMD

 

二、ASM磁碟建立及管理  

   

    1.檢視ASM配置磁碟搜尋資訊

        SQL> show parameter instance_type

 

        NAME                                 TYPE        VALUE

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

        instance_type                        string      ASM

 

        SQL> show parameter asm_diskst

 

        NAME                                 TYPE        VALUE

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

        asm_diskstring                       string      /dev/oracleasm/disks/VOL*

 

    2.使用oracleasm建立磁碟

        [root@oradb ~]#  /etc/init.d/oracleasm createdisk VOL1 /dev/sdd1

        Marking disk "VOL1" as an ASM disk: [  OK  ]

        [root@oradb ~]#  /etc/init.d/oracleasm createdisk VOL2 /dev/sdd2

        Marking disk "VOL2" as an ASM disk: [  OK  ]

        [root@oradb ~]#  /etc/init.d/oracleasm createdisk VOL3 /dev/sde1

        Marking disk "VOL3" as an ASM disk: [  OK  ]

        [root@oradb ~]#  /etc/init.d/oracleasm createdisk VOL4 /dev/sde2

        Marking disk "VOL4" as an ASM disk: [  OK  ]

        [root@oradb ~]#  /etc/init.d/oracleasm listdisks

        VOL1

        VOL2

        VOL3

        VOL4

           

    3.建立磁碟組語法

   

            CREATE DISKGROUP diskgroup_name

              [ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ]

              [ FAILGROUP failgroup_name ]

              DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ] ...;

   

    4.建立磁碟組

   

        SQL> create diskgroup DG1 normal redundancy disk '/dev/oracleasm/disks/VOL1' name VOL1;

        create diskgroup DG1 normal redundancy disk '/dev/oracleasm/disks/VOL1' name VOL1

        *

        ERROR at line 1:

        ORA-15018: diskgroup cannot be created    --標準冗餘至少需要兩塊磁碟

        ORA-15072: command requires at least 2 failure groups, discovered only 1

 

        SQL> create diskgroup DG1 normal redundancy

          2  disk '/dev/oracleasm/disks/VOL1' name DG1_VOL1 ,'/dev/oracleasm/disks/VOL2' name DG1_VOL2;

 

        SQL> create diskgroup DG2 normal redundancy                            --使用標準冗餘建立磁碟組DG2

          2  failgroup FG1 disk '/dev/oracleasm/disks/VOL3' name DG2_FG1_VOL3

          3  failgroup FG2 disk '/dev/oracleasm/disks/VOL4' name DG2_FG2_VOL4;

 

        SQL> create diskgroup DG_ext external redundancy disk '/dev/oracleasm/disks/VOL10' name DG_ext_VOL10; --外部冗餘

 

        SQL> select group_number gno,name,state,type,total_mb,free_mb,   --檢視建立的磁碟組

          2  required_mirror_free_mb rmfmb,usable_file_mb ufmb

          3  from v$asm_diskgroup;

 

               GNO NAME            STATE       TYPE     TOTAL_MB    FREE_MB      RMFMB       UFMB

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

                 1 DG1             MOUNTED     NORMAL       3066       2964          0       1482

                 2 DG2             MOUNTED     NORMAL       3066       2964          0       1482

                 3 DG_EXT          MOUNTED     EXTERN        100         50          0         50 

 

        SQL> select group_number gno,name,failgroup fgno,state,total_mb,free_mb,header_status from v$asm_disk;

 

               GNO NAME            FGNO            STATE      TOTAL_MB    FREE_MB HEADER_STATU

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

                 2 DG2_FG2_VOL4    FG2             NORMAL         1537       1486 MEMBER

                 2 DG2_FG1_VOL3    FG1             NORMAL         1529       1478 MEMBER

                 1 DG1_VOL2        DG1_VOL2        NORMAL         1537       1486 MEMBER

                 1 DG1_VOL1        DG1_VOL1        NORMAL         1529       1478 MEMBER

                 3 DG_EXT_VOL10    DG_EXT_VOL10    NORMAL          100         50 MEMBER

 

    5.磁碟組新增故障組和成員

        --為非故障組新增成員

            SQL> alter diskgroup DG1 add disk '/dev/oracleasm/disks/VOL5' name DG1_VOL5; 

 

        --DG2新增一個故障組FG3及成員

            SQL> alter diskgroup DG2

              2  add failgroup FG3 disk '/dev/oracleasm/disks/VOL6' name DG2_FG3_VOL6;  --新增故障組及成員

 

        --DG2的個故障組各新增一個成員

            SQL> alter diskgroup DG2

              2  add failgroup FG1 disk '/dev/oracleasm/disks/VOL7'

              3  add failgroup FG2 disk '/dev/oracleasm/disks/VOL8'

              4  add failgroup FG3 disk '/dev/oracleasm/disks/VOL9';

 

    6.刪除磁碟組中的磁碟,故障組中的成員,磁碟組

 

        SQL> alter diskgroup DG1 drop disk DG1_VOL5;   --刪除磁碟組DG1中的磁碟VOL5

 

        SQL> alter diskgroup DG2 drop disk DG2_0003;  --刪除故障組中的單個成員

 

        SQL> alter diskgroup DG2 drop disks in failgroup FG3;  --刪除故障組及所有成員,注意此時為drop disks 複數形式

         

        SQL> alter diskgroup DG1 drop disk DG1_VOL4            --刪除磁碟組中的磁碟,同時新增故障組FG3

                add failgroup FG3 disk '/dev/oracleasm/disks/VOL9' name DG1_VOL11;

               

        SQL> drop diskgroup DG1;    --刪除磁碟組

       

    7.調整磁碟組的容量

        ----故障組FG3的容量將被調整到G,如果磁碟空間不足,則調整失敗

        SQL> alter diskgroup DG2  resize disks in failgroup FG3 size 10G;

   

    8.手動Rebalance

        SQL> alter diskgroup DG2 rebalance power 3 wait;

   

    9.磁碟組的載入與解除安裝及內部一致性檢查

   

        SQL> alter diskgroup all dismount;

        SQL> alter diskgroup DG2 mount;

        SQL> alter diskgroup DG2 check all;

   

    10.檢視磁碟組的partner

   

        SQL>  select name,state,type from v$asm_diskgroup where group_number=3;   --檢視磁碟組DG3的資訊        

 

        NAME            STATE       TYPE

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

        DG3             MOUNTED     NORMAL

                          

        SQL> select grp,disk,number_kfdpartner from x$kfdpartner where grp=3;

 

               GRP       DISK NUMBER_KFDPARTNER

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

                 3          0                 1        --磁碟組DG3使用了個磁碟,且冗餘度為標準冗餘

                 3          0                 2        --磁碟組的partner 為磁碟組,2

                 3          1                 0        --磁碟組的partner 為磁碟組,2

                 3          1                 2

                 3          2                 0        --磁碟組的partner 為磁碟組,1

                 3          2                 1

         

三、磁碟組中目錄、檔案的管理

    1.為磁碟組增加目錄

        SQL> alter diskgroup DG2 add directory '+DG2/datafile';                      --為磁碟組增加目錄

 

        SQL> alter diskgroup DG2 rename directory '+DG2/datafile' to '+DG2/dtfile';  --重新命名目錄

 

        SQL> alter diskgroup DG2 drop directory '+DG2/dtfile';                       --刪除目錄

   

        SQL> alter diskgroup DG2 add directory '+DG2/asmdb/datafile';   --為磁碟組增加目錄

        alter diskgroup DG2 add directory '+DG2/asmdb/datafile'

        *

        ERROR at line 1:

        ORA-15032: not all alterations performed

        ORA-15173: entry 'asmdb' does not exist in directory '/ '       --收到錯誤提示,asmdb目錄不存在,必須要先建立

 

        SQL> alter diskgroup DG2 add directory '+DG2/asmdb/';           --首先新增asmdb

 

        SQL> alter diskgroup DG2 add directory '+DG2/asmdb/datafile';   --再次新增目錄成功

 

    2.為檔案新增別名,重新命名別名

        SQL> alter diskgroup DG1 add alias '+DG1/asmdb/datafile/users.dbf'   --新增別名

          2  for '+DG1/asmdb/datafile/users.263.734885485' ;

 

        SQL> select name,group_number,file_number,alias_index,alias_directory,system_created

          2  from v$asm_alias where file_number=263;

     

        NAME                      GROUP_NUMBER FILE_NUMBER ALIAS_INDEX A S

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

        USERS.263.734885485                 1         263          215 N Y

        users.dbf                           1         263          216 N N

   

        SQL> alter diskgroup DG1 rename alias '+DG1/asmdb/datafile/users.dbf'   --重新命名一個別名

          2  to '+DG1/asmdb/datafile/users01.dbf';

 

        SQL> select name,group_number,file_number,alias_index,alias_directory,system_created

          2  from v$asm_alias where file_number=263;

     

        NAME                      GROUP_NUMBER FILE_NUMBER ALIAS_INDEX A S

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

        USERS.263.734885485                 1         263          215 N Y

        users01.dbf                         1         263          216 N N

 

    3.為檔案刪除別名

        SQL> alter diskgroup DG1 drop alias '+DG1/asmdb/datafile/users01.dbf';

 

四、TEMPLATE的管理

        TEMPLATE是一個模板,為資料庫中新增的檔案定義了預設分配單元大小,以及冗餘級別。對於不同型別的檔案,使用了不同的AUs以及

    不同的冗餘度。如對控制檔案採用高度冗餘,條帶使用精細化條帶(128kb),而引數檔案,資料檔案則採用標準冗餘,粗級別條帶(1MB)

    這個特性正是Oracle asm 管理不同於外部冗餘的特性,即可以基於檔案的不同屬性而使用不同級別的冗餘度和不同大小的條帶化分配單

    元。當然,我們可以根據不同的需求來修改該模板,使得建立新的檔案時根據需要來應用其冗餘和條帶花特性。系統管理人員能改變系統缺

    template, 但不能刪除該刪除,管理員能增加自己的template,然後在該模板上建立資料檔案。

   

    下面是預設情況下DG1中新增檔案所使用的預設的條帶化及其冗餘級別

        SQL> select * from v$asm_template where group_number=1;

                                                               

        GROUP_NUMBER ENTRY_NUMBER REDUND STRIPE S NAME

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

                   1            0 MIRROR COARSE Y PARAMETERFILE

                   1            1 MIRROR COARSE Y DUMPSET

                   1            2 HIGH   FINE   Y CONTROLFILE

                   1            3 MIRROR COARSE Y ARCHIVELOG

                   1            4 MIRROR FINE   Y ONLINELOG

                   1            5 MIRROR COARSE Y DATAFILE

                   1            6 MIRROR COARSE Y TEMPFILE

                   1            7 MIRROR COARSE Y BACKUPSET

                   1            8 MIRROR COARSE Y AUTOBACKUP

                   1            9 MIRROR COARSE Y XTRANSPORT

                   1           10 MIRROR COARSE Y CHANGETRACKING

                   1           11 MIRROR FINE   Y FLASHBACK

                   1           12 MIRROR COARSE Y DATAGUARDCONFIG

   

    1.建立TEMPLATE的語法

   

        ALTER DISKGROUP disk_group_name ADD TEMPLATE template_name

          ATTRIBUTES ([{MIRROR|HIGH|UNPROTECTED}] [{FINE|COARSE}]);

   

    2.新增TEMPLATE

        SQL> alter diskgroup DG1 add template template_one attributes (high fine);

        SQL> alter diskgroup DG1 add template template_two attributes (unprotected);

   

    3.修改已存在的TEMPLATE

        SQL> alter diskgroup DG1 alter template template_one attributes (coarse);

 

    4.刪除TEMPLATE

        SQL> alter diskgroup DG1 drop template template_two;

   

    5.基於模板建立資料檔案

        SQL> create tablespace test datafile '+DG1/asmdb/datafile/test.dbf(template_one)' size 10M;

   

    6.檢視當前系統中檔案使用的模板

        SQL> select name,redundancy,striped

          2  from v$asm_alias a join v$asm_file b

          3  on a.file_number=b.file_number

          4  and a.group_number=b.group_number

          5  order by name;

 

        NAME                                REDUND STRIPE

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

        Current.256.734885363               HIGH   FINE

        SYSAUX.260.736463679                MIRROR COARSE

        TBS_RMAN.265.735409761              MIRROR COARSE

        TEMP.262.734885475                  MIRROR COARSE

        SYSTEM.259.734885389                MIRROR COARSE

   

五、使用OMF 建立ASM檔案涉及的一些引數

 

    DB_CREATE_FILE_DEST           --Oracle建立資料檔案、臨時檔案時,在未明確指定路徑的情況下的預設路徑

                                 --db_create_online_log_dest_n未指定時,也作為聯機日誌檔案和控制檔案的預設路徑

    DB_CREATE_ONLINE_LOG_DEST_n   --Oracle建立聯機日誌檔案和控制檔案時,在未明確指定路徑的情況下的預設路徑

    DB_RECOVERY_FILE_DEST         --適用於rman, archivelog,onlinelog

    CONTROL_FILES

    LOG_ARCHIVE_DEST_n

    LOG_ARCHIVE_DEST

    STANDBY_ARCHIVE_DEST

   

    檢視OMF相關引數的設定

        SQL> show parameter db_reco

 

        NAME                                 TYPE        VALUE

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

        db_recovery_file_dest                string      +RECOVERYDEST

        db_recovery_file_dest_size           big integer 1500M

        SQL> show parameter db_create

 

        NAME                                 TYPE        VALUE

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

        db_create_file_dest                  string      +DG1

   

    有關OMF請參考:Oralce OMF 功能詳解

   

六、ASM 磁碟的相關檢視

    v$asm_disk(_stat)       --檢視磁碟及其狀態資訊

    v$asm_diskgroup(_stat)  --檢視磁碟組及其狀態資訊

    v$asm_operation         --檢視當前磁碟的操作資訊

    v$asm_client            --返回當前連線的客戶端例項資訊

    v$asm_file              --返回asm檔案的相關資訊

    v$asm_template          --返回asm檔案樣本的相關資訊

    v$asm_alias             --返回asm檔案的別名資訊

   

七、更多參考

有關閃回特性請參考

        Oracle 閃回特性(FLASHBACK DATABASE)

Oracle 閃回特性(FLASHBACK DROP & RECYCLEBIN)

Oracle 閃回特性(Flashback Query、Flashback Table)

Oracle 閃回特性(Flashback Version、Flashback Transaction)

 

有關基於使用者管理的備份和備份恢復的概念請參考:

        Oracle 冷備份

        Oracle 熱備份

        Oracle 備份恢復概念

        Oracle 例項恢復

        Oracle 基於使用者管理恢復的處理(詳細描述了介質恢復及其處理)

       

    有關RMAN的恢復與管理請參考:

        RMAN 概述及其體系結構

        RMAN 配置、監控與管理

        RMAN 備份詳解

        RMAN 還原與恢復

       

    有關Oracle體系結構請參考:

        Oracle 例項和Oracle資料庫(Oracle體系結構)

        Oracle 表空間與資料檔案

        Oracle 密碼檔案

        Oracle 數檔案

Oracle 資料庫例項啟動關閉過程

        Oracle 聯機重做日誌檔案(ONLINE LOG FILE)

        Oracle 控制檔案(CONTROLFILE)

        Oracle 歸檔日誌

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

相關文章