2007年11月29日
10g ASM (Automatic Storage Management)
ASM (Automatic Storage Management)


- Automatic Storage Management(ASM)是10g才有的新功能,主要是要解決file System跟volume manager這二部份的管理問題
- 提供了DBA動態的增、減 database size而不需要直接對os操作,並且有提供像 mirroring 保護的功能
- 可加快I/O的速度,因為不必由OS傳送操作的指令
- 可online操作disk容量
- 如是由多個disk來組成的話,會自動分散file到各個disk上面,以加快I/O的運作
- 只支援oracle database file、log file、control file、archive logs、RMAN backuo sets
- 支援cluster-aware(RAC)

- 由上表可得知在ASM的架構下實體檔案只有ASM file了,也就是data file,所以不管理alter log、trace file、password file
- ASM是由多個ASM disk group組合而成的
- ASM file只能屬於一個ASM disk group
- database 可由多個ASM disk group 組成
- ASM disk group可讓多個database 共享
- ASM(automatic Storage Management)包含於database kernel裡了,所以並不會有效能變差的問題
- ASM本身有自已的instance,也就是db要開起來前,要先把ASM給開起來,這時ASM instance是為mount,是因為ASM這時會去讀取ASM disk group
- 可把ASM想成是一個server,所以還要安裝ASMLib程式才行,大致ASM會佔用到60m的記億體
- ASM 操作的帳號、密碼認證只能用OS進行認證,並且需要sysdba或sysoper的權限
- RBAL用於協調ASM disk group中各個磁盤之間的運作
- ASMB負責database instance 與ASM instance 之間的溝通,並提供最新的訊習(他是動態產生的,只有當ASM file被存取時才有產生)
並且是第一個帶起來的background process - ORBn負責執行數據擴展的負載均衡。 instance 可以運行多個 ORBn 進程,N可以從0到9
- GMON:用於維護asm disk group的asm disk之間的關係
- 一個ASM instance可讓多個database instance共用
- ASM instance掛點時,database instance一定會掛點;但database instance掛點時,ASM instance並不一定會掛點
- ASM instance跟DB instance沒有什特定的相對應版本。如DB instance是10.2.x.y,你可以配上ASM instance 10.1.u.y。不過如果DB instance比ASM instance版本少的話,將無法使用到較新版ASM的新功能
- 提供的view v$asm_client --欄位 ==>software_version/compatible_version
- ASM instance運作之前,要先運行Oracle Cluster Synchronization Service(CSS)
- v$asm_diskgroup
- v$asm_disk
- v$asm_alias (可查alias真實對應的檔名是什麼)
- v$asm_operation (monitoring Long-Running Operations)
column description GROUP_NUMBER Disk group OPERATION Type of operation:REBAL STATE State of operation:QUEUED or RUNNING POWER Power requested for this operation ACTUAL Power allocated to this operation SOFAR Number of allocation units moved so far EST_WORK Estimated number of remaining allocation units EST_RATE Estimated number of allocation units moved per minute EST_MINUTES Estimated amount of time (in minutes) for operation termination
ASM_POWER_LIMIT 參數
這個參數 ASM_POWER_LIMIT 參數控制 ASM 後台進程 ARBx 的數量。ARBx 進程用來進行 ASM 磁盤數據重新分佈打散。ASM_POWER_LIMIT 取值 從 0 到 11(據說從 10gR2 開始可以設置為 0 ). 當新添加磁盤或者刪除磁盤後,ASM 會啟動 ARBx 進行 IO 分散操作,這是個非常消耗資源的動作,所以一定要選擇系統空閒的時候進行。關於 ASM 的條帶與分配單元
ASM 默認的 Stripe Size 為 128K。 (一般操作系統的一個 IO 最大是 1M,對於 Block Size 為 8K 的系統,一般來說,db_file_multiblock_read_count 設置為 16 即可)。分配單元( Allocation Unit ) 是 1M,這個 AU 對應 extent 。在一些 DW 環境,隨著數據量增大,AU 會非常的多,會產生性能影響。Stripe Size 和 AU 是可以通過 ASM 實例上的兩個隱含參數調整的:
- _asm_ausize
- _asm_stripesize(注意最大1M,否則會有負面影響)
ASM Instance Initialization Parameters
- instance_type =ASM (如使用asm的話,這裡需要設定為ASM)
- db_unique_name = +ASM (asm instance預設值為+ASM,如有必要也可更改)
- asm_power_limit =1 (控制加入、減少disk group時,asm做i/o分散動作的等級。值為1~11,11最快,1為預設值。要注意的是,當設的愈高時,當動作時會花更多的資源在這些動作,所以 最好在機器運作較不吃緊時,再把數值調高)
- asm_diskstring = '/dev/rdsk/*s2','/dev/rdsk/c1*' (定義那些disk group可以被這個asm instance發現、使用。如值為null的話,asm將會尋找全部的disk group來使用
- asm_diskgroups = dgroupA,dgroupB (定義那些disk group可以當asm instance起動時,自動被mount起來)
alter diskgroup all mount==>手動執行mount的動作

從這裏可以看的到 asm instance只有單純的把disk group mount起來而已
並且需要sysdba的權限的使用者才能做這件事情

asm內部結構跟對應的view
Starting Up / Shutting Down an ASM Instance
- 開起asm的流程
oracle>sqlplus /nolog
SQL>connect / as sysdba
SQL>startup;
注意:只有起動asm instance,並沒有起動database - 關畢asm的流程
oracle>sqlplus /nolog
SQL>connect / as sysdba
SQL>shutdown {normal/immediate/transactional/abort}
注意:當還有db instance連到asm instance的話,執行shutdown {normal/immediate/transactional}會回傳ORA-15097的錯誤訊習
如是執行shutdown abort的話,會強迫asm instance停止,相對的因為asm disk group已被umount了,所以db instance也會找不到asm disk group,所以對asm下shutdown abort等同你也對db 下shutdown abort。正常的停止流程應該為先把db instance停止,再停止asm instance這樣子才是標準的做法。
ASM Disk Group
- 是一個羅輯單位
- 大小是沒有限制的(不超過os限制)
- file平均分散於disk中
- 組成size的最小單位可以自已選擇
1M==>CORSE string
128K ==>FINE string :提供低延遲的功能,並且可以使用parallel特點 - 不必直接管理實體檔案,只要管理disk group就好了。底層的東西都交由oracle代為處理
- 每一個asm disk時需有一個代稱,不過這個代稱是抽象的。因為這個disk在每台機器上可以被稱為a,也可被稱為b
Failure Group/Disk Group Mirroring
- 簡單的說,就是oracle提供像raid的功能,以官方的規划來說共分成三級
- external redundancy:完全不使用failure group的功能,完全由第三方廠商提供的保護機置,如最常見的硬體廠商提供的raid保護
- normal redundancy:可想像成是raid 1的功能,可使用的空間只有1/2 disk group,可以掛一個disk group,因為他提供是two-way mirroring,並且要求最少2個failure groups
- high redundancy:也是有raid保護的功能,只是可使用的空間只有1/3 disk group,但可以同時間掛2disk group,因為他提供three-way mirroring,並且要求最少要有3個failure groups
- 結論: 看討論區還沒有人真的純用這個功能,而不用硬體的raid來建置環境。
- 建立 failgroup 語法:
create diskgroup dgroupA normal redundancy
failgroup controler1 disk
'/dev/a1' name diskA1 size 120G force,
'/dev/a2',
'/dev/a3',
failgroup controler2 disk
'/dev/b1',
'/dev/b2',
'/dev/b3'; - 刪除語法:
drop diskgroup dgroupA including contents; - 增加 disk to disk group
alter diskgroup dgroupA add disk
'/dev/c1' name c1,
'/dev/c2' name c2,
'/dev/c3' name c3; - 一次增加相同類的disk
alter diskgroup dgroupA add disk '/dev/D*';
Disk Group Dynamic Rebalancing
- 當disk group加入、減少disk時,會自動分散i/o到每個disk上面(實際的應用時,要避免於繁忙時做這類的動作)
- 可減少"熱點"產生
- 當重置(reblance)時,不會讓db的運作停止,只會影響少量的database的運作效能
常用到的指令
|
ASM Command-Line Interface:
- 提供像os的指令可以直接操作asm檔案,而不必使用sql的方式管理
- 輸入 asmcmd 後,就可進行文字操作介面,有提供cd、du、rm、mkdir、ls、lsct、lsdg、pwd、mkalias、rmalias、find
用法跟一般的方法相同,要查更細步的用法可用asmcmd help - 有提供互動性交談介面跟命令式介面
(interactive)
$asmcmd
ASMCMD> ls +DBG1/ORACLE/*
(Batch)
$asmcmd ls +DBG1/ORACLE/* - 要執行asmcmd的話,要最少有一個diskgroup是在mount的情況下,因為asmcmd不支援mount diskgroup
ASM對db參數的影響
- 假如LOG_ARCHIVE_DEST是設成asm的名字,如 +dGroupA,而LOG_ARCHIVE_FORMAT 設定是無效的
- 假如LOG_ARCHIVE_DEST是設成asm的目錄,如 +dGroupA/myarchivelogdir/,則LOG_ARCHIVE_FORMAT 設定是有效的
- DB_BLOCK_SIZE 只支援(2KB/4KB/8KB/16KB/32KB)
- 指定多個路徑還是有效的
- DB_CREATE_ONLINE_DEST_n
- DB_CREATE_FILE_DEST_n
- DB_RECOVERY_FILE_DEST
- CONTROL_FILES
- LOG_ARCHIVE_DEST_n
- LOG_ARCHIVE_DEST
- STANDBY_ARCHIVE_DEST
- SHARED_POOL_SIZE 設定值
(DB_SPACE/100+2) M ==>External_Red
(DB_SPACE/50+4) M ==>Normal_Red
(DB_SPACE/33+6) M ==>High_Red
簡單的說,如採用external 模式的話,每100g空間需增加1m+2m=3m的shared_pool_size;而normal的話,那就是2m+4m=6m了,最後一個同理如上
ps:如採用Automatic Shared Memory Management(ASMM)的話,會自動管理這些大小變化 - PROCESSES最少要16以上
Manually Migrating Your Database to ASM
- shut down database
- 設定database file 管理為OMF
- 執行rman script
startup nomount;
restore controlfile form '/back/control_bak.ctl';
alter database mount;
backup as copy database format '+dgroup1';
switch database to copy;
sql "alter database rename '/u01/log1' to '+dgroup1'";
alter database open resetlogs;
sql "alter tablespace temp add tempfile"; --增加asm的temp tablespace
sql "alter database tempfile '/u01/temp.dbf' drop "; --刪除原來的實體temp tablespace
ASM and Transportable Tablespaces
- File system to ASM / ASM to file system / ASM to ASM 使用DBMS_FILE_TRANSFER
ASM and XML DB:Overview
- ASM file 可存取於XML DB於 /sys/asm
- 可使用DBMS_XDB / FTP /HTTP/WebDAV存取
實際的應用情況(較方便取得dump檔案)

引用URL
http://cgi.blog.roodo.com/trackback/4557543