Oracle11g RAC下ASM 的管理與維護

Oracle11g RAC下ASM 的管理與維護

Oracle 做者: 不同的天空w 時間:2017-07-17 16:40:57 1195 0
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 下若是須要實現文件拷貝有如下方式 :
具體參考 http://space.itpub.net/35489/viewspace-712638
(1). http://www.oracle.com/global/il/ ... ro_asm_access1.html
ASM Access Through FTP and HTML Using XDB Configuration
(2). rman
(3). dbms_file_transfer

B. 利用RMAN進行遷移 .
參考 : http://www.linuxidc.com/Linux/2011-05/36675.htm

來自 「 ITPUB博客 」 ,連接:http://blog.itpub.net/31397003/viewspace-2142173/,如需轉載,請註明出處,不然將追究法律責任。html

相關文章
相關標籤/搜索