Oracle RAC系列之:ASM基本操做維護

ASM(自動存儲管理)是一個專門爲Oracle數據庫服務的數據文件存儲機制,經過ASM管理數據文件,DBA不用再擔憂I/O性能問題,也不須要知道文件的名稱,同時ASM也提供了文件系統到卷管理器的集成,下面依次介紹。
1、 ASM的特色
(1)自動調整I/O負載
ASM能夠在全部可用的磁盤中自動調整I/O負載,不但避免了人工調整I/O的難度,並且也優化了性能,同時,利用ASM能夠在線增長數據庫的大小,而無需關閉數據庫。
(2)條帶化存儲
ASM將文件分爲多個分配單元(Allocation Units, AU)進行存儲,並在全部磁盤間平均分配每一個文件的AU。
(3)在線自動負載均衡
當共享存儲設備有變化時,ASM中的數據會自動均勻分配到現有存儲設備中。同時,還能夠調節數據的負載均衡速度。
(4)自動管理數據庫文件
在ASM存儲管理中,Oracle數據文件是ASM自動管理的。ASM建立的任何文件一旦再也不須要,就會被自動刪除。可是,ASM無論理二進制文件、跟蹤文件、預警日誌和口令文件。
(5)數據冗餘
ASM經過磁盤組鏡像能夠實現數據冗餘,不須要第三方工具。
(6)支持各類Oracle數據文件
ASM存儲支持Oracle數據文件、日誌文件、控制文件、歸檔日誌、RMAN備份集等。node

2、ASM的體系結構與後臺進程sql

圖1顯示了ASM的物理構成。數據庫

 

         從圖1能夠看出,在頂層是ASM磁盤組,ASM實例和數據庫實例能夠直接訪問這些磁盤組;而後是ASM文件,每一個ASM文件只能包含在一個磁盤組中,不過,一個磁盤組中能夠包含屬於多個數據庫的多個ASM文件,而且單個數據庫可使用來自多個磁盤組的存儲空間;第三部分是ASM磁盤,多個ASM磁盤組成了ASM磁盤組,但每一個ASM磁盤只能屬於一個磁盤組;接着是AU(分配單元),AU是ASM磁盤組分配的最小連續磁盤空間,ASM磁盤按照AU進行分區,每一個AU的大小爲1MB;這個結構的底層是Oracle數據塊,因爲AU是ASM分配的最小連續磁盤空間,所以,ASM是不容許跨分配單元拆分一個Oracle數據塊的。
          要使用ASM,須要在啓動數據庫實例以前,先啓動一個名爲「+ASM」的實例,ASM實例不會裝載數據庫,啓動它的目的是爲了管理磁盤組和保護其中的數據。同時,ASM實例還能夠向數據庫實例傳遞有關文件佈局的信息。經過這種方式,數據庫實例就能夠直接訪問磁盤組中存儲的文件。圖2顯示了ASM的通常體系結構。
 oracle

 

         從圖2能夠看出,ASM實例與數據庫實例進行通訊的橋樑是ASMB進程,此進程運行在每一個數據庫實例上,是兩個實例間信息交換的通道。ASMB進程先利用磁盤組名稱經過CSS得到管理該磁盤組的ASM實例鏈接串,而後創建一個到ASM的持久鏈接,這樣兩個實例之間就能夠經過這條鏈接按期交換信息,同時這也是一種心跳監控機制。
         另外,在ASM實例中還存在另一個新的進程,即RBAL,此進程負責規劃和協調磁盤組的從新平衡活動。除此以外,ASM實例還有一些與數據庫實例中的進程相同的後臺進程,例如LGWR、SMON、PMON、DBWR 、CKPT等。
若是一個數據庫實例使用ASM做爲存儲,那麼它將多出兩個後臺進程,即RBAL和ASMB。RBAL 負責打開磁盤組中全部磁盤和數據,而ASMB負責和ASM實例進程通訊。負載均衡

3、管理ASM實例
 在使用ASM做爲數據存儲時,ASM實例管理顯得很是重要,Oracle提供了豐富的管理功能,對ASM實例進行管理須要具有SYSDBA權限,在Oracle 11g中可使用一個新角色 ,即SYSASM,此角色只用於管理ASM實例。
1.建立ASM實例
建立ASM實例有兩種方法,第一種是利用dbca建立,這種方法只需運行Database Configuration Assistant(DBCA),而後根據提示便可建立一個ASM實例,此種方式在前面已有講述,這裏再也不多說。第二中方法是用命令行方式建立ASM實例,下面進行簡單介紹。
(1)建立ASM磁盤
可使用RAID劃分的LUN、分區和裸設備等來建立ASM磁盤,可是在使用LUN、分區或裸設備時,要注意將屬主和屬組改成Oracle用戶及其對應的組,這個在前面節已經講述過,另一種簡單的方法就是使用Oracle提供的ASMLib來完成ASM磁盤的建立,下面將講述這種方法。
在建立ASM實例以前,首先應該確保節點上已經安裝了ASMlib包,同時確認ASMLib是否已經自動加載:
[root@node1 ~]# lsmod | grep oracleasm
oracleasm              46356  1
而後,經過ASMlib提供的oracleasm將已經劃分好的磁盤分區轉化爲ASM磁盤,例如:
[root@node1 ~]#/etc/init.d/oracleasm createdisk ASMDISK1 /dev/sdc5
Marking disk "/dev/sdc5" as an ASM disk [  OK  ]
[root@node1 ~]#/etc/init.d/oracleasm createdisk ASMDISK2 /dev/sdc6
Marking disk "/dev/sdc6" as an ASM disk [  OK  ]
[root@node1 ~]#/etc/init.d/oracleasm createdisk ASMDISK3 /dev/sdc7
Marking disk "/dev/sdc7" as an ASM disk [  OK  ]
[root@node1 ~]#/etc/init.d/oracleasm createdisk ASMDISK4 /dev/sdc8
Marking disk "/dev/sdc8" as an ASM disk [  OK  ]
[root@node1 ~]#/etc/init.d/oracleasm createdisk ASMdisk5 /dev/sdc9
Marking disk "/dev/sdc9" as an ASM disk [  OK  ]
建立完ASM磁盤後,能夠查看系統的/dev/oracleasm/disks/目錄下是否已經生成磁盤設備,能夠採用的命令如以下:
[root@node1 ~]# ll /dev/oracleasm/disks/ASMDISK*
brw-rw---- 1 oracle oinstall 8, 21 Sep 10 23:40 /dev/oracleasm/disks/ASMDISK1
brw-rw---- 1 oracle oinstall 8, 22 Sep 10 23:40 /dev/oracleasm/disks/ASMDISK2
brw-rw---- 1 oracle oinstall 8, 23 Sep 10 23:36 /dev/oracleasm/disks/ASMDISK3
brw-rw---- 1 oracle oinstall 8, 24 Sep 10 23:40 /dev/oracleasm/disks/ASMDISK4
brw-rw---- 1 oracle oinstall 8, 25 Sep 10 23:40 /dev/oracleasm/disks/ASMDISK5
也能夠經過以下方式查看:
[root@node1 ~]#service oracleasm listdisks
ASMDISK1
ASMDISK2
ASMDISK3
ASMDISK4
ASMDISK5
若是要刪除 ASM磁盤可經過如下命令:
[root@node1 ~]#/etc/init.d/oracleasm deletedisk ASMDISK5
Removing ASM disk "ASMdisk5" [  OK  ]
在RAC環境中,要注意另一個節點是否可以發現對應的ASM磁盤,執行以下命令,讓另一個節點來獲取這種變化。
[root@node2 ~]#/etc/init.d/oracleasm scandisks
到此位置,ASM磁盤已經建立完畢了。
(2)初始化參數
啓動ASM實例只須要以下幾個參數便可,利用這些參數能夠實現ASM實例的內存的自動分配和自動管理。
下面介紹ASM實例初始化參數:
instance_type=asm
cluster_database=true
DB_UNIQUE_NAME=+ASM
ASM_POWER_LIMIT=1
large_pool_size=60M
asm_diskgroups='FLASH_DISK','ARCH_DISK','DATA_DISK'
asm_diskstring='/dev/oracleasm/disks/*'
每一個參數的含義以下:
 instance_type,指定實例的類型,對於ASM實例,應設置爲ASM
 cluster_database,指定是不是數據庫集羣,true表示是ASM集羣
 DB_UNIQUE_NAME,指定ASM實例的名稱,默認是+ASM
 ASM_POWER_LIMIT,該參數用來控制ASM中數據的負載均衡速度
 large_pool_size,設置大池的大小,因爲ASM文件的分配單元映射是從large_pool分配的,所以large_pool_size至少要8MB,建議越大越好
 asm_diskgroups,指定實例啓動時可用的ASM磁盤組,ASM實例將在啓動時自動掛載這些磁盤組
 asm_diskstring,用於限制ASM實例可用於建立磁盤組的磁盤設備。若是該值爲NULL,則ASM實例可見的全部磁盤均可以成爲建立磁盤組的可選磁盤
(3)建立密碼文件
[oracle@node1 ~]$su - oracle
[oracle@node1 ~]$ cd $ORACLE_HOME/dbs
[oracle@node1 ~]$orapwd file=orapw+ASM password=oracle
(4)建立目錄結構
[oracle@node 1~]$su – oracle
[oracle@node1 ~]$cd $ORACLE_HOME/dbs
[oracle@node1 ~]$mkdir –p $ORALCE_BASE/admin/+ASM/udump
[oracle@node1 ~]$ mkdir –p $ORALCE_BASE/admin/+ASM/bdump
[oracle@node1 ~]$mkdir –p $ORALCE_BASE/admin/+ASM/adump
[oracle@node1~]$ mkdir –p $ORALCE_BASE/admin/+ASM/cdump
2.啓動ASM實例
 不管在RAC環境中仍是單實例環境,ASM實例都須要用到CSS進程,在RAC環境中,啓動CRS後CSS已經運行,而在單實例環境下,須要以root用戶運行腳本,初始化CSS服務,不然,在啓動ASM實例時會報以下錯誤:
ORA-29701: unable to connect to Cluster Manager
執行初始化腳本的過程以下:
[root@node1 ~]#$ORACLE_HOME/bin/localconfig add
/etc/oracle does not exist. Creating it now.
Successfully accumulated necessary OCR keys.
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Configuration for local CSS has been initializedsocket

Cleaning up Network socket directories
Setting up Network socket directories
 Adding to inittab
Startup will be queued to init within 30 seconds.
Checking the status of new Oracle init process...
Expecting the CRS daemons to be up within 600 seconds.
 Cluster Synchronization Services is active on these nodes.
        node1
Cluster Synchronization Services is active on all the nodes.
Oracle CSS service is installed and running under init(1M)
而後啓動ASM實例:
[oracle@node1 ~]$export ORACLE_SID=+ASM
[oracle@node1 ~]$sqlplus / as sysdba
SQL> startup
ASM instance started
Total System Global Area    134217728 bytes
Fixed Size                   1218124 bytes
Variable Size               107833780 bytes
ASM Cache                   25165824 bytes
ORA-15110: no diskgroups mounted
由於首次啓動ASM實例並無建立ASM磁盤組,因此顯示 15110錯誤是正常的。
3.管理ASM磁盤組
 ASM磁盤組是做爲邏輯單元進行統一管理的一組磁盤,在ASM實例中,能夠建立和添加新的磁盤組,能夠修改現有的磁盤組,在其中添加一個磁盤或者刪除一個磁盤,也能夠刪除現有的磁盤組。
(1)添加磁盤組
SQL> create diskgroup FLASH_DISK external redundancy disk '/dev/oracleasm/disks/ASMDISK1' name flashdisk;
Diskgroup created.
SQL> create diskgroup ARCH_DISK external redundancy disk '/dev/oracleasm/disks/ASMDISK2' name archdisk1;
Diskgroup created.
SQL> create diskgroup DATA_DISK normal redundancy disk '/dev/oracleasm/disks/ASMDISK4' name datadisk1, '/dev/oracleasm/disks/ASMDISK5' name datadisk2;
Diskgroup created.
(2)查看磁盤組狀態
SQL> select name,state from v$asm_diskgroup;
NAME                           STATE
-------------------       --------------
FLASH_DISK                   MOUNTED
ARCH_DISK                   MOUNTED
DATA_DISK               MOUNTED
(3)卸載FLASH_DISK磁盤組
SQL> alter diskgroup FLASH_DISK dismount;
Diskgroup altered.
SQL> select name,state from v$asm_diskgroup;
NAME               STATE
---------------------------  -----------
FLASH_DISK         DISMOUNTED
ARCH_DISK          MOUNTED
DATA_DISK          MOUNTED
(4)掛載FLASH_DISK磁盤組
SQL> alter diskgroup  FLASH_DISK mount;
Diskgroup altered.
SQL> select name,state from v$asm_diskgroup;
NAME                STATE
------------------------------  -----------
FLASH_DISK      MOUNTED
ARCH_DISK        MOUNTED
DATA_DISK     MOUNTED
(5)查看磁盤名與裸設備對應關係
SQL>  select name,path from v$asm_disk_stat;
NAME                             PATH
-------------------         --------------------------------------
                               /dev/oracleasm/disks/ASMDISK3
DATADISK2                      /dev/oracleasm/disks/ASMDISK5
DATADISK1                      /dev/oracleasm/disks/ASMDISK4
ARCHDISK1                      /dev/oracleasm/disks/ASMDISK2
FLASHDISK                      /dev/oracleasm/disks/ASMDISK1
(6)查看每一個磁盤組的可用大小
SQL> select name,allocation_unit_size,total_mb from v$asm_diskgroup;
NAME      ALLOCATION_UNIT_SIZE      TOTAL_MB
------------------ --------------------------------    ----------
FLASH_DISK  1048576          3815
ARCH_DISK  1048576          3815
DATA_DISK   1048576           954
(7)向磁盤組中增長一個磁盤
SQL> ALTER DISKGROUP ARCH_DISK ADD DISK '/dev/oracleasm/disks/ASMDISK3' name ARCHDISK2;
Diskgroup altered.
查看每一個磁盤組的可用大小
SQL> select name,allocation_unit_size,total_mb from v$asm_diskgroup;
NAME       ALLOCATION_UNIT_SIZE   TOTAL_MB
------------------- -------------------------------   ----------
FLASH_DISK  1048576         3815
ARCH_DISK  1048576         4292
DATA_DISK  1048576          954
SQL> select name,path from v$asm_disk_stat;
NAME                            PATH
-------------------       ----------------------------------------
DATADISK2                       /dev/oracleasm/disks/ASMDISK5
DATADISK1                       /dev/oracleasm/disks/ASMDISK4
ARCHDISK2                       /dev/oracleasm/disks/ASMDISK3
ARCHDISK1                       /dev/oracleasm/disks/ASMDISK2
FLASHDISK                       /dev/oracleasm/disks/ASMDISK1
能夠看出,磁盤組ARCH_DISK的大小發生變化了,代表添加磁盤成功。
(8)從磁盤組中刪除一個磁盤:
SQL> ALTER DISKGROUP ARCH_DISK DROP DISK ARCHDISK2;
Diskgroup altered.
(9)刪除一個磁盤組:
SQL> drop diskgroup  FLASH_DISK;
Diskgroup dropped.
當有數據庫使用ASM的磁盤組時,是沒法卸載和刪除這個磁盤組的。ASM實例若是宕掉,那麼使用ASM的數據庫實例也會宕掉。在RAC環境中,在刪除一個磁盤組以前,其餘節點的ASM實例必須將這個要刪除的磁盤組卸載。
4.關閉ASM實例
關閉ASM實例的命令和關閉數據庫實例的命令相同,但只有在沒有任何數據庫實例鏈接到該ASM實例的狀況下,才能正常關閉ASM實例,若是至少有一個數據庫實例與之鏈接,會提示如下錯誤:
ORA-15097: cannot SHUTDOWN ASM instance with connected RDBMS instance
此時,若是對該ASM實例強制執行SHUTDOWN ABORT命令,那麼ASM實例將被關閉,任何與之鏈接的數據庫實例最終也將自動關閉,同時報如下錯誤:
ORA-15064: communication failure with ASM instance
ASM實例被強制關閉後,在下次啓動時,會要求進行恢復。
5.  ASMCMD命令
Oracle在10g版本中提供了ASMCMD命令,經過這個命令能夠管理存儲在ASM磁盤中的數據。下面簡單介紹ASMCMD命令的使用方法。
在使用ASMCMD命令時必須啓動ASM實例,而後指定ORACLE_HOME和ORACLE_SID,例如:
[oracle@node-rac1 ~]$ export ORACLE_SID=+ASM1
[oracle@node-rac1 ~]$ asmcmd
ASMCMD>
還可使用「asmcmd -p」,加上「-p」參數能夠顯示當前路徑。
下面是ASMCMD提供的一些可用命令,其中oracle 11g新增的命令有cp、md_backup、md_restore。
ASMCMD> ?
        commands:
        --------
        helpide

        cd
        cp
        du
        find
        ls
        lsct
        lsdg
        mkalias
        mkdir
        pwd
        rm
        rmalias工具

        md_backup
        md_restore佈局

        lsdsk
        remap
(1)切換目錄
ASMCMD> cd +DATA_DISK/RACDB
(2)列出目錄信息
ASMCMD> ls
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
spfileracdb.ora
(3)查看磁盤空間信息
執行ASMCMD的 「du DATAFILE」命令查看磁盤空間信息,如圖3所示性能

 

(4)顯示ASM和數據庫實例鏈接狀況
執行ASMCMD的「lsct」命令顯示ASM和數據庫實例鏈接狀況,如圖4所示

 

(5)建立一個目錄
ASMCMD> mkdir test
ASMCMD> ls
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
spfileracdb.ora
test/
(6)複製磁盤文件
將ASM磁盤文件spfileracdb.or複製到test目錄下:
ASMCMD> cp spfileracdb.ora test
source +DATA_DISK/RACDB/spfileracdb.ora
target +DATA_DISK/RACDB/test/spfileracdb.ora
copying file(s)...
file, +DATA_DISK/racdb/test/spfileracdb.ora, copy committed.
ASMCMD> cd test
ASMCMD> ls
spfileracdb.ora
將ASM磁盤文件UNDOTBS1.258.728340289文件複製到操做系統某目錄下:
ASMCMD> cp UNDOTBS1.258.728340289 UNDOTBS1.dbf           
source +DATA_DISK/RACDB/DATAFILE/UNDOTBS1.258.728340289
target UNDOTBS1.dbf
copying file(s)...
copying file(s)...
copying file(s)...
copying file(s)...
copying file(s)...
copying file(s)...
file, /u01/oracle/product/11.0.6/rac_db/dbs/UNDOTBS1.dbf, copy committed.
(7)備份ASM的metadata
ASMCMD> md_backup -b /u01/oracle/datadisk.bak -g data_disk
Disk group to be backed up: DATA_DISK
這樣就把ASM的metadata備份到了文件系統上,經過查看datadisk.bak文件能夠得知metadata的組織信息。
(8)爲ASM磁盤文件設置別名
執行如圖5所示的命令爲ASM磁盤文件設置別名。

(9)在磁盤組查找文件 ASMCMD> find +DATA_DISK sys* +DATA_DISK/RACDB/DATAFILE/SYSAUX.257.728340287 +DATA_DISK/RACDB/DATAFILE/SYSAUX.dbf +DATA_DISK/RACDB/DATAFILE/SYSTEM.256.728340285 +DATA_DISK/RACDB/DATAFILE/SYSTEM.dbf (10)在磁盤組刪除文件 ASMCMD> rm -rf test

相關文章
相關標籤/搜索