ASM 磁盘组管理
一、相關概念(摘自一彌沙的世界)
1.ASM 磁盤組
1 ASM存儲管理除了ASM實例之外,最大的組成部分就是ASM磁盤組。一個ASM磁盤組由過多個ASM磁盤組成 2 一個磁盤組內可以存放多個數據文件,一個數據文件僅僅只能位于一個磁盤組內,不能跨磁盤組 3 多個數據庫可以共享相同的或多個磁盤組 4 磁盤組的冗余類型可以分為三類:標準冗余,高度冗余,外部冗余 5 對于已創建的磁盤組,不能夠更改其冗余級別,如要更改,需要刪除該磁盤組后再重新創建2.ASM 磁盤
1 ASM磁盤通過標準的OS接口來訪問,由Oracle用戶來讀寫,在聚集的所有節點可以被訪問 2 ASM磁盤在不同的節點可以使用不同的名字(RAC) 3 ASM磁盤可以使網絡文件系統 4 ASM磁盤上的對象被冗余保護 5 每一個ASM磁盤的第一個塊用于定義磁盤的頭部信息,ASM磁盤名字編號,創建的時間戳等 6 ASM文件會均勻分布在一個ASM組內的各個磁盤中3.ASM 故障組
1 一個磁盤組可以由兩個或多個故障組組成 2 一個故障組由一個或多個ASM磁盤組成 3 故障組提供了共享相同資源的冗余,我們可以這樣來理解標準冗余 4 假定有磁盤組DG1,且創建了兩個故障組fgroup1,fgroup2,每個故障組由個ASM磁盤組成,則對標準冗余而言,兩個故障組互為鏡像 5 failgroup1 --> asmdiskA , asmdiskB 6 failgroup2 --> asmdiskC , asmdiskD 7 假定文件datafileA大小為4MB,則個4個extent均勻分布到asmdiskA,asmdiskB,同樣asmdiskC,asmdiskD也包含該文件的4個extent 8 即只要有一個extent在故障組fgroup1中存在,必定有一個extent的鏡像存在于fgroup2中,反之亦然,兩個extent互為鏡像。 9 當一個故障組中的某個磁盤損壞,假定為asmdiskA ,則asmdiskA中原來保存的extent將會從failgroup2中復制到asmdiskB中。 10 總之,故障組failgroup1和failgroup2必定有相同的extent副本 11 標準冗余至少需要2個故障組,高度冗余則至少需要3個故障組。事實上對于未明確指定故障組的情況下,一個標準冗余至少需要2個 12 asm磁盤,而高度冗余至少需要3個asm磁盤4.分配單元
1 ASM磁盤的最小粒度是分配單元,大小默認是1M,也可設置為128K進行細粒度訪問 2 支持粗粒度和細粒度分配單元進行讀寫來實現裝載平衡和減少延遲 3 ASM文件由一些分配單元的集合組成5.ASM 文件
1 對Oracle自身而言,實際上與標準的文件并沒有太多區別 2 ASM文件一般位于磁盤組內創建的子目錄內,磁盤組以加號開頭,相當于Linux系統的根目錄 3 如+DG1/oradb/datafile/system.258.346542 4 ASM可以為控制文件,數據文件,聯機日志文件,參數文件,歸檔日志,備份等 5 不支持trace文件,可執行文件,OCR,Votingdisk等,注:Oracle 11g R2可支持 6 使用extent maps來記錄文件到磁盤的映射6.I/O分布
1 可以使用條帶化和鏡像來保護數據 2 文件被平均分布在一個組內的所有磁盤中 3 磁盤的添加與刪除,ASM會自動重新分配AU,因此也不存在碎片的問題 4 將I/O分批到不同的磁盤控制器提高了讀寫數據7.Rebalance
1 ASM 文件被均衡地分布在一個磁盤組的所有磁盤中 2 磁盤添加時,當前磁盤組加載的所有磁盤中共享的部分extent將會被移植到新的磁盤中,直到重新分布完成才正常提供I/O均衡 3 磁盤刪除或故障時,刪除磁盤或故障磁盤的extent將會被均勻的分布到剩余的磁盤中 4 未使用force關鍵字drop磁盤操作,該磁盤上所有數據rebalance完畢后才被釋放.即完畢后磁盤脫機,置磁盤頭部狀態為former 5 總之,任意存儲性質改變(磁盤增加,刪除,故障)都將導致rebalance,且由asm自動完成,無需人工干預,在一個時間段通常會鎖定一個盤區8.ASM磁盤組的管理
1 通常建議創建兩個磁盤組,一個用于保存數據文件,一個用于保存閃回,備份恢復使用 2 Flash Recovery Area 的大小取決于閃回內容需要保留的時間長短 3 盡可能將數據區與閃回區使用不同的物理通道 4 盡可能一次性mount所有需要用到的磁盤 5 建議使用性能,磁盤大小相近的磁盤。假定兩個故障組FG1,FG2各使用一塊磁盤,則FG1內的磁盤應保持與FG2內的磁盤大小相同,否則會以最小的磁盤空間作為可使用空間9.ASM的可擴展性
1 63 disk groups in a storage system 2 3 10,000 ASM disks in a storage system 4 5 4 petabyte maximum storage for each ASM disk 6 7 40 exabyte maximum storage for each storage system 8 9 1 million files for each disk group 10 11 Maximum files sizes as shown in the following table:| Disk Group Type | Maximum File Size |
| External redundancy | 35 TB |
| Normal redundancy | 5.8 TB |
| High redundancy | 3.9 TB |
10.ASM磁盤組的管理方式
1 SQLPlus 2 OEM 3 DBCA 4 ASMCMD?
二、Solaris ASM磁盤創建及管理
1.查看diskgroup空間大小,以及ASM狀態
1 SQL> select group_number,total_mb,required_mirror_free_mb,free_mb,usable_file_mb,state from v$asm_diskgroup; 2 3 GROUP_NUMBER TOTAL_MB FREE_MB USABLE_FILE_MB STATE 4 ------------ ---------- ---------- -------------- ----------- 5 1 3996 1424 712 MOUNTED 6 2 3996 3876 1938 MOUNTED 7 8 --TOTAL_MB: 磁盤組的大小 9 --FREE_MB : 在不考慮冗余的情況下,剩余的空間大小 10 --USABLE_FILE_MB:1).在外部冗余情況下 USABLE_FILE_MB=FREE_MB 11 2).普通冗余 USABLE_FILE_MB=FREE_MB/2 12 3).高冗余 USABLE_FILE_MB=FREE_MB/3 13 SQL>2.添加disk到現有的diskgroup
1 -- a.添加裸設備參考相關文檔,千萬不要忘記改變磁盤屬性 2 -- b.查看添加的磁盤 3 --注:我在添加磁盤時測試一下使用0分片做存儲,但asm不識別,用v$asm_disk查不到這兩個分片c2t4d0s0,c2t5d0s0。對0分片是不是有什么特別的說法? 將1.95G的空間劃給1分片,asm可以識別: 4 SQL> select name, path, mode_status, state from v$asm_disk; 5 6 NAME PATH MODE_ST STATE 7 --------------- ------------------------------ ------- --------------- 8 /dev/rdsk/c2t4d0s1 ONLINE NORMAL 9 /dev/rdsk/c2t5d0s1 ONLINE NORMAL 10 DATA01_0000 /dev/rdsk/c2t0d0s1 ONLINE NORMAL 11 DATA01_0001 /dev/rdsk/c2t1d0s1 ONLINE NORMAL 12 DATA02_0000 /dev/rdsk/c2t2d0s1 ONLINE NORMAL 13 DATA02_0001 /dev/rdsk/c2t3d0s1 ONLINE NORMAL 14 15 SQL> 16 --注:name為空的是新增加的4塊盤 17 18 --c.添加/dev/rdsk/c2t4d0s1,/dev/rdsk/c2t5d0s1到組DATA01,命名為:DATA01_0002,DATA01_0003 19 --注:1.此過程亦默認添加了故障組。2.此步驟可用dbca完成 20 21 SQL> alter diskgroup data01 add disk '/dev/rdsk/c2t4d0s1' 22 2 name DATA01_0002; 23 24 Diskgroup altered. 25 26 SQL> alter diskgroup data01 add disk '/dev/rdsk/c2t5d0s1' 27 2 name DATA01_0003; 28 29 Diskgroup altered. 30 31 SQL> 32 --d.查看添加磁盤后的情況 33 SQL> select group_number,disk_number,name,failgroup,state,path 34 2 from v$asm_disk order by 1,2; 35 36 GROUP_NUMBER DISK_NUMBER NAME FAILGROUP STATE PATH 37 ------------ ----------- ------------ ------------ -------- -------------------- 38 1 0 DATA01_0000 DATA01_0000 NORMAL /dev/rdsk/c2t0d0s1 39 1 1 DATA01_0001 DATA01_0001 NORMAL /dev/rdsk/c2t1d0s1 40 1 2 DATA01_0002 DATA01_0002 NORMAL /dev/rdsk/c2t4d0s1 41 1 3 DATA01_0003 DATA01_0003 NORMAL /dev/rdsk/c2t5d0s1 42 2 0 DATA02_0000 DATA02_0000 NORMAL /dev/rdsk/c2t2d0s1 43 2 1 DATA02_0001 DATA02_0001 NORMAL /dev/rdsk/c2t3d0s1 44 45 6 rows selected. 46 47 SQL> 48 --注:添加新磁盤后,ASM將自動重新負載平衡操作,可通過 v$asm_operation.SOFAR|EST_WORK|EST_RATE3.創建磁盤組
1 SQL> create diskgroup DATA03 normal redundancy disk '/dev/rdsk/c2t6d0s1' name DATA03_0000 ; 2 create diskgroup DATA03 normal redundancy disk '/dev/rdsk/c2t6d0s1' name DATA03_0000 3 * 4 ERROR at line 1: --標準冗余至少需要兩塊磁盤 5 ORA-15018: diskgroup cannot be created 6 ORA-15072: command requires at least 2 failure groups, discovered only 1 7 8 --此時沒有明確指定故障組,故障組默認自動創建 9 SQL> create diskgroup DATA03 normal redundancy disk '/dev/rdsk/c2t6d0s1' name DATA03_0000,'/dev/rdsk/c2t8d0s1' name DATA03_0001; 10 11 Diskgroup created. 12 13 SQL> 14 15 --明確指定故障組名稱 16 SQL> create diskgroup DATA04 normal redundancy 17 2 failgroup fg01 disk '/dev/rdsk/c2t9d0s1' name DATA04_0000 18 3 failgroup fg02 disk '/dev/rdsk/c2t10d0s1' name DATA04_0001; 19 20 Diskgroup created. 21 22 SQL>4.磁盤組添加故障組
1 SQL> alter diskgroup DATA04 2 2 add failgroup fg03 disk '/dev/rdsk/c2t11d0s1' name DATA04_0002; 3 4 Diskgroup altered. 5 6 SQL>5.故障組添加磁盤
1 SQL> alter diskgroup DATA02 2 2 add failgroup DATA02_0000 disk '/dev/rdsk/c2t12d0s1' 3 3 add failgroup DATA02_0001 disk '/dev/rdsk/c2t13d0s1'; 4 5 Diskgroup altered. 6 7 SQL>6.刪除磁盤組中的磁盤,故障組中的成員,磁盤組(刪除磁盤時一定要謹慎,做好備份,否則就等淚奔吧)
6.1查看目前磁盤整體情況:
1 SQL> select group_number,disk_number,name,failgroup,path 2 2 from v$asm_disk order by 1,2; 3 4 GROUP_NUMBER DISK_NUMBER NAME FAILGROUP PATH 5 ------------ ----------- ------------ ------------ -------------------- 6 1 0 DATA01_0000 DATA01_0000 /dev/rdsk/c2t0d0s1 7 1 1 DATA01_0001 DATA01_0001 /dev/rdsk/c2t1d0s1 8 1 2 DATA01_0002 DATA01_0002 /dev/rdsk/c2t4d0s1 9 1 3 DATA01_0003 DATA01_0003 /dev/rdsk/c2t5d0s1 10 2 0 DATA02_0000 DATA02_0000 /dev/rdsk/c2t2d0s1 11 2 1 DATA02_0001 DATA02_0001 /dev/rdsk/c2t3d0s1 12 2 2 DATA02_0002 DATA02_0000 /dev/rdsk/c2t12d0s1 13 2 3 DATA02_0003 DATA02_0001 /dev/rdsk/c2t13d0s1 14 3 0 DATA03_0000 DATA03_0000 /dev/rdsk/c2t6d0s1 15 3 1 DATA03_0001 DATA03_0001 /dev/rdsk/c2t8d0s1 16 4 0 DATA04_0000 FG01 /dev/rdsk/c2t9d0s1 17 18 GROUP_NUMBER DISK_NUMBER NAME FAILGROUP PATH 19 ------------ ----------- ------------ ------------ -------------------- 20 4 1 DATA04_0001 FG02 /dev/rdsk/c2t10d0s1 21 4 2 DATA04_0002 FG03 /dev/rdsk/c2t11d0s1 22 23 13 rows selected. 24 25 SQL> 1 --刪除磁盤組DATA04中的磁盤DATA04_0002 2 SQL> alter diskgroup data04 drop disk DATA04_0002; 3 4 -- 刪除故障中DATA02_0001中單個成員DATA02_0003 5 SQL> alter diskgroup data02 drop disk DATA02_0003; 6 7 --刪除故障組FG03及所有成員(故障組FG03只有一個成員DATA04_0002) 8 --刪除故障組及所有成員,注意此時為drop disks 復數形式 9 SQL> alter diskgroup data04 drop disks in failgroup FG03; 10 11 --刪除磁盤組 12 SQL> drop diskgroup data04; 13 14 Diskgroup dropped. 15 16 SQL>6.2 取消刪除磁盤 磁盤是hung狀態時,此命令有效
1 SQL> alter diskgroup data03 drop disk DATA03_0000; --違反冗余條件的刪除,磁盤為hung狀態 2 Diskgroup altered 3 SQL> select group_number,name,failgroup,path,state 4 2 from v$asm_disk 5 3 where GROUP_NUMBER=3; 6 7 GROUP_NUMBER NAME FAILGROUP PATH STATE 8 ------------ ------------ ------------ -------------------- -------- 9 3 DATA03_0000 DATA03_0000 /dev/rdsk/c2t6d0s1 HUNG 10 3 DATA03_0001 DATA03_0001 /dev/rdsk/c2t8d0s1 NORMAL 11 --取消刪除 12 SQL> alter diskgroup data03 undrop disks; 13 SQL> select group_number,name,failgroup,path,state 14 2 from v$asm_disk 15 3 where GROUP_NUMBER=3; 16 17 GROUP_NUMBER NAME FAILGROUP PATH STATE 18 ------------ ------------ ------------ -------------------- -------- 19 3 DATA03_0000 DATA03_0000 /dev/rdsk/c2t6d0s1 NORMAL 20 3 DATA03_0001 DATA03_0001 /dev/rdsk/c2t8d0s1 NORMAL 21 22 --DATA03_0000變為normal狀態7.調整磁盤組的容量
1 ----故障組DATA03_0000的容量將被調整到1G,為避免浪費磁盤組中的各個故障組大小最好相等 2 SQL> alter diskgroup data03 resize disks in failgroup DATA03_0000 size 1G; 3 SQL> alter diskgroup data03 resize disks in failgroup DATA03_0001 size 1G;8.手動Rebalance
1 SQL> alter diskgroup data03 rebalance power 11; 2 平衡速度控制參數: 3 asm_power_limit = 1~119.磁盤組的加載與卸載及內部一致性檢查
1 SQL> alter diskgroup all dismount; 2 alter diskgroup all dismount 3 * 4 ERROR at line 1: 5 ORA-15032: not all alterations performed 6 ORA-15027: active use of diskgroup "DATA02" precludes its dismount 7 ORA-15027: active use of diskgroup "DATA01" precludes its dismount 8 9 10 SQL> 11 SQL> alter diskgroup data03 dismount; 12 alter diskgroup data03 dismount 13 * 14 ERROR at line 1: 15 ORA-15032: not all alterations performed 16 ORA-15001: diskgroup "DATA03" does not exist or is not mounted 17 18 19 SQL> 20 SQL> alter diskgroup data03 mount; 21 SQL> alter diskgroup data03 check all;o(︶︿︶)o 唉,就先寫到這里吧!
?
?
轉載于:https://www.cnblogs.com/polestar/archive/2013/04/23/3039168.html
總結
- 上一篇: Java热替换
- 下一篇: Mac下搭建jekyll环境