ASM自動儲存管理)是一個專門為Oracle資料庫服務的資料檔案儲存機制,通過ASM管理資料檔案,DBA不用再擔心I/O效能問題,也不需要知道檔案的名稱,同時ASM也提供了檔案系統到卷管理器的整合,下面依次介紹。
一、 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備份組等。
二、ASM的體繫結構與後台進程
圖1顯示了ASM的物理構成。
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131229/1935402b9-0.png" />
從圖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的一般體繫結構。
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131229/1935402464-1.png" />
從圖2可以看出,ASM執行個體與資料庫執行個體進行通訊的橋樑是ASMB進程,此進程運行在每個資料庫執行個體上,是兩個執行個體間資訊交換的通道。ASMB進程先利用磁碟組名稱通過CSS獲得管理該磁碟組的ASM執行個體串連串,然後建立一個到ASM的持久串連,這樣兩個執行個體之間就可以通過這條串連定期交換資訊,同時這也是一種心跳監控機制。
另外,在ASM執行個體中還存在另外一個新的進程,即RBAL,此進程負責規劃和協調磁碟組的重新平衡活動。除此之外,ASM執行個體還有一些與資料庫執行個體中的進程相同的後台進程,例如LGWR、SMON、PMON、DBWR 、CKPT等。
如果一個資料庫執行個體使用ASM作為儲存,那麼它將多出兩個後台進程,即RBAL和ASMB。RBAL 負責開啟磁碟組中所有磁碟和資料,而ASMB負責和ASM執行個體進程通訊。
三、管理ASM執行個體
在使用ASM作為資料存放區時,ASM執行個體管理顯得非常重要,Oracle提供了豐富的管理功能,對ASM執行個體進行管理需要具備SYSDBA許可權,在Oracle 11g中可以使用一個新角色 ,即SYSASM,此角色只用於管理ASM執行個體。
1.建立ASM執行個體
建立ASM執行個體有兩種方法,第一種是利用dbca建立,這種方法只需運行Database Configuration AssistantDBCA),然後根據提示即可建立一個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 initialized
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:
--------
help
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所示
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131229/1935402K3-2.png" />
4)顯示ASM和資料庫執行個體串連情況
執行ASMCMD的“lsct”命令顯示ASM和資料庫執行個體串連情況,4所示
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131229/1935406452-3.png" />
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磁碟檔案設定別名。
650) this.width=650;" border="0" alt="" src="http://www.bkjia.com/uploads/allimg/131229/193540L02-4.png" />
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
本文出自 “技術成就夢想” 部落格,請務必保留此出處http://ixdba.blog.51cto.com/2895551/970801