--========================數據庫
-- ASM 磁盤、目錄的管理網絡
--========================oracle
ASM磁盤是ASM體系結構的重要組成部分,ASM磁盤由ASM實例來定位、管理,本文主要講述ASM磁盤組、故障組等等。性能
有關ASM實例及ASM數據庫的建立請參考:建立ASM實例及ASM數據庫ui
1、相關概念spa
1.ASM 磁盤組.net
ASM存儲管理除了ASM實例以外,最大的組成部分就是ASM磁盤組。一個ASM磁盤組由過多個ASM磁盤組成日誌
一個磁盤組內能夠存放多個數據文件,一個數據文件僅僅只能位於一個磁盤組內,不能跨磁盤組orm
多個數據庫能夠共享相同的或多個磁盤組對象
磁盤組的冗餘類型能夠分爲三類:標準冗餘,高度冗餘,外部冗餘
對於已建立的磁盤組,不可以更改其冗餘級別,如要更改,須要刪除該磁盤組後再從新建立
2.ASM 磁盤
ASM磁盤經過標準的OS接口來訪問,由Oracle用戶來讀寫,在彙集的全部節點能夠被訪問
ASM磁盤在不一樣的節點可使用不一樣的名字
ASM磁盤可使網絡文件系統
ASM磁盤上的對象被冗餘保護
每個ASM磁盤的第1塊用於定義磁盤的頭部信息,ASM磁盤名字編號,建立的時間戳等
ASM文件會均勻分佈在一個ASM組內的各個磁盤中
3.ASM 故障組
一個磁盤組能夠由兩個或多個故障組組成
一個故障組由一個或多個ASM磁盤組成
故障組提供了共享相同資源的冗餘,咱們能夠這樣來理解標準冗餘
假定有磁盤組DG1,且建立了兩個故障組fgroup1,fgroup2,每一個故障組由2個ASM磁盤組成,則對標準冗餘而言,兩個故障組互爲鏡像
failgroup1 --> asmdiskA , asmdiskB
failgroup2 --> asmdiskC , asmdiskD
假定文件datafileA大小爲4MB,則4個extent均勻分佈到asmdiskA,asmdiskB,一樣asmdiskC,asmdiskD也包含該文件的1至4個extent
即只要有一個extent在故障組fgroup1中存在,一定有一個鏡像的extent存在於fgroup2中,反之亦然,兩個extent互爲鏡像。
當一個故障組中的某個磁盤損壞,假定爲asmdiskA ,則asmdiskA中原來保存的extent將會從failgroup2中複製到asmdiskB中。
總之,故障組failgroup1和failgroup2一定有相同的extent副本
標準冗餘至少須要2個故障組,高度冗餘則至少須要3個故障組。事實上對於未明確指定故障組的狀況下,一個標準冗餘至少須要2個
asm磁盤,而高度冗餘至少須要3個asm磁盤
4.分配單元
ASM磁盤的最小粒度是分配單元,大小默認是1M,也可設置爲128K進行細粒度訪問
支持粗粒度和細粒度分配單元進行讀寫來實現裝載平衡和減小延遲
ASM文件由一些分配單元的集合組成
5.ASM 文件
對Oracle自身而言,實際上與標準的文件並無太多區別
ASM文件通常位於磁盤組內建立的子目錄內,磁盤組以加號開頭,至關於Linux系統的根目錄
如+DG1/oradb/datafile/system.258.346542
ASM能夠爲控制文件,數據文件,聯機日誌文件,參數文件,歸檔日誌,備份等
不支持trace文件,可執行文件,OCR,Votingdisk等,注:Oracle 11g R2可支持
使用extent maps來記錄文件到磁盤的映射
6.I/O分佈
可使用條帶化和鏡像來保護數據
文件被平均分佈在一個組內的全部磁盤中
磁盤的添加與刪除,ASM會自動從新分配AU,所以也不存在碎片的問題
將I/O分配到不一樣的磁盤控制器提升了讀寫數據
7.Rebalance
ASM 文件被均衡地分佈在一個磁盤組的全部磁盤中
磁盤添加時,當前磁盤組加載的全部磁盤中共享的部分extent將會被移植到新的磁盤中,直到從新分佈完成才正常提供I/O均衡
磁盤刪除或故障時,刪除磁盤或故障磁盤的extent將會被均勻的分佈到剩餘的磁盤中
未使用force關鍵字drop磁盤操做,該磁盤上全部數據rebalance完畢後才被釋放.即完畢後磁盤脫機,置磁盤頭部狀態爲former
總之,任意存儲性質改變(磁盤增長,刪除,故障)都將致使rebalance,且由asm自動完成,無需人工干預,在一個時間段一般會鎖定一個盤區
8.ASM磁盤組的管理
一般建議建立兩個磁盤組,一個用於保存數據文件,一個用於保存閃回,備份恢復使用
Flash Recovery Area 的大小取決於閃回內容須要保留的時間長短
儘量將數據區與閃回區使用不一樣的物理通道
儘量一次性mount全部須要用到的磁盤
建議使用性能,磁盤大小相近的磁盤。假定兩個故障組FG1,FG2各使用一塊磁盤,則FG1內的磁盤應保持與FG2內的磁盤大小相同,
不然會以最小的磁盤空間做爲可以使用空間
9.ASM磁盤組的管理方式
SQLPlus
OEM
DBCA
ASMCMD
2、ASM磁盤建立及管理
1.查看ASM配置磁盤搜索信息
SQL> show parameter instance_type
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_type string ASM
SQL> show parameter asm_diskst
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_diskstring string /dev/oracleasm/disks/VOL*
2.使用oracleasm建立磁盤
[root@oradb ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdd1
Marking disk "VOL1" as an ASM disk: [ OK ]
[root@oradb ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdd2
Marking disk "VOL2" as an ASM disk: [ OK ]
[root@oradb ~]# /etc/init.d/oracleasm createdisk VOL3 /dev/sde1
Marking disk "VOL3" as an ASM disk: [ OK ]
[root@oradb ~]# /etc/init.d/oracleasm createdisk VOL4 /dev/sde2
Marking disk "VOL4" as an ASM disk: [ OK ]
[root@oradb ~]# /etc/init.d/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4
3.建立磁盤組語法
CREATE DISKGROUP diskgroup_name
[ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ]
[ FAILGROUP failgroup_name ]
DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ] ...;
4.建立磁盤組
SQL> create diskgroup DG1 normal redundancy disk '/dev/oracleasm/disks/VOL1' name VOL1;
create diskgroup DG1 normal redundancy disk '/dev/oracleasm/disks/VOL1' name VOL1
*
ERROR at line 1:
ORA-15018: diskgroup cannot be created --標準冗餘至少須要兩塊磁盤
ORA-15072: command requires at least 2 failure groups, discovered only 1
SQL> create diskgroup DG1 normal redundancy
2 disk '/dev/oracleasm/disks/VOL1' name DG1_VOL1 ,'/dev/oracleasm/disks/VOL2' name DG1_VOL2;
SQL> create diskgroup DG2 normal redundancy --使用標準冗餘建立磁盤組DG2
2 failgroup FG1 disk '/dev/oracleasm/disks/VOL3' name DG2_FG1_VOL3
3 failgroup FG2 disk '/dev/oracleasm/disks/VOL4' name DG2_FG2_VOL4;
SQL> create diskgroup DG_ext external redundancy disk '/dev/oracleasm/disks/VOL10' name DG_ext_VOL10; --外部冗餘
SQL> select group_number gno,name,state,type,total_mb,free_mb, --查看建立的磁盤組
2 required_mirror_free_mb rmfmb,usable_file_mb ufmb
3 from v$asm_diskgroup;
GNO NAME STATE TYPE TOTAL_MB FREE_MB RMFMB UFMB
---------- --------------- ----------- ------ ---------- ---------- ---------- ----------
1 DG1 MOUNTED NORMAL 3066 2964 0 1482
2 DG2 MOUNTED NORMAL 3066 2964 0 1482
3 DG_EXT MOUNTED EXTERN 100 50 0 50
SQL> select group_number gno,name,failgroup fgno,state,total_mb,free_mb,header_status from v$asm_disk;
GNO NAME FGNO STATE TOTAL_MB FREE_MB HEADER_STATU
---------- --------------- --------------- -------- ---------- ---------- ------------
2 DG2_FG2_VOL4 FG2 NORMAL 1537 1486 MEMBER
2 DG2_FG1_VOL3 FG1 NORMAL 1529 1478 MEMBER
1 DG1_VOL2 DG1_VOL2 NORMAL 1537 1486 MEMBER
1 DG1_VOL1 DG1_VOL1 NORMAL 1529 1478 MEMBER
3 DG_EXT_VOL10 DG_EXT_VOL10 NORMAL 100 50 MEMBER
5.磁盤組添加故障組和成員
--爲非故障組添加成員
SQL> alter diskgroup DG1 add disk '/dev/oracleasm/disks/VOL5' name DG1_VOL5;
--爲DG2添加一個故障組FG3及成員
SQL> alter diskgroup DG2
2 add failgroup FG3 disk '/dev/oracleasm/disks/VOL6' name DG2_FG3_VOL6; --添加故障組及成員
--爲DG2的個故障組各添加一個成員
SQL> alter diskgroup DG2
2 add failgroup FG1 disk '/dev/oracleasm/disks/VOL7'
3 add failgroup FG2 disk '/dev/oracleasm/disks/VOL8'
4 add failgroup FG3 disk '/dev/oracleasm/disks/VOL9';
6.刪除磁盤組中的磁盤,故障組中的成員,磁盤組
SQL> alter diskgroup DG1 drop disk DG1_VOL5; --刪除磁盤組DG1中的磁盤VOL5
SQL> alter diskgroup DG2 drop disk DG2_0003; --刪除故障組中的單個成員
SQL> alter diskgroup DG2 drop disks in failgroup FG3; --刪除故障組及全部成員,注意此時爲drop disks 複數形式
SQL> alter diskgroup DG1 drop disk DG1_VOL4 --刪除磁盤組中的磁盤,同時添加故障組FG3
add failgroup FG3 disk '/dev/oracleasm/disks/VOL9' name DG1_VOL11;
SQL> drop diskgroup DG1; --刪除磁盤組
7.調整磁盤組的容量
----故障組FG3的容量將被調整到G,若是磁盤空間不足,則調整失敗
SQL> alter diskgroup DG2 resize disks in failgroup FG3 size 10G;
8.手動Rebalance
SQL> alter diskgroup DG2 rebalance power 3 wait;
9.磁盤組的加載與卸載及內部一致性檢查
SQL> alter diskgroup all dismount;
SQL> alter diskgroup DG2 mount;
SQL> alter diskgroup DG2 check all;
10.查看磁盤組的partner
SQL> select name,state,type from v$asm_diskgroup where group_number=3; --查看磁盤組DG3的信息
NAME STATE TYPE
--------------- ----------- ------
DG3 MOUNTED NORMAL
SQL> select grp,disk,number_kfdpartner from x$kfdpartner where grp=3;
GRP DISK NUMBER_KFDPARTNER
---------- ---------- -----------------
3 0 1 --磁盤組DG3使用了3個磁盤,且冗餘度爲標準冗餘
3 0 2 --磁盤組0的partner 爲磁盤組1,2
3 1 0 --磁盤組1的partner 爲磁盤組0,2
3 1 2
3 2 0 --磁盤組2的partner 爲磁盤組0,1
3 2 1
3、磁盤組中目錄、文件的管理
1.爲磁盤組增長目錄
SQL> alter diskgroup DG2 add directory '+DG2/datafile'; --爲磁盤組增長目錄
SQL> alter diskgroup DG2 rename directory '+DG2/datafile' to '+DG2/dtfile'; --重命名目錄
SQL> alter diskgroup DG2 drop directory '+DG2/dtfile'; --刪除目錄
SQL> alter diskgroup DG2 add directory '+DG2/asmdb/datafile'; --爲磁盤組增長目錄
alter diskgroup DG2 add directory '+DG2/asmdb/datafile'
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15173: entry 'asmdb' does not exist in directory '/ ' --收到錯誤提示,asmdb目錄不存在,必需要先建立
SQL> alter diskgroup DG2 add directory '+DG2/asmdb/'; --首先添加asmdb
SQL> alter diskgroup DG2 add directory '+DG2/asmdb/datafile'; --再次添加目錄成功
2.爲文件添加別名,重命名別名
SQL> alter diskgroup DG1 add alias '+DG1/asmdb/datafile/users.dbf' --添加別名
2 for '+DG1/asmdb/datafile/users.263.734885485' ;
SQL> select name,group_number,file_number,alias_index,alias_directory,system_created
2 from v$asm_alias where file_number=263;
NAME GROUP_NUMBER FILE_NUMBER ALIAS_INDEX A S
------------------------- ------------ ----------- ----------- - -
USERS.263.734885485 1 263 215 N Y
users.dbf 1 263 216 N N
SQL> alter diskgroup DG1 rename alias '+DG1/asmdb/datafile/users.dbf' --重命名一個別名
2 to '+DG1/asmdb/datafile/users01.dbf';
SQL> select name,group_number,file_number,alias_index,alias_directory,system_created
2 from v$asm_alias where file_number=263;
NAME GROUP_NUMBER FILE_NUMBER ALIAS_INDEX A S
------------------------- ------------ ----------- ----------- - -
USERS.263.734885485 1 263 215 N Y
users01.dbf 1 263 216 N N
3.爲文件刪除別名
SQL> alter diskgroup DG1 drop alias '+DG1/asmdb/datafile/users01.dbf';
4、TEMPLATE的管理
TEMPLATE是一個模板,爲數據庫中新增的文件定義了缺省分配單元大小,以及冗餘級別。對於不一樣類型的文件,使用了不一樣的AUs以及
不一樣的冗餘度。如對控制文件採用高度冗餘,條帶使用精細化條帶(128kb),而參數文件,數據文件則採用標準冗餘,粗級別條帶(1MB)。
這個特性正是Oracle asm 管理不一樣於外部冗餘的特性,便可以基於文件的不一樣屬性而使用不一樣級別的冗餘度和不一樣大小的條帶化分配單
元。固然,咱們能夠根據不一樣的需求來修改該模板,使得建立新的文件時根據須要來應用其冗餘和條帶花特性。系統管理人員能改變系統缺
省template, 但不能刪除該刪除,管理員能增長本身的template,而後在該模板上建立數據文件。
下面是缺省狀況下DG1中新增文件所使用的缺省的條帶化及其冗餘級別
SQL> select * from v$asm_template where group_number=1;
GROUP_NUMBER ENTRY_NUMBER REDUND STRIPE S NAME
------------ ------------ ------ ------ - -----------------------------------
1 0 MIRROR COARSE Y PARAMETERFILE
1 1 MIRROR COARSE Y DUMPSET
1 2 HIGH FINE Y CONTROLFILE
1 3 MIRROR COARSE Y ARCHIVELOG
1 4 MIRROR FINE Y ONLINELOG
1 5 MIRROR COARSE Y DATAFILE
1 6 MIRROR COARSE Y TEMPFILE
1 7 MIRROR COARSE Y BACKUPSET
1 8 MIRROR COARSE Y AUTOBACKUP
1 9 MIRROR COARSE Y XTRANSPORT
1 10 MIRROR COARSE Y CHANGETRACKING
1 11 MIRROR FINE Y FLASHBACK
1 12 MIRROR COARSE Y DATAGUARDCONFIG
1.建立TEMPLATE的語法
ALTER DISKGROUP disk_group_name ADD TEMPLATE template_name
ATTRIBUTES ([{MIRROR|HIGH|UNPROTECTED}] [{FINE|COARSE}]);
2.添加TEMPLATE
SQL> alter diskgroup DG1 add template template_one attributes (high fine);
SQL> alter diskgroup DG1 add template template_two attributes (unprotected);
3.修改已存在的TEMPLATE
SQL> alter diskgroup DG1 alter template template_one attributes (coarse);
4.刪除TEMPLATE
SQL> alter diskgroup DG1 drop template template_two;
5.基於模板建立數據文件
SQL> create tablespace test datafile '+DG1/asmdb/datafile/test.dbf(template_one)' size 10M;
6.查看當前系統中文件使用的模板
SQL> select name,redundancy,striped
2 from v$asm_alias a join v$asm_file b
3 on a.file_number=b.file_number
4 and a.group_number=b.group_number
5 order by name;
NAME REDUND STRIPE
----------------------------------- ------ ------
Current.256.734885363 HIGH FINE
SYSAUX.260.736463679 MIRROR COARSE
TBS_RMAN.265.735409761 MIRROR COARSE
TEMP.262.734885475 MIRROR COARSE
SYSTEM.259.734885389 MIRROR COARSE
5、使用OMF 建立ASM文件涉及的一些參數
DB_CREATE_FILE_DEST --Oracle建立數據文件、臨時文件時,在未明確指定路徑的狀況下的缺省路徑
--當db_create_online_log_dest_n未指定時,也做爲聯機日誌文件和控制文件的缺省路徑
DB_CREATE_ONLINE_LOG_DEST_n --Oracle建立聯機日誌文件和控制文件時,在未明確指定路徑的狀況下的缺省路徑
DB_RECOVERY_FILE_DEST --適用於rman, archivelog,onlinelog
CONTROL_FILES
LOG_ARCHIVE_DEST_n
LOG_ARCHIVE_DEST
STANDBY_ARCHIVE_DEST
查看OMF相關參數的設置
SQL> show parameter db_reco
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string +RECOVERYDEST
db_recovery_file_dest_size big integer 1500M
SQL> show parameter db_create
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +DG1
有關OMF請參考:Oralce OMF 功能詳解
6、ASM 磁盤的相關視圖
v$asm_disk(_stat) --查看磁盤及其狀態信息
v$asm_diskgroup(_stat) --查看磁盤組及其狀態信息
v$asm_operation --查看當前磁盤的操做信息
v$asm_client --返回當前鏈接的客戶端實例信息
v$asm_file --返回asm文件的相關信息
v$asm_template --返回asm文件樣本的相關信息
v$asm_alias --返回asm文件的別名信息
轉:http://blog.csdn.net/leshami/article/details/6134071