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的功能,以官方的規划來說共分成三級
    1. external redundancy:完全不使用failure group的功能,完全由第三方廠商提供的保護機置,如最常見的硬體廠商提供的raid保護
    2. normal redundancy:可想像成是raid 1的功能,可使用的空間只有1/2 disk group,可以掛一個disk group,因為他提供是two-way mirroring,並且要求最少2個failure groups
    3. high redundancy:也是有raid保護的功能,只是可使用的空間只有1/3 disk group,但可以同時間掛2disk group,因為他提供three-way mirroring,並且要求最少要有3個failure groups
    4. 結論: 看討論區還沒有人真的純用這個功能,而不用硬體的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的運作效能

常用到的指令
  1. ALTER DISKGROUP dgroupA DROP DISK a1; (移除disk a1於dgroupA的diskgroup中)
  2. ALTER DISKGROUP dgroupA DROP DISK a1 ADD FAILGROUP fred DISK '/dev/rdsk/c0d3d2' NAME A10;(只是表示可以一次執行增、減動作)
  3. ALTER DISKGROUP dgroupA UNDROP DISKS; (如在drop disk動作沒有完成之前的話,是可以cancel的)
  4. ALTER DISKGROUP dgroupA REBALANCE POWER 5;(覆蓋已先前預設的ASM_POWER_LIMIT值)
  5. ALTER DISKGROUP dgroupA DISMOUNT;(就是umount的意思)
  6. ALTER DISKGROUP dgroupA CHECK ALL;(檢查全部的diskgroup是否有錯誤,如有錯誤的話將寫於alter中;如不要記錄於alter檔中的話,可以配合NOREPAIR參數, 將不會把鎧誤訊習記錄於alter檔中)
  7. ALTER DISKGROUP dgroupA ADD TEMPLATE reliable ATTRIBUTES (MIRROR);(建立一個新的模版,並且是two-way mirrore的功能)
  8. ALTER DISKGROUP dgroupA DROP TEMPLATE reliable; (刪除叫 reliable 模版)
  9. ALTER DISKGROUP dgroupA DROP FILE '+dgroupA.268.8675309'; (如知道檔案的話,可直接進行刪除)
  10. ALTER DISKGROUP dgroupA ADD DIRECTORY '+dgroupA/mydif'; (mydit這個目錄必需存在)
  11. ALTER DISKGROUP dgroupA ADD ALIAS '+dgroupA/mydir/datafole.dbf' for '+dgroupA.274.38777'; (指定一個較好記的別名)
  12. ALTER DISKGROUP dgroupA DROP ALIAS '+dgroupA/mydir/datafile.dbf'; (刪除別名)


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檔案)


Posted by my_work at 樂多Roodo! │10:50 │回應(0)引用(0)DB
樂多分類:網路/3C 共同主題:Oracle 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/4557543