您好,登錄后才能下訂單哦!
這篇文章主要介紹“Oracle11g RAC下ASM的管理與維護方法是什么”,在日常操作中,相信很多人在Oracle11g RAC下ASM的管理與維護方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Oracle11g RAC下ASM的管理與維護方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
一, 基本維護 :
注意: 以下除OS之外的命令及過程基本都可以通過ASMCA中的ASM相關操作以及Oracle Enterprise Mananger 來管理 .
1. 查看ASM磁盤及磁盤組 :
--SQL查看有哪些磁盤組 .
[root@rac01 ~]# su - grid
[grid@rac01 ~]$ sqlplus "/as sysasm"
SQL> select group_number , name , state, type from v$asm_diskgroup ;
GROUP_NUMBER NAME STATE TYPE
------------ ------------------------------ ----------- ------
1 OCR_VOTE MOUNTED EXTERN
2 ORADATA MOUNTED EXTERN
3 ORAFLASH MOUNTED EXTERN
通過一些字段total_mb及free_mb 等可以看出磁盤組的空間使用情況.
-- 通過SQL語句查看ASM磁盤
SQL> set line 2000
SQL> select group_number, name,failgroup, path from v$asm_disk;
GROUP_NUMBER NAME FAILGROUP PATH
------------ ---------- -------------- ----------------------------------------------------------------
2 ASMDATA01 ASMDATA01 ORCL:ASMDATA01
3 ASMDATA02 ASMDATA02 ORCL:ASMDATA02
1 OCR_VOTE01 OCR_VOTE01 ORCL:OCR_VOTE01
通過group_number可以將磁盤與磁盤組聯系起來(一個磁盤組可以對應多個磁盤).
這里可以看到磁盤OCR_VOTE01對應OCR_VOTE磁盤組, 磁盤ASMDATA01對應ORADATA磁盤組, 磁盤ASMDATA02 對應ORAFLASH 磁盤組 (建議名稱一致比較好) 。
--通過asmcmd查看磁盤組(每個磁盤組表現為一個目錄) :
[root@rac01 ~]# su - grid
[grid@rac01 ~]$ asmcmd
ASMCMD> ls -al
State Type Rebal Name
MOUNTED EXTERN N OCR_VOTE/
MOUNTED EXTERN N ORADATA/
MOUNTED EXTERN N ORAFLASH/
備注 : 或者 ASMCMD> lsdg
-- 通過OS下oracleasm 命令查看ASM磁盤 .
[root@rac01 bin]# /usr/sbin/oracleasm listdisks
ASMDATA01
ASMDATA02
OCR_VOTE01
2. 認識ASM相關路徑 :
通過asmcm 命令可以看到ASM會根據dbca時制定的datafile路徑, 在ORADATA磁盤組下面建立一些默認的路徑 (一般是 db_name 下ARCHIVELOG/ , CONTROLFILE/,DATAFILE/ , ONLINELOG/ , PARAMETERFILE/ , TEMPFILE/ , 目錄都是大寫, 其中后面小寫的arch是用戶自己建的, SYS字段為Y的都是系統自建的, N是用戶定義的 )
[root@rac01 bin]# su - grid
[grid@rac01 ~]$ asmcmd
ASMCMD> ls
OCR_VOTE/
ORADATA/
ORAFLASH/
ASMCMD> cd oradata
ASMCMD> ls
RACDB/
ASMCMD> cd racdb
ASMCMD> ls -l
Type Redund Striped Time Sys Name
Y ARCHIVELOG/
Y CONTROLFILE/
Y DATAFILE/
Y ONLINELOG/
Y PARAMETERFILE/
Y TEMPFILE/
N arch/
N control01.ctl => +ORADATA/RACDB/CONTROLFILE/Current.256.739387263
N control02.ctl => +ORADATA/RACDB/CONTROLFILE/Current.257.739387265
N redo01.log => +ORADATA/RACDB/ONLINELOG/group_1.258.739387273
N redo02.log => +ORADATA/RACDB/ONLINELOG/group_2.259.739387281
N redo03.log => +ORADATA/RACDB/ONLINELOG/group_3.266.739393547
N redo04.log => +ORADATA/RACDB/ONLINELOG/group_4.267.739393547
N spfileracdb.ora => +ORADATA/RACDB/PARAMETERFILE/spfile.268.739393555
ASMCMD>
--歸檔路徑ARCHIVELOG :
通過oracle數據庫參數文件看到歸檔路徑 :
SQL> show parameter log_archive_dest
log_archive_dest_1 string LOCATION=+ORADATA/RACDB/arch
可以看到歸檔路徑 " +ORADATA/RACDB/arch " , 那么 +ORADATA/RACDB/ARCHIVELOG
下面又是保存的什么文件呢 ?
ASMCMD> pwd
+oradata/racdb/arch -- 查看參數中的歸檔路徑
ASMCMD> ls -l
Type Redund Striped Time Sys Name
N 1_204_739387258.arc =>
+ORADATA/RACDB/ARCHIVELOG/2011_11_28/thread_1_seq_204.478.768441403
N 1_205_739387258.arc =>
+ORADATA/RACDB/ARCHIVELOG/2011_11_29/thread_1_seq_205.481.768443221
N 1_206_739387258.arc =>
+ORADATA/RACDB/ARCHIVELOG/2011_11_29/thread_1_seq_206.482.768443233
N 1_207_739387258.arc =>
+ORADATA/RACDB/ARCHIVELOG/2011_11_29/thread_1_seq_207.483.768443239
用戶自己定義的歸檔格式以及歸檔路徑指向ASM自動建立的目錄及文件, 自定義生成的歸檔相當于快捷方式(或軟連接), 實際文件為ASM默認路徑的歸檔文件。
也可以手工為Oracle ASM Filename 生成別名:
ALTER DISKGROUP ORADATA ADD ALIAS
'+oradata/racdb/datafile/test01.dbf'
FOR '+oradata/racdb/datafile/TEST.340.740166807' ;
ASMCMD> pwd
+oradata/racdb/ARCHIVELOG --查看ASM系統自己默認的歸檔路徑
ASMCMD> ls -l
Type Redund Striped Time Sys Name
Y 2011_11_28/
Y 2011_11_29/
Y 2011_11_30/
歸檔文件是按照每天來進行存儲的 , 并且有目錄分開 .
ASMCMD> cd 2011_11_29/
ASMCMD> ls -l
Type Redund Striped Time Sys Name
ARCHIVELOG UNPROT COARSE NOV 29 00:00:00 Y thread_1_seq_205.481.768443221
ARCHIVELOG UNPROT COARSE NOV 29 00:00:00 Y thread_1_seq_206.482.768443233
ARCHIVELOG UNPROT COARSE NOV 29 00:00:00 Y thread_1_seq_207.483.768443239
ARCHIVELOG UNPROT COARSE NOV 29 00:00:00 Y thread_1_seq_208.485.768443253
ARCHIVELOG UNPROT COARSE NOV 29 00:00:00 Y thread_1_seq_209.486.768443277
--控制文件路徑 CONTROLFILE :
ASMCMD> cd racdb
ASMCMD> ls -l
Type Redund Striped Time Sys Name
N control01.ctl => +ORADATA/RACDB/CONTROLFILE/Current.256.739387263
N control02.ctl => +ORADATA/RACDB/CONTROLFILE/Current.257.739387265
查看初始化參數文件位置, 實際文件也是類似軟鏈接方式 :
SQL> show parameter control
NAME TYPE VALUE
------------------------------------ ----------- ----------------------------
control_files string +ORADATA/racdb/control01.ctl,
+ORADATA/racdb/control02.ctl
如何增加控制文件呢 ? 例子如下:
SQL> alter database mount database;
SQL> alter database backup controlfile to '+ORADATA/racdb/control02.ctl';
SQL> alter database backup controlfile to '+ORADATA/racdb/control03.ctl';
SQL> alter system set control_files='+ORADATA/racdb/control01.ctl','+DATA/racdb/control02.ctl','+DATA/racdb/control03.ctl'
scope=spfile;
SQL> startup mount
--數據文件路徑 DATAFILE :
ASMCMD> pwd
+oradata/racdb/datafile
ASMCMD>
ASMCMD> ls -l
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE OCT 29 18:00:00 Y BASE_DATA.317.754072293
DATAFILE UNPROT COARSE OCT 29 18:00:00 Y BASE_DATA.318.754072319
DATAFILE UNPROT COARSE OCT 29 18:00:00 Y BASE_DATA.319.754072331
DATAFILE UNPROT COARSE OCT 29 18:00:00 Y BASE_DATA.320.754072345
N BASE_DATA01.DBF => +ORADATA/RACDB/DATAFILE/BASE_DATA.317.754072293
N BASE_DATA02.DBF => +ORADATA/RACDB/DATAFILE/BASE_DATA.318.754072319
N BASE_DATA03.DBF => +ORADATA/RACDB/DATAFILE/BASE_DATA.319.754072331
N BASE_DATA04.DBF => +ORADATA/RACDB/DATAFILE/BASE_DATA.320.754072345
可以看出鏈接的名稱及對應的實體文件名稱都出現在 datafile目錄下, 當然并不是每個實體文件都有一個對應的鏈接的文件名稱, 例如初始建立數據庫的時候指定 +ORADATA 磁盤組后, 數據庫會自動建立初始數據文件, 那時候的文件就只有系統生成的, 而沒有用戶指定的名稱(鏈接名稱) , 例如上面例子中的 LOGMNRTS.321.754072935 , SYSTEM.263.754063787 等 .
而在加入datafile或建立表空間時, 如果只是指定 +ORADATA, 而不明確寫出路徑及文件名稱 , 那么就會生成系統自建文件而沒有鏈接名稱, 如果文件使用類似' +ORADATA/racdb/datafile/mytbs01.dbf ' , 那么就會生成系統自建文件及對應的鏈接文件 .
同樣可以利用ALTER DISKGROUP XX ADD ALIAS 增加別名.
----------------------------------------------------------------------------
-- 認識文件名
BASE_DATA.317.754072293 是表空間名+文件編號.Incarnation .
+group/dbname/file type/tag.file.incarnation 格式中分別是磁盤組名, file type是Oracle文件類型, tag一般對一個表空間名, file.incarnation 結合在一起確保唯一性.
----------------------------------------------------------------------------
測試 : 新增數據文件或表空間
CREATE TABLESPACE MYTBS DATAFILE
'+ORADATA/racdb/datafile/mytbs01.dbf ' SIZE 10M AUTOEXTEND OFF
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL UNIFORM. SIZE 5M
BLOCKSIZE 16K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON ;
或者
CREATE TABLESPACE TONYTBS DATAFILE
'+ORADATA' SIZE 10M AUTOEXTEND ON NEXT 5M MAXSIZE 1024M
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL UNIFORM. SIZE 5M
BLOCKSIZE 16K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON ;
增加數據文件
ALTER TABLESPACE MYTBS ADD DATAFILE '+ORADATA' SIZE 10M AUTOEXTEND OFF ;
如果設置了初始化參數db_create_file_dest(默認為空),連磁盤組名都不需要寫了,例如:
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +ORADATA
SQL> ALTER TABLESPACE MYTBS ADD DATAFILE SIZE 10M AUTOEXTEND OFF ;
tablespace altered.
Tips :
對于現有系統想遷入ASM存儲,最簡單的方式,莫過于使用RMAN了
3個語句建立完畢后, 查看系統文件:
[root@rac01 ~]# su - grid
[grid@rac01 ~]$
[grid@rac01 ~]$ asmcmd
ASMCMD> ls
OCR_VOTE/
ORADATA/
ORAFLASH/
ASMCMD> cd oradata/racdb
ASMCMD> ls -l
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y MYTBS.504.768590521
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y MYTBS.505.768590741
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y SYSAUX.261.739387301
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y SYSTEM.260.739387283
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y TEST.340.740166807
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y TEST.341.740166937
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y TONYTBS.506.768590761
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y UNDOTBS1.262.739387315
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y UNDOTBS2.264.739387351
DATAFILE UNPROT COARSE NOV 30 17:00:00 Y USERS.265.739387361
N mytbs01.dbf => +ORADATA/RACDB/DATAFILE/MYTBS.504.768590521
N test01.dbf => +ORADATA/RACDB/DATAFILE/TEST.340.740166807
N test02.dbf => +ORADATA/RACDB/DATAFILE/TEST.341.740166937
我們可以看到, mytbs01 指定了路徑 '+ORADATA/racdb/datafile/mytbs01.dbf' , 所以顯示時既有mytbs01.dbf, 也有對應的 MYTBS.504.768590521 , 新加入的 MYTBS表空間文件只是寫了 '+ORADATA' , 生成文件為 MYTBS.505.768590741 , 同樣建立的TONYTBS也是, 對應文件為 TONYTBS.506.768590761 , 沒有鏈接文件 .
修改數據文件大小 (與文件系統操作相似) :
ALTER DATABASE DATAFILE '+DATA/wsjdell/datafile/users.256.754063811' RESIZE 200M;
對于歸檔目錄及數據文件目錄, 還有一個比較關心的問題就是空間問題, 我們如何來判斷磁盤組需要加入新的磁盤或新建磁盤組來滿足數據增長呢 ?
ASMCMD> pwd
+oradata/racdb/datafile
ASMCMD> du
Used_MB Mirror_used_MB
2949 2949
ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files
Name
MOUNTED EXTERN N 512 4096 1048576 10236 9840 0 9840 0 N OCR_VOTE/
MOUNTED EXTERN N 512 4096 1048576 10236 465 0 465 0 N ORADATA/
MOUNTED EXTERN N 512 4096 1048576 4094 3999 0 3999 0 N ORAFLASH/
[root@rac01 ~]# su - grid
[grid@rac01 ~]$ sqlplus "/as sysasm"
SQL> select name , total_mb, free_mb,cold_used_mb from v$asm_diskgroup ;
NAME TOTAL_MB FREE_MB COLD_USED_MB
------------------------------ ---------- ---------- ------------
OCR_VOTE 10236 9840 396
ORADATA 10236 465 9771
ORAFLASH 4094 3999 95
可以看到通過asmcmd 及 asm 實例中的 sql 語句查詢出來的 free_mb(或Usable_file_MB)大小是一致的 .
表空間的使用情況需要通過數據庫SQL或輔助工具(如Toad)來進行查看.
--在線日志文件路徑 ONLINELOG
ASMCMD> pwd
+oradata/racdb
ASMCMD> ls -l
Type Redund Striped Time Sys Name
Y ARCHIVELOG/
Y CONTROLFILE/
Y DATAFILE/
Y ONLINELOG/
Y PARAMETERFILE/
Y TEMPFILE/
N arch/
N control01.ctl => +ORADATA/RACDB/CONTROLFILE/Current.256.739387263
N control02.ctl => +ORADATA/RACDB/CONTROLFILE/Current.257.739387265
N redo01.log => +ORADATA/RACDB/ONLINELOG/group_1.258.739387273
N redo02.log => +ORADATA/RACDB/ONLINELOG/group_2.259.739387281
N redo03.log => +ORADATA/RACDB/ONLINELOG/group_3.266.739393547
N redo04.log => +ORADATA/RACDB/ONLINELOG/group_4.267.739393547
N spfileracdb.ora => +ORADATA/RACDB/PARAMETERFILE/spfile.268.739393555
ASMCMD> cd onlinelog
ASMCMD> ls -l
Type Redund Striped Time Sys Name
ONLINELOG UNPROT COARSE NOV 30 17:00:00 Y group_1.258.739387273
ONLINELOG UNPROT COARSE NOV 30 17:00:00 Y group_2.259.739387281
ONLINELOG UNPROT COARSE NOV 30 17:00:00 Y group_3.266.739393547
ONLINELOG UNPROT COARSE NOV 30 17:00:00 Y group_4.267.739393547
和其他關鍵文件一樣, 在建庫的時候手工指定了目錄 +oradata/racdb , 所以畢竟
好辨認的名稱 redo01.log, redo02.log 等都以鏈接名稱方式存在 .
Redo logfile的冗余設置可以設置在不同的磁盤組上, 比如 ORADATA和ORAFLASH .
加入冗余組的方式和文件系統下一樣(唯一的區別是不能在file上加括號, 如果只加入一個member的話 ) .
alter database add logfile member '+ORAFLASH' to group 1 ;
alter database add logfile member '+ORAFLASH' to group 2 ;
alter database add logfile member '+ORAFLASH' to group 3 ;
alter database add logfile member '+ORAFLASH' to group 4 ;
加入后查詢 v$logfile 可以看到每組2個成員 .
ASMCMD> cd +oraflash
ASMCMD> ls
RACDB/
ASMCMD> cd racdb
ASMCMD> ls
ONLINELOG/
ASMCMD> ls -l
Type Redund Striped Time Sys Name
ONLINELOG UNPROT COARSE NOV 30 20:00:00 Y group_1.256.768602255
ONLINELOG UNPROT COARSE NOV 30 21:00:00 Y group_2.257.768603599
ONLINELOG UNPROT COARSE NOV 30 21:00:00 Y group_3.258.768603683
ONLINELOG UNPROT COARSE NOV 30 21:00:00 Y group_4.259.768603705
加入一個redo log group .
alter database add logfile group 5 ('+ORADATA' , '+ORAFLASH') size 50M ;
SQL> select member from v$logfile;
MEMBER
--------------------
+ORADATA/racdb/redo01.log
+ORADATA/racdb/redo02.log
+ORADATA/racdb/redo03.log
+ORADATA/racdb/redo04.log
+ORAFLASH/racdb/onlinelog/group_1.256.768602255
+ORAFLASH/racdb/onlinelog/group_2.257.768603599
+ORAFLASH/racdb/onlinelog/group_3.258.768603683
+ORAFLASH/racdb/onlinelog/group_4.259.768603705
+ORADATA/racdb/onlinelog/group_5.508.768604159
+ORAFLASH/racdb/onlinelog/group_5.260.768604161
10 rows selected.
SQL>
--參數文件路徑 PARAMETERFILE (DB參數文件, 非ASM實例參數文件)
ASMCMD> pwd
+oradata/racdb/parameterfile
ASMCMD> ls -l
Type Redund Striped Time Sys Name
PARAMETERFILE UNPROT COARSE NOV 30 17:00:00 Y spfile.268.739393555
ASMCMD>
--臨時文件路徑 TEMPFILE
ASMCMD> cd tempfile
ASMCMD> ls -l
Type Redund Striped Time Sys Name
TEMPFILE UNPROT COARSE NOV 30 17:00:00 Y TEMP.263.739387321
3. 擴充磁盤組大小
ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files
Name
MOUNTED EXTERN N 512 4096 1048576 10236 9840 0 9840 0 N OCR_VOTE/
MOUNTED EXTERN N 512 4096 1048576 10236 414 0 414 0 N ORADATA/
MOUNTED EXTERN N 512 4096 1048576 4094 3737 0 3737 0 N ORAFLASH/
通過lsdg或v$asm_diskgroup視圖我們發現磁盤組空間可能不夠了, 那么我們是新加入一個磁盤組呢, 還是在原來磁盤組基礎上加入新的磁盤呢 ?
為了更好的得到I/O性能 , 一般采用在磁盤組中加入新的磁盤 . ASM磁盤組支持動態擴展,我們可以向現有的磁盤組動態加入新的磁盤,新磁盤加入后,Oracle通過后臺RBAL進行Rebalance,將當前的數據均衡到新增加的磁盤上。Drop磁盤亦會Rebalance。
asm_power_limit 參數用于控制Rebalance的速度,取值1~11,power表示啟動的rebalance的進程RBAL的個數數字越大,平衡速度越快,默認值是1。但是該數字越大,可能因為Rebalance而影響性能, 一般為了平衡, 設置為 3~6之間。
加入新磁盤后, 假設為 /dev/sde, /dev/sdf , fdisk 劃分分區為 /dev/sde1, /dev/sdf1 .
[grid@rac01 ~]$ sqlplus "/as sysasm"
SQL*Plus: Release 11.2.0.1.0 Production on Wed Nov 30 23:04:08 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Real Application Clusters and Automatic Storage Management options
SQL> show parameter asm_power_limit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_power_limit integer 1
SQL> alter system set asm_power_limit=5 ; -- 修改power值 .
System altered.
或者使用
ALTER DISKGROUP diskgroupname REBALANCE POWER 5 ;
-- 查看已有的磁盤 .
SQL> select group_number, name from v$asm_disk order by 1;
GROUP_NUMBER NAME
------------ ------------------------------
0
1 OCR_VOTE01
2 ASMDATA01
3 ASMDATA02
-- 查看已有的磁盤組 .
SQL> select group_number, name from v$asm_diskgroup order by 1 ;
GROUP_NUMBER NAME
------------ ------------------------------
1 OCR_VOTE
2 ORADATA
3 ORAFLASH
創建新磁盤:
[root@rac01 ~]# /usr/sbin/oracleasm createdisk ASMDATA03 /dev/sde1
Writing disk header: done
Instantiating disk: done
[root@rac01 ~]# /usr/sbin/oracleasm listdisks
ASMDATA01
ASMDATA02
ASMDATA03
OCR_VOTE01
其他節點上:
[root@rac02 ~]# /usr/sbin/oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
[root@rac02 ~]# /usr/sbin/oracleasm listdisks
ASMDATA01
ASMDATA02
ASMDATA03
OCR_VOTE01
新磁盤ASMDATA03 需要加入到 ORADATA 磁盤組中:
[grid@rac01 ~]$ sqlplus "/as sysasm"
SQL> ALTER DISKGROUP ORADATA ADD DISK 'ORCL:ASMDATA03' ;
Diskgroup altered .
或者( 需要在初始參數指定 ASM_DISKSTRING = '/dev/*' )
SQL>ALTER DISKGROUP ORADATA ADD DISK '/dev/sde1' name ASMDATA03 ;
速度還是非常快的(可能是沒有多少數據需要在各磁盤間轉移), 大家可以找一些大的測試庫進行不同power值時的速度及性能測試 . 注意完畢后將asm_power_limit 值修改為默認的 1 .
SQL> alter system set asm_power_limit=1 ;
System altered.
----------------------------------------------------------------------------------------------------------------
注意, 如果擴容的磁盤組是Normal Redundant 的, 那么還需要failure group.
修改及新增磁盤組相關的語句類似 (需要設置初始參數ASM_DISKSTRING='/dev/*'):
具體參考:
http://docs.oracle.com/cd/E11882_01/server.112/e18951/asmdiskgrps.htm#CHDHHABI
一個磁盤組成failgroup (Normal):
ALTER DISKGROUP dgroup1 NORMAL REDUNDANCY
FAILGROUP fg1 DISK '/dev/sde1' NAME ASMDATA05
FAILGROUP fg2 DISK '/dev/sdf1' NAME ASMDATA06 ;
一個磁盤組成failgroup (High):
create diskgroup data2 high redundancy
failgroup fg1 disk '/dev/raw/raw3' name d2a
failgroup fg2 disk '/dev/raw/raw4' name d2b
failgroup fg3 disk '/dev/raw/raw5' name d2c;
多個磁盤組成failgroup (Normal):
CREATE DISKGROUP dgroup1 NORMAL REDUNDANCY
FAILGROUP controller1 DISK
'/dev/diska1',
'/dev/diska2',
'/dev/diska3',
'/dev/diska4'
FAILGROUP controller2 DISK
'/dev/diskb1',
'/dev/diskb2',
'/dev/diskb3',
'/dev/diskb4';
語法:
CREATE DISKGROUP diskgroup_name
[ { HIGH | NORMAL | EXTERNAL } REDUNDANCY ]
[ FAILGROUP failgroup_name ]
DISK [ NAME disk_name ] [ SIZE size_clause ] [ FORCE | NOFORCE ] ...;
-------------------------------------------------------------------------
可以通過v$asm_operation視圖來查看正在進行的操作 .
--------------------------------------------------------------------------
這里有幾點要注意:
(1), 首先 sqlplus登入需要 sysasm角色, 因為sysdba只能查看, 不能修改.
(2), add disk 后接的磁盤信息為 'ORCL:XXX' , XXX是listdisks看到的ASM磁盤label .
如果只是 add disk 'XXX' 會報錯.
(3), 同樣 add disk 后面直接寫 '/dev/sde1' 也是不行的, 會報權限錯誤.
--------------------------------------------------------------------------
通過asmcmd 查看磁盤組空間擴展情況 :
[root@rac02 ~]# su - grid
[grid@rac02 ~]$
[grid@rac02 ~]$ asmcmd
ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files
Name
MOUNTED EXTERN N 512 4096 1048576 10236 9840 0 9840 0 N OCR_VOTE/
MOUNTED EXTERN Y 512 4096 1048576 30709 20694 0 20694 0 N ORADATA/
MOUNTED EXTERN N 512 4096 1048576 4094 3737 0 3737 0 N ORAFLASH/
ASMCMD>
可以看到ORADATA 磁盤組的 Total_MB變成了30G (30709M), 顯然是
成功加入了20G 的 /dev/sde1 .
刪除磁盤組中的磁盤(同樣也需要設置power值來使RBAL速度加快) :
SQL> ALTER DISKGROUP ORADATA DROP DISK 'ASMDATA03' ;
Diskgroup altered.
如果執行后立刻查看的話, 可能ORADATA磁盤組大小不會變, 需要觀察v$asm_operation視圖來查看正在進行的操作, 完畢后才會變化, 執行drop命令后不等待和等待3分鐘后查看的結果如下:
ASMCMD> lsdg -- 馬上查看(大小沒有變化)
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files
Name
MOUNTED EXTERN N 512 4096 1048576 10236 9840 0 9840 0 N OCR_VOTE/
MOUNTED EXTERN Y 512 4096 1048576 30709 20694 0 20694 0 N ORADATA/
MOUNTED EXTERN N 512 4096 1048576 4094 3737 0 3737 0 N ORAFLASH/
ASMCMD>
ASMCMD> lsdg -- 等待3分鐘后查看 (當然數據量大的話等待時間更久)
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files
Name
MOUNTED EXTERN N 512 4096 1048576 10236 9840 0 9840 0 N OCR_VOTE/
MOUNTED EXTERN N 512 4096 1048576 10236 223 0 223 0 N ORADATA/
MOUNTED EXTERN N 512 4096 1048576 4094 3737 0 3737 0 N ORAFLASH/
可以看到 ORADATA 的total_mb 又變回 10G了 .
如希望ALTER DISKGROUP語句完成所有工作才返回用戶控制權的話,可在執行時附加REBALANCE WAIT子句,這樣該語句就會等待自動平衡的操作,直接所有操作完成才返回結果,當然在等待期間,如果你改主意了不愿意繼續等待,CTRL+C中斷即可獲得控制權,此時平衡的操作不受影響,會在后臺繼續進行。
ASMCMD> lsdsk -- ASMDATA03 磁盤消失.
Path
ORCL:ASMDATA01
ORCL:ASMDATA02
ORCL:OCR_VOTE01
注意 DROP DISK 只是將ASMDATA03 從磁盤組中刪除 :
[root@rac02 ~]# /usr/sbin/oracleasm listdisks
ASMDATA01
ASMDATA02
ASMDATA03
OCR_VOTE01
--------------------------------------------------------------
備注:
(1), 也可以只對某個diskgroup設置rebalance power, 比如:
alter diskgroup ORADATA rebalance power 8 ;
(2), 或者在命令中設置
alter diskgroup ORADATA add disk 'ORCL:ASMDATA03' rebalance power 8;
alter diskgroup ORADATA drop disk 'ASMDATA03' rebalance power 8;
--------------------------------------------------------------
需要注意的是, add 及 drop之后都需要等待一些時間再做針對此磁盤或磁盤組的動作, 否則可能報錯, 或者觀察v$asm_operation 來查看事務.
如下:
SQL> select * from v$asm_operation ;
GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE
------------ ----- ---- ---------- ---------- ---------- ---------- ----------
EST_MINUTES ERROR_CODE
----------- --------------------------------------------
2 REBAL RUN 8 8 173 6680 741
隔一段時間再次查看(直到相關事務從此視圖消失) :
SQL> select * from v$asm_operation ;
no rows selected
由于前面提到的ASM自動平衡的特性,上述語句返回后并不代表磁盤已經被刪除,此時后臺可能由于正忙碌地執行著IO重平衡的工作,因此如果在這個時候,DBA忽然意識到操作失誤,其實磁盤并不需要被刪除,那也可以馬上通過alter diskgroup dgname undrop disks語句來取消刪除的操作,例如:
SQL> alter diskgroup ORADATA undrop disks;
Diskgroup altered.
只要刪除操作還沒有真正完成,任務就會被取消,否則的話,上述語句也挽回不了什么了,如果希望挽回,那DBA只能再通過ADD語句將該磁盤重新加入到磁盤組了。
4. 增加新的磁盤組
-- 查看已有的磁盤 .
SQL> select group_number, name from v$asm_disk order by 1;
GROUP_NUMBER NAME
------------ ------------------------------
1 OCR_VOTE01
2 ASMDATA01
2 ASMDATA03
3 ASMDATA02
-- 查看已有的磁盤組 .
SQL> select group_number, name from v$asm_diskgroup order by 1 ;
GROUP_NUMBER NAME
------------ ------------------------------
1 OCR_VOTE
2 ORADATA
3 ORAFLASH
創建新磁盤 (/dev/sdf1):
[root@rac01 ~]# /usr/sbin/oracleasm createdisk ASMDATA04 /dev/sdf1
Writing disk header: done
Instantiating disk: done
[root@rac01 ~]# /usr/sbin/oracleasm listdisks
ASMDATA01
ASMDATA02
ASMDATA03
ASMDATA04
OCR_VOTE01
其他節點上:
[root@rac02 ~]# /usr/sbin/oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
Instantiating disk "ASMDATA04"
[root@rac02 ~]# /usr/sbin/oracleasm listdisks
ASMDATA01
ASMDATA02
ASMDATA03
ASMDATA04
OCR_VOTE01
開始建立磁盤組(這里是external模式, 具體語法參考文檔) :
在節點1 上建立新的磁盤組:
SQL> CREATE DISKGROUP ORAINDX EXTERNAL REDUNDANCY
DISK 'ORCL:ASMDATA04' ;
SQL> select group_number, name from v$asm_diskgroup ;
GROUP_NUMBER NAME
------------ ------------------------------
1 OCR_VOTE
2 ORADATA
3 ORAFLASH
4 ORAINDX
ASMCMD> lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files
Name
MOUNTED EXTERN N 512 4096 1048576 10236 9840 0 9840 0 N OCR_VOTE/
MOUNTED EXTERN N 512 4096 1048576 30709 20694 0 20694 0 N ORADATA/
MOUNTED EXTERN N 512 4096 1048576 4094 3737 0 3737 0 N ORAFLASH/
MOUNTED EXTERN N 512 4096 1048576 10236 10186 0 10186 0 N ORAINDX/
可以看到在節點1上都生效了. 但是其他節點沒有生效(lsdg, lsdsk都看不到),
需要手工掛載新磁盤組 .
SQL> ALTER DISKGROUP ORAINDX MOUNT ;
Diskgroup altered.
在其他節點上查看即可以看到了 :
SQL> select name from v$asm_diskgroup;
SQL> select name from v$asm_disk;
ASMCMD> lsdsk
ASMCMD> lsdg
5 , 刪除磁盤組
語法:drop diskgroup gpname, 如果刪除的diskgroup非空的話,直接執行上述語句會報錯,這時候可以通過附加including contents子句,來自動刪除該磁盤組中包含的文件。刪除磁盤組的操作會自動修改spfile中ASM_DISKGROUPS初始化參數的值(如果使用了SPFILE的話) .
-- Tips :
如果刪除的是文件的話,其關聯的別名(Alias)也會被自動刪除。
SQL> alter diskgroup asmdisk2 drop file '+ASMDISK2/repdb/datafile/temp01.dbf';
Diskgroup altered.
二 , ASM 實例相關
1. ASM 相關的權限及角色
安裝Grid Infrastructure時候的常用用戶及組:
Grid Infrastructure 操作系統用戶grid , 主組為oinstall, 輔助組為asmadmin, asmdba, asmoper
Oracle RAC 操作系統用戶 oracle , 主組為oinstall , 輔助組為dba, oper , asmdba
11g release2中oracle建議獨立地管理Grid Infrastructure和ASM實例 .
OSASM(asmadmin)用戶組
如果使用ASM,我們必須創建osasm(asmadmin)用戶組,該OSASM用戶組的成員將被賦予
SYSASM權限,以滿足組成員管理Oracle Clusterware和 ASM的權限需求。
OSDBA for ASM group(asmdba)用戶組
OSDBA(asmdba)用戶組的成員將被賦予讀寫訪問ASM文件的權限。GI/CRS擁有者用戶和
所有oracle數據庫軟件的擁有者必須是該組的成員。同時所有OSDBA(dba)用戶組的成員也必須是asmdba組的成員。
OSOPER for ASM(asmoper)用戶組
asmoper和osoper類似都是額外的可選擇創建的用戶組,創建該獨立的用戶組以滿足賦予
用戶一套受限的ASM實例管理權限(ASM的SYSOPER角色),該權限包括了啟動和停止ASM實例,
默認情況下OSASM(asmadmin)組成員將擁有所有SYSOPER的ASM管理權限。
grid用戶單獨安裝集群,比如包括asm實例,監聽資源,節點資源等
oracle用戶就只安裝oracle代碼
# groupadd oinstall
# groupadd asmadmin
# groupadd asmdba
# groupadd asmoper
# groupadd dba
# groupadd oper
#useradd -g oinstall -G asmadmin,asmdba,asmoper grid
#useradd -g oinstall -G dba, oper, asmdba oracle
具體代表含義參考 :
http://www.oracledatabase12g.com/archives/oracle-installation-os-user-groups.html
用戶組 所屬該組的用戶 用戶組描述
oinstall grid, oracle Oracle Inventory and Software Owner
dba oracle Database Administrator
asmadmin grid Oracle ASM Group
asmdba grid, oracle ASM Database Administrator Group
asmoper grid ASM Operator Group
oper oracle Database Operator
如果對oracle用戶沒賦予asmdba組的話,則會導致oracle用戶認不到diskgroup,
啟動對應節點實例失敗。
---------------------------------------------------------------------
備注 :
Oracle10g中還是使用sysdba管理asm實例,Oracle11g中使用一個新角色sysasm, 專用于
管理asm, 相當于針對asm實例的sysdba角色。 在Oracle11g RAC 中以grid用戶登入后 , 以
sysdba登入也是可以查看asm實例相關的狀態, 但是不能做變更, sysasm 角色連接后才
可以。
---------------------------------------------------------------------
2. ASM 實例
ASM 實例與 ORACLE 數據庫實例差不多, 都是由SGA和后臺進程組成, 區別在于
oracle實例管理的是數據庫,而asm實例只管理ASM磁盤組. 這里grid用戶是屬于
asmadmin組, 用于管理ASM,
[root@rac01 ~]# su - grid
[grid@rac01 ~]$ id
uid=501(grid) gid=501(oinstall) groups=501(oinstall),504(asmadmin),506(asmdba),507(asmoper)
[grid@rac01 ~]$export ORACLE_SID=+ASM1 (一般不用,因為grid用戶下只有一個ASM實例)
[grid@rac01 ~]$ env | grep ORA
ORA_NLS11=/u01/grid/11.2.0/nls/data
ORACLE_SID=+ASM1
ORACLE_BASE=/u01/grid/crs
ORACLE_TERM=vt100
ORACLE_HOME=/u01/grid/11.2.0
[grid@rac01 ~]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.1.0 Production on Sat Dec 3 07:13:39 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Real Application Clusters and Automatic Storage Management options
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string +ASM1
以grid用戶身份, 連接到ASM實例 , 使用sysdba 及 sysasm 角色都可以,
以sysdba登入也是可以查看asm實例相關的狀態 , 但是不能做變更,
sysasm 角色連接后才可以 .
A. ASM實例開啟及關閉
同樣的, ASM 實例也可以 startup nomount / mount / open / force .
nomount : 只是啟動實例 ;
mount / open : 啟動實例及加載磁盤組, open和mount一樣 ;
force : 先執行shutdown abort , 然后再startup ;
測試 :
[grid@rac01 ~]$ sqlplus / as sysasm
SQL> startup nomount
ASM instance started
Total System Global Area 120023424 bytes
Fixed Size 2082208 bytes
Variable Size 102775392 bytes
ASM Cache 25165824 bytes
SQL> select name,state from v$asm_diskgroup;
NAME STATE
------------------------------ -----------
ASMDISK1 DISMOUNTED
ASMDISK2 DISMOUNTED
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
+ASM1 STARTED
然后加載磁盤組,注意,不是alter database:
SQL> alter diskgroup all mount;
Diskgroup altered.
SQL> select name,state from v$asm_diskgroup;
NAME STATE
------------------------------ -----------
ASMDISK1 MOUNTED
ASMDISK2 MOUNTED
關閉ASM實例 : NORMAL/IMMEDIATE/TRANSACTIONAL/ABORT 幾個選項
與關閉普通數據庫實例一樣 :
SQL> shutdown immediate
ASM diskgroups dismounted
ASM instance shutdown
B. ASM 實例的初始化參數
ASM初始化也分spfile及pfile, 操作也相同. 和RDBMS數據庫比起來, 還是有一些差異
參數.
SQL> create pfile='/tmp/asminit.ora' from spfile;
File created.
因為ASM實例在內存占用方面非常小, 基本上100M內存空間就足夠了, 內存相關就不提了.
INSTANCE_TYPE : 在ASM中值為ASM , 在數據庫實例中是RDBMS .
ASM_POWER_LIMIT :指定磁盤rebalance的程度,有0-11個級別,默認值為1,指定
的級別越高,則rebalance的操作就會越快被完成(當然這也意味著這個時間段內將
占用更多的資源),指定級別較低的話,雖然rebalance操作會耗時更久,但對當前
系統的IO及負載影響會更少,這中間的度需要DBA根據實際情況衡量。另外,這個參
數指定的只是一個默認值,在操作過程中,即可以動態修改,也可以在語句級命令行
時指定power,覆蓋該默認值。
ASM_DISKSTRING :用最簡單的話說,就是設置ASM啟動時檢查的磁盤,該選項可以
同時指定多個值,并且支持通配符。比如說,只檢查/dev/dsk/下的設備,可以設置
該參數如下:/dev/dsk/*,默認情況下該參數為空,為空的話,表示ASM將查找系統
中所有ASM擁有讀寫權限的設備。
ASM_DISKGROUPS : 指定實例啟動或alter diskgroup all mount語句時要加載的磁
盤組,如果為空的話,那么實際就僅啟動到NOMOUNT狀態了。如果是使用SPFILE的話,
該參數一般不需要手動修改,ASM能夠自動更新該初始化參數中的值。
[grid@rac01 tmp]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.1.0 Production on Tue Nov 29 05:24:38 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Real Application Clusters and Automatic Storage Management options
SQL> show parameter
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
asm_diskgroups string ORADATA, ORAFLASH
asm_diskstring string
asm_power_limit integer 1
......
3. ASM 相關視圖
[root@rac01 ~]# su - oracle
[oracle@rac01 ~]$ sqlplus "/as sysdba"
SQL> select TABLE_NAME from dict where table_name like 'V$ASM_%';
TABLE_NAME
------------------------------
V$ASM_ACFSSNAPSHOTS
V$ASM_ACFSVOLUMES
V$ASM_ALIAS -- 記錄文件別名
V$ASM_ATTRIBUTE -- 記錄ASM磁盤組的屬性
V$ASM_CLIENT -- 當前連接的客戶端實例信息
V$ASM_DISK -- ASM管理的磁盤及磁盤組信息
V$ASM_DISKGROUP -- ASM磁盤組
V$ASM_DISKGROUP_STAT -- ASM磁盤組狀態, 大小
V$ASM_DISK_IOSTAT -- ASM磁盤組I/O狀態
V$ASM_DISK_STAT
V$ASM_FILE
TABLE_NAME
------------------------------
V$ASM_FILESYSTEM
V$ASM_OPERATION -- 當前磁盤的操作信息
V$ASM_TEMPLATE
V$ASM_USER
V$ASM_USERGROUP
V$ASM_USERGROUP_MEMBER
V$ASM_VOLUME
V$ASM_VOLUME_STAT
19 rows selected.
4. ASM 體系結構
ASM實例 :
1) RBAL: rebalancer進程,負責規劃ASM磁盤組的Reblance活動
2) ABRn: 是RBAL進程的子進程,真正完成Reblance活動
RDBMS實例 :
1) RBAL: 負責打開每個磁盤組的所有磁盤
2) ASMB: 這個進程作為ASM實例和數據庫實例之間的信息通道.這個進程負責與
ASM實例的通信,它先利用Diskgroup name從CSS獲得管理該Diskgroup的ASM實例的
連接串,然后建立到ASM的持久連接,兩個實例通過這條連接定期交換信息,同時也
是一種心跳機制.
3)O0nn 01-10:這組進程建立到ASM實例的連接,某些長時間操作比如創建數據文件,
RDBMS會通過這些進程向ASM發送信息
ASM Instance 與RDBMS 的交互
當ASM實例掛載一個磁盤組之后,ASM會把Disk Group Name, ASM Instance Name,
Oracle Home Path等信息注冊到CSS(Cluster Sychronization Service), 這些信息會被用
來構造Connect String. 當RDBMS啟動過程中需要訪問某個ASM File時, RDBMS會
和CSS聯系, 從CSS中獲取Connect String,然后發起一個到ASM實例的連接, 這條
ASM和RDBMS實例之間的初始連接叫作Umbilicu(臍帶), 只要RDBMS打開ASM File,
這個連接就會保持活動. 直到所有ASM File都被RDBMS實例關閉之后,這個連接才
會關閉.
對ASM的理解, ASM其實就是LVM披上了Oracle的馬甲, Disk 對應PV, Diskgroup 對應VG,
5. ASM 高效存儲技術
自動存儲管理直接在Oracle 內核提供了文件系統和卷管理器的垂直整合,
從而帶來了存儲區域網系統提供的“虛擬化”類型的優點(易于管理、更高的可用性),
并專門用于Oracle 數據庫文件。ASM 提供了配置數據庫的快捷方法,以達到最佳性能
和資源利用率。它通過Oracle 內核自動管理數據庫文件和這些文件的放置,不再需要
第三方文件系統和卷管理器來管理Oracle 文件。ASM 免去了耗時的手動I/O 性能與調
整任務,大大節省了DBA 的時間。
ASM的鏡像(mirroring)與條帶化(striping):ASM 將文件分成1MB 大小的區(extent, AU),
并將所有文件的區平均分布到磁盤組的所有磁盤中。ASM 不使用數學函數跟蹤每個區的
放置,而使用指針記錄區的位置。這樣,ASM 就可以在磁盤組配置變化時移動某個文
件的某些區,而不必按照公式并根據磁盤數來移動所有的區。對于需要低延遲的文件
(例如日志文件),ASM 提供了細粒度(128k) 分段,以便由多個磁盤并行分隔并處理較
大的I/O。ASM 在所有可用的資源中分布I/O 負載,在免除手動I/O 調節需要(通過分
散數據庫文件來避免熱點)的同時優化性能。
ASM的鏡像比操作系統的磁盤鏡像更為靈活,因為ASM可基于文件設置冗余級別,
也就是說在同一磁盤組中的兩個文件可以一個是鏡像的, 而另一個不做鏡像。ASM鏡
像發生在區級。
ASM的動態存儲配置:ASM使得在線調整存儲配置成為可能,即它幫助DBA 管理
動態數據庫環境,讓DBA 能夠在擴大或縮小數據庫規模的情況下,無需關閉數據庫
以調整存儲配置。而在往磁盤組中增加磁盤或從磁盤組中刪除磁盤后,ASM將自動
重新平衡――均衡地在磁盤組中的所有磁盤上重新分布文件數據。
三, ASM 磁盤冗余及故障處理
ASM的磁盤冗余策略可以分成三類:外部冗余、標準冗余和高度冗余,
其中外部冗余不需要failure 磁盤組, 標準和高度冗余必須要有failure磁盤組,
比如說對于標準冗余(Normal Redundancy),ASM要求該磁盤組至少要擁有
兩個failure磁盤組,即提供雙倍鏡像保護,對于同一份數據(ASM中鏡像單位
不是磁盤,也不是塊,而是一種AU的單位,該單位大小默認是1M)將有主從兩
份鏡像,并且ASM通過算法來自動確保主、從鏡像不會存在于同一份failure磁
盤組,這樣就保障了就算整個failure磁盤組都損壞,數據也不會丟失。至于高
度冗余(High Redundancy)就更安全了,它至少需要三個failure磁盤組,也就
是一份AU有一主多從的鏡像,理論上將更加安全。
如果磁盤發生損壞,那么損壞的磁盤默認自動offline并被drop掉,不過該
磁盤所在的磁盤組仍將保持MOUNT狀態,如果該盤有鏡像的話,那么應用不會有
影響,鏡像盤將自動實現接管 (只要不是所有failure磁盤組都損壞掉),否則的話,
該磁盤組將自動DISMOUNT。 比如,某標準冗余的failure組有6個盤(對應6個裸設
備),假如說此時壞了一塊盤,沒關系,操作繼續,壞了那塊會被自動dropped,剩
下的5塊盤仍然能夠負擔起正常的讀寫操作。
ASM 擴展性:
最多支持63個磁盤組;
最多支持10000個磁盤;
最大支持4pb/磁盤;
最大支持40 exabyte/ASM存儲;
最大支持1百W個文件/磁盤組;
外部冗余時單個文件最大35tb,標準冗余時單個文件最大5.8tb,高冗余度時單個
文件最大3.9tb。
加載及卸載磁盤組
UMOUNT磁盤組的話務必慎重操作,要確保UNMOUNT的磁盤組中保存的
文件對應的數據庫當前未啟動,而且該操作也會直接導致數據庫SHUTDOWN。
只有mount的磁盤組才能被數據庫使用并執行add/drop操作, ASM中的磁盤組默
認會在ASM實例啟動時自動加載 .
SQL> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;
GROUP_NUMBER NAME STATE TOTAL_MB FREE_MB
------------ ------------------------------ ----------- ---------- ----------
1 ASMDATA1 MOUNTED 20472 18667
2 ASMDATA2 MOUNTED 16378 14621
將ASMDATA2磁盤組UNMOUNT:
SQL> alter diskgroup ASMDATA2 dismount;
Diskgroup altered.
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 ASMDATA1 MOUNTED
0 ASMDATA2 DISMOUNTED
SQL> alter diskgroup ASMDATA2 mount; -- 再掛載.
Diskgroup altered.
四 , ASM 在Linux下的相關命令ORACLEASM , ASMCMD, ASMCA
1. ORACLEASM命令
安裝asm lib后我們可以通過man 來查看相關命令:
[grid@rac01 tmp]$ man oracleasm
使用 ASMLib 創建 ASM Disks , 語法如下:
# /usr/sbin/oracleasm createdisk disk_name device_partition_name
其中 disk_name 是你為 ASM Disk 選擇的一個名字,名字只能包含數字字母及下劃線,比如OCR01 , DATA01 等. device_partition_name 標示為 ASM 的系統磁盤分區,如
/dev/sdb1 , /dev/sdc1 等
如果你發現設置錯誤或需要 unmark這個磁盤,可以運行如下命令:
# /usr/sbin/oracleasm deletedisk disk_name
設置共享磁盤。
# /usr/sbin/oracleasm createdisk OCR_VOTE01 /dev/sdb1
# /usr/sbin/oracleasm createdisk ASM_DATA01 /dev/sdc1
使用 listdisks 命令確認他們的可用性。
[root@rac001 ~]# /usr/sbin/oracleasm listdisks
ASM_DATA01
ASM_DATA02
ASM_FRA
OCR_VOTE01
在所有其他節點上以 root 用戶身份,使用 scandisks 命令掃描已經創建的 ASM磁盤,也就是說,我們只需要在節點 1 上創建 ASM 磁盤,其他節點不需要。
[root@rac002 ~]# /usr/sbin/oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
Instantiating disk "OCR_VOTE01"
Instantiating disk "ASM_DATA01"
Instantiating disk "ASM_DATA02"
Instantiating disk "ASM_FRA"
最后在其他節點通過 listdisks 檢查 ASM 磁盤的可用性。
[root@rac002 ~]# /usr/sbin/oracleasm listdisks
ASM_DATA01
ASM_DATA02
ASM_FRA
OCR_VOTE01
2 . ASMCMD 命令
[root@rac01 ~]# su - grid
[grid@rac01 ~]$ id
uid=501(grid) gid=501(oinstall) groups=501(oinstall),504(asmadmin),506(asmdba),507(asmoper)
[grid@rac01 ~]$ asmcmd
ASMCMD>
如果 asm -p 進入的話, 就會帶路徑 (path)
[grid@rac01 ~]$ asmcmd -p
ASMCMD [+] > cd oradata
ASMCMD [+oradata] >
獲取幫助 help [command] :
ASMCMD [+oradata] > help du
du [-H] [dir]
Display total space used for files located recursively under [dir],
similar to "du -s" under UNIX; default is the current directory. Two
values are returned, both in units of megabytes. The first value does
not take into account mirroring of the diskgroup while the second does.
For instance, if a file occupies 100 MB of space, then it actually
takes up 200 MB of space on a normal redundancy diskgroup and 300 MB
of space on a high redundancy diskgroup.
[dir] can also contain wildcards.
The -H flag suppresses the column headers from the output.
ASMCMD [+oradata] >
3 . ASMCA 命令
運行ASMCA創建磁盤組。
以grid用戶登入開始ASMCA配置磁盤組,因為是圖形界面,我們使用grid用戶的vnc session ( 如果是root的vnc進入到su 到grid會報錯 ) .
[grid@rac001 bin]$ pwd
/u01/grid/11.2.0/bin
[grid@rac001 bin]$ ./asmca
圖形界面顯示到Disk Groups 。我們可以看到先前配置的OCR_VOTE已經在列。點擊下面的create 創建datafile及flash recovery area的ASM磁盤組。
磁盤組名稱ORADATA, 冗余部分選擇External, 點擊磁盤為ORCL:ASMDATA01,點擊OK.繼續create
磁盤組名稱ORAFLASH, 冗余部分選擇External, 磁盤為ORCL:ASMDATA02,點擊OK.
全部OK后點擊QUIT退出。
4 . ASMLib 及其他常用命令
ORCL關鍵字說明:Linux ASMLib 的發現字符串
ASMLib 使用發現字符串來確定 ASM 正在請求哪些磁盤。一般的 Linux ASMLib 使用glob 字符串。字符串必須以 "ORCL:" 為前綴。磁盤通過名稱來指定。可以通過發現字符串 "ORCL:VOL1" 在 ASM 中,發現以名稱 "VOL1" 創建的磁盤。類似地,可以用發現字符串 "ORCL:VOL*" 來查詢所有以字符串 "VOL" 開始的磁盤。
不能在發現字符串中用路徑名稱來發現磁盤。如果缺少前綴,那么一般的 Linux ASMLib將完全忽略發現字符串,認為它適用于一個不同的 ASMLib。唯一的例外是空字符串 (""),
它被認為是一個全通配符。這與發現字符串 "ORCL:*" 完全等價。
其他常用命令 :
SQL>create diskgroup dg2 external redundancy disk 'ORCL:VOL3';
SQL>drop diskgroup dg2 including contents; 默認是可以刪除empty的diskgroup , 如果磁盤組不是空的, 不接including contents 會報錯 . 指定 including contents 即刪除磁盤組中所有文件,即使不是為空 .
SQL>alter diskgroup dg1 add disk 'ORCL:VOL3';
Diskgroup altered.
SQL>alter diskgroup dg1 rebalance power 8 ;
Diskgroup altered.
SQL>alter diskgroup dg1 check all ; -- 檢查ASM磁盤組內部consistency
Diskgroup altered.
SQL>alter diskgroup dg1 check all repair; -- 檢查并通知ASM修復錯誤
Diskgroup altered.
5 . ASM與文件系統之間的遷移及文件傳輸/拷貝
A, 文件傳輸或拷貝
10g 下ASM下的文件和OS文件系統是不能互相拷貝的 。
11g 下從ASM到文件系統或文件系統到ASM 都很方便 。
ASMCMD> cp spfileracdb.ora /tmp
copying +oradata/racdb/spfileracdb.ora -> /tmp/spfileracdb.ora
[root@rac01 tmp]# ls -al spfileracdb.ora
-rw-r----- 1 grid oinstall 4096 Dec 4 06:05 spfileracdb.ora
10g 下如果需要實現文件拷貝有以下方式 :
rman
dbms_file_transfer
B. 利用RMAN進行遷移 .
到此,關于“Oracle11g RAC下ASM的管理與維護方法是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。