說明:文章是用windows live writer自動上載的,有些特殊符號顯示不正確,如“>”顯示爲“>”。須修改之處太多,無暇修改。閱讀不便之處,請見諒!
特點:
-
ASM能代替外部LVM或FS的功能,不依賴外部數據存儲結構。
-
ASM內含多種存儲冗餘功能如鏡像,不依賴外部數據冗餘功能。
-
能夠自動將數據均衡分佈在磁盤組內所有磁盤中,從而提高系統性能。
-
跨平臺使用,配置和管理界面統一,簡化了用戶管理。
1、在linux下須安裝相應補丁包和驅動程序(按以下順序安裝):
# rpm -ivh oracleasm-support-2.1.3-1.el5.i386.rpm
# rpm -ivh oracleasm-2.6.18-164.el5-2.0.5-1.el5.rpm
# rpm -ivh oracleasmlib-2.0.4-1.el5.i386.rpm
在商用unix下是不用安裝這些驅動程序的,如AIX下直接使用rhdisk。實際上,在linux下也可以直接使用磁盤或磁盤分區(須轉換爲裸設備),後面會有介紹。
2、配置ASM環境
# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.
This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting <ENTER> without typing an
answer will keep that current value. Ctrl-C will abort.
Default user to own the driver interface []: oracle
Default group to own the driver interface []: oinstall
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]:
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver: [ OK ]
Scanning the system for Oracle ASMLib disks: [ OK ]
若配置後顯示失敗(failure),則檢查oracleasm的版本是否與操作系統內核版本一致。
檢查方法:#uname –r是否與oracleasm-2.6.18-164.el5-2.0.5-1.el5.rpm 是否對應,若不一致則到下面網站下載:http://www.oracle.com/technetwork/topics/linux/downloads/rhel5-084877.html。若檢查版本是一致的,則可嘗試執行如下命令:# oracleasm update-driver。
3、創建和刪除ASM磁盤
創建ASM磁盤:
# /etc/init.d/oracleasm createdisk data_vol01_sdb5 /dev/sdb5
Marking disk "data_vol01_sdb5" as an ASM disk: [ OK ]
# /etc/init.d/oracleasm createdisk data_vol02_sdb6 /dev/sdb6
Marking disk "data_vol02_sdb6" as an ASM disk: [ OK ]
列出ASM磁盤:
# /etc/init.d/oracleasm listdisks
DATA_VOL01_SDB5
DATA_VOL02_SDB6
FLASH_VOL_SDB1
刪除ASM磁盤:
# /etc/init.d/oracleasm deletedisk FLASH_VOL_SDB1
Removing ASM disk "FLASH_VOL_SDB1": [ OK ]
4、創建ASM磁盤組:
(1)啓動dbca
# su - oracle
$ dbca
(2)啓動CSS服務
提示用root用戶運行$ORACLE_HOME/bin/localconfig add,使CSS(Oracle Cluster Synchronization Service,集羣同步服務)啓動並加入inittab文件,使其開機自動啓動。
# /u01/db_1/bin/crsctl check cssd
CSS appears healthy
css服務正常。
(3)設置ASM實例的sys用戶密碼
(4)啓動ASM實例
(5)創建磁盤組
三種冗餘模式:
- High:數據將鏡像兩份,磁盤組中至少3個磁盤。
- Normal:數據鏡像一份,磁盤組中至少2個磁盤。
- Extenal:外部提供數據保護,如:RAID盤。
磁盤的八種狀態:
-
UNKNOWN - Automatic Storage Management disk header has not been read
-
CANDIDATE - Disk is not part of a disk group and may be added to a disk group with the ALTER DISKGROUP statement
-
INCOMPATIBLE - Version number in the disk header is not compatible with the Automatic Storage Management software version.
-
PROVISIONED - Disk is not part of a disk group and may be added to a disk group with the ALTER DISKGROUP statement. The PROVISIONED header status is different from the CANDIDATE header status in that PROVISIONED implies that an additional platform-specific action has been taken by an administrator to make the disk available for Automatic Storage Management.
-
MEMBER - Disk is a member of an existing disk group. No attempt should be made to add the disk to a different disk group. The ALTER DISKGROUP statement will reject such an addition unless overridden with the FORCE option
-
FORMER - Disk was once part of a disk group but has been dropped cleanly from the group. It may be added to a new disk group with the ALTER DISKGROUP statement.
-
CONFLICT - Automatic Storage Management disk was not mounted due to a conflict
-
FOREIGN - Disk contains data created by an Oracle product other than ASM. This includes datafiles, logfiles, and OCR disks.
冗餘方式爲normal,成員盤兩個,則取兩盤中容量最小爲可用空間。但在normal和high方式下,磁盤組的可用容量還與failgroup組中的磁盤有關,後面會詳細介紹。
5、使用裸設備創建ASM磁盤組:
(1)創建裸設備
# vi /etc/udev/rules.d/60-raw.rules
ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="sdb2", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdb3", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="sdb5", RUN+="/bin/raw /dev/raw/raw4 %N"
KERNEL=="raw[1-4]",OWNER="oracle",GROUP="oinstall",MODE="640"
注:陰影部分,不可以有超過大於10的數。也就是說如果用這種方法改變裸設備的所主,設備編號則不能有大於10,如:raw10,raw11…等這樣的設備名。如果有可用chown改變。
# start_udev
Starting udev: [ OK ]
# ls –l /dev/raw
total 0
crw-r----- 1 oracle oinstall 162, 1 Jan 31 17:02 raw1
crw-r----- 1 oracle oinstall 162, 2 Jan 31 17:02 raw2
crw-r----- 1 oracle oinstall 162, 3 Jan 31 17:02 raw3
crw-r----- 1 oracle oinstall 162, 4 Jan 31 17:02 raw4
(2)創建磁盤組
# su - oracle
$ dbca
由於/dev/sdb5即raw4已經是data_grp01的成員盤,所以不會顯示。
冗餘方式爲external,成員盤兩個,則磁盤組可用容量爲兩盤容量之和(不包括開銷)。
6、使用ASM磁盤組
創建數據庫(截圖步驟中部分省略):
$ export ORACLE_SID=+ASM
$ lsnrctl start
7、ASM磁盤維護
(1)數據庫啓動順序:CSS服務—>ASM實例—>Oracle數據庫實例
數據庫關閉順序:Oracle數據庫實例—>ASM實例—>CSS服務
(2)登入ASM實例
$ export ORACLE_SID=+ASM
$ sqlplus / as sysdba
SQL> show parameter name;
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
db_name string
db_unique_name string +ASM
global_names boolean FALSE
instance_name string +ASM
service_names string +ASM
(3)登錄數據庫
$export ORACLE_SID=asmora10
$ sqlplus / as sysdba
SQL> show parameter instance_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string asmora10
SQL> show parameter spfile;
NAME TYPE VALUE
----------------------------- ----------- ------------------------------
spfile string +DATA_GRP01/asmora10/spfileasm
ora10.ora
SQL> select name from v$datafile
2 union
3 select member from v$logfile
4 union
5 select name from v$controlfile
6 union
7 select name from v$tempfile;
NAME
--------------------------------------------------------------------------------
+DATA_GRP01/asmora10/controlfile/current.260.741893725
+DATA_GRP01/asmora10/datafile/sysaux.257.741893599
+DATA_GRP01/asmora10/datafile/system.256.741893597
+DATA_GRP01/asmora10/datafile/undotbs1.258.741893599
+DATA_GRP01/asmora10/datafile/users.259.741893599
+DATA_GRP01/asmora10/onlinelog/group_1.261.741893725
+DATA_GRP01/asmora10/onlinelog/group_2.262.741893737
+DATA_GRP01/asmora10/onlinelog/group_3.263.741893745
+DATA_GRP01/asmora10/tempfile/temp.264.741893765
+FLASH_GRP01/asmora10/controlfile/current.256.741893725
+FLASH_GRP01/asmora10/onlinelog/group_1.257.741893731
+FLASH_GRP01/asmora10/onlinelog/group_2.258.741893743
+FLASH_GRP01/asmora10/onlinelog/group_3.259.741893751
13 rows selected.
(4)查看磁盤組及ASM磁盤
$ export ORACLE_SID=+ASM
$ sqlplus / as sysdba
查看磁盤組狀況:
SQL> select name,state,type,total_mb,free_mb,usable_file_mb,offline_disks from v$asm_diskgroup;
NAME STATE TYPE TOTAL_MB FREE_MB USABLE_FILE_MB OFFLINE_DISKS
------------- ---------------------- ------------ ---------- ---------- -------------- -------------
DATA_GRP01 MOUNTED NORMAL 4784 2766 1383 0
FLASH_GRP01 MOUNTED EXTERN 3826 3597 3597 0
手動mount磁盤組:
SQL> alter diskgroup data_grp01 mount;
手動卸載磁盤組(在數據庫關閉情況下):
SQL> alter diskgroup flash_grp01 dismount;
查看磁盤狀況:
SQL> select name,header_status,mount_status,state,total_mb,path from v$asm_disk;
(5)添加、刪除磁盤組
添加磁盤組:
SQL> create diskgroup data_grp02 high redundancy disk 'ORCL:DATA_VOL03_SDB7','ORCL:DATA_VOL04_SDB8','ORCL:DATA_VOL03_SDB9';
刪除磁盤組:
SQL> drop diskgroup data_grp02;
(6)向external磁盤組中添加、刪除磁盤
添加磁盤到磁盤組
SQL> alter diskgroup flash_grp01 add disk '/dev/raw/raw3' name flash_grp01_03;
查看磁盤組中磁盤重新平衡狀況:
SQL> select group_number,operation,state,est_work,sofar,est_rate,est_minutes from v$asm_operation;
SQL> show parameter power
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
asm_power_limit integer 1
這參數指定重新平衡磁盤數據時暫用帶寬的力度。取值爲0~11。數值越大,對系統佔用的I/0資源越多,重新平衡動作將越快完成。此參數也可以在添加或刪除磁盤動作時指定,如:
SQL> alter diskgroup data_grp01 add disk 'ORCL:DATA_VOL03_SDB7' rebalance power 11;
從磁盤組中刪除磁盤:
SQL> alter diskgroup flash_grp01 drop disk flash_grp01_03;
(7)向磁盤組中添加、刪除磁盤
添加磁盤:
SQL> alter diskgroup data_grp01 add disk 'ORCL:DATA_VOL03_SDB7','ORCL:DATA_VOL04_SDB8';
刪除磁盤:
SQL> alter diskgroup data_grp01 drop disk 'DATA_VOL01_SDB5';
注意:如果刪除normal或high磁盤組中的磁盤,刪除磁盤後磁盤組中磁盤的數量必須不少於2個或3個。若不能滿足這個要求,則被刪除的磁盤會處於hung狀態。如下所示:
這種情況下應先放棄drop操作:
SQL> alter diskgroup data_grp01 undrop disks;
如果確定要刪除磁盤,則應先向組內添加一塊新的磁盤後再刪除:
SQL> alter diskgroup data_grp01 add disk 'ORCL:DATA_VOL02_SDB6' drop disk 'DATA_VOL03_SDB7';
8、Failgroup故障組
(1)概念
在normal和high保護模式下,ASM會將數據鏡像2份或三份,如(以normal磁盤組爲例):
兩個磁盤的情況下,數據A,B,C,D在兩個磁盤上互爲鏡像。
三個磁盤的情況下,數據A,B,C,D和鏡像在不同磁盤,並均勻分佈。
四個磁盤情況下,數據均勻分佈。考慮如下情況:
兩塊磁盤損壞,則數據A將面臨丟失。爲解決這個問題,引出failgroup的概念:在同一ASM磁盤組內,一個或多個磁盤組成一個failgroup,鏡像在不同failgroup間進行,同樣一個failgroup的不同磁盤間不允許做鏡像。這樣,如果同一個failgroup組內的磁盤處於同一磁盤控制器的情況下(比如,上圖中上面兩塊受損的磁盤由同一個SCSI控制器掌管),可以避免磁盤控制器損壞導致的數據損失。也就是說,同一ASM磁盤組內任意一個failgroup內的磁盤損壞都不會造成數據丟失。當然,這種情況在external模式下是不成立的。
所以,上述情況如果在每兩塊磁盤爲一個failgroup的情況下,數據分佈應該是這樣的:
(2)查看failgroup
SQL> select name,header_status,mount_status,total_mb,failgroup,path from v$asm_disk;
默認情況下,在創建ASM磁盤組時,每個磁盤均屬於以該磁盤名命名的failgroup。
(3)指定磁盤的failgroup
在normal/high保護模式下,failgroup至少有2/3個。
SQL> create diskgroup data_grp02 normal redundancy failgroup fg01 disk '/dev/raw/raw3' failgroup fg02 disk '/dev/raw/raw4';
SQL> alter diskgroup data_grp02 add failgroup fg01 disk 'ORCL:DATA_VOL03_SDB9' name data_grp02_0002;
從上面data_grp02磁盤組的可用空間可以看出,由於鏡像的原因,failgroup中磁盤的分配情況也會影響到磁盤組的可用空間。如下圖所示:
(4)刪除failgroup中磁盤
SQL> alter diskgroup data_grp02 drop disk 'DATA_GRP02_0001';
failgroup中最後一個磁盤不能被刪除。
SQL> alter diskgroup data_grp02 undrop disks;
9、手工控制ASM
$ export ORACLE_SID=+ASM
$ asmcmd
ASMCMD> ?
commands:
--------
cd
du
find
help
ls
lsct
lsdg
mkalias
mkdir
pwd
rm
rmalias
ASMCMD> ls -l
State Type Rebal Unbal Name
MOUNTED NORMAL N N DATA_GRP01/
MOUNTED NORMAL N N DATA_GRP02/
DISMOUNTED N N FLASH_GRP01/
ASMCMD> cd data_grp02
ASMCMD> ls
ASMCMD> mkdir ttt
ASMCMD> ls -l
Type Redund Striped Time Sys Name
N ttt/
ASMCMD> lsdg
State Type Rebal Unbal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Name
MOUNTED NORMAL N N 512 4096 1048576 7176 5093 2392 1350 0 DATA_GRP01/
MOUNTED NORMAL N N 512 4096 1048576 7175 7071 2870 2100 0 DATA_GRP02/
DISMOUNTED N N 512 4096 1048576 0 0 0 0
10、裸設備遷移至ASM環境
待續。。。