Oracle的ASM一直不夠透明,但Oracle還是提供了一些工具來訪問ASM磁盤組的,asmcdm就是其中一個工具,本文將對其進行詳細介紹。
感覺Oracle的ASM一直很不透明,不過Oracle還是提供了一些工具來訪問ASM磁盤組的,asmcdm就是其中一個工具。
如果不做任何配置,直接調用asmcmd,多半會碰到下面的錯誤:
$?asmcmd
ASMCMD-08103:?failed?to?connect?to?ASM;?ASMCMD?running?in?non-connected?mode
要連接ASM,其實只需要做兩件事情,確保$ORACLE_HOME和$ORACLE_SID的設置正確既可:
ASMCMD>?exit
$?bash
bash-3.00$?env|grep?ORACLE_
ORACLE_SID=rac11g1
ORACLE_BASE=/data/oracle
ORACLE_HOME=/data/oracle/product/11.1/database
bash-3.00$?export?ORACLE_SID=+ASM1
bash-3.00$?asmcmd
ASMCMD>?ls
DATA/ASMCMD>?exit
$?bash
bash-3.00$?env|grep?ORACLE_
ORACLE_SID=rac11g1
ORACLE_BASE=/data/oracle
ORACLE_HOME=/data/oracle/product/11.1/database
bash-3.00$?export?ORACLE_SID=+ASM1
bash-3.00$?asmcmd
ASMCMD>?ls
DATA/
現在已經成功的連接到ASM磁盤組。
ASMCMD>?help
asmcmd?[-v]?[-a?]?[-p]?[command]
The?environment?variables?ORACLE_HOME?and?ORACLE_SID?determine?the
instance?to?which?the?program?connects,?and?ASMCMD?establishes?a
bequeath?connection?to?it,?in?the?same?manner?as?a?SQLPLUS?/?AS
SYSDBA.?The?user?must?be?a?member?of?the?SYSDBA?group.
Specifying?the?-v?option?prints?the?asmcmd?version?number?and
exits?immediately.
Specify?the?-a?option?to?choose?the?type?of?connection.?There?are
only?two?possibilities:?connecting?as?"sysasm"?or?as?"sysdba".
The?default?value?if?this?option?is?unspecified?is?"sysasm".
Specifying?the?-p?option?allows?the?current?directory?to?be?displayed
in?the?command?prompt,?like?so:
ASMCMD?[+DATAFILE/ORCL/CONTROLFILE]?>
[command]?specifies?one?of?the?following?commands,?along?with?its
parameters.
Type?"help?[command]"?to?get?help?on?a?specific?ASMCMD?command.
commands:
--------
help
cd
cp
du
find
ASMCMD>?du
Used_MB?Mirror_used_MB
2457?2457
ASMCMD>?lsct
DB_Name?Status?Software_Version?Compatible_version?Instance_Name?Disk_Group
ractest?CONNECTED?11.1.0.6.0?11.1.0.0.0?ractest1?DATA
ASMCMD>?lsdg
State?Type?Rebal?Sector?Block?AU?Total_MB?Free_MB?Req_mir_free_MB?Usable_file_MB?Offline_disks?Name
MOUNTED?EXTERN?N?512?4096?1048576?963503?960944?0?960944?0?DATA/
ASMCMD>?lsdsk
Path
/dev/rdsk/emcpower0b
/dev/rdsk/emcpower0e
/dev/rdsk/emcpower0g
使用cp命令將ASM內部的文件拷貝到操作系統還是很方便的:
ASMCMD>?cp?spfileractest.ora?/data/spfileractest.ora
source?+DATA/RACTEST/spfileractest.ora
target?/data/spfileractest.ora
copying?file(s)...
file,?/data/spfileractest.ora,?copy?committed.
同樣利用cp也可以將磁盤上面的數據文件、備份文件等拷貝到ASM磁盤中
bash-3.00$?rman?target?/
恢復管理器: Release 11.1.0.6.0 - Production on 星期三 9月 3 10:38:17 2008
連接到目標數據庫: RACTEST (DBID=3192712917)
RMAN>?run
2>?{
3>?allocate?channel?c1?device?type?disk?format?'/data/%U';
4>?backup?current?controlfile;
5>?}
使用目標數據庫控制文件替代恢復目錄分配的通道: c1通道 c1: SID=63 實例=ractest1 設備類型=DISK
啟動 backup 于 03-9月 -08通道 c1: 正在啟動全部數據文件備份集通道 c1: 正在指定備份集內的數據文件備份集內包括當前控制文件通道 c1: 正在啟動段 1 于 03-9月 -08通道 c1: 已完成段 1 于 03-9月 -08段句柄=/data/02jplh5q_1_1 標記=TAG20080903T103850 注釋=NONE通道 c1: 備份集已完成, 經過時間:00:00:01完成 backup 于 03-9月 -08釋放的通道: c1
RMAN> quit
恢復管理器完成。
下面利用asmcmd拷貝這個生成的備份文件到ASM磁盤組:
ASMCMD>?ls
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
redo01.log
spfileractest.ora
ASMCMD>?mkdir?backup
ASMCMD>?cp?/data/02jplh5q_1_1?+DATA/RACTEST/backup/02jplh5q_1_1
source?/data/02jplh5q_1_1
target?+DATA/RACTEST/backup/02jplh5q_1_1
copying?file(s)...
file,?+DATA/ractest/backup/02jplh5q_1_1,?copy?committed.
不過不是任何文件都可以拷貝到ASM中,比如拷貝數據庫安裝的壓縮文件:ASMCMD>?help
asmcmd?[-v]?[-a?]?[-p]?[command]
The?environment?variables?ORACLE_HOME?and?ORACLE_SID?determine?the
instance?to?which?the?program?connects,?and?ASMCMD?establishes?a
bequeath?connection?to?it,?in?the?same?manner?as?a?SQLPLUS?/?AS
SYSDBA.?The?user?must?be?a?member?of?the?SYSDBA?group.
Specifying?the?-v?option?prints?the?asmcmd?version?number?and
exits?immediately.
Specify?the?-a?option?to?choose?the?type?of?connection.?There?are
only?two?possibilities:?connecting?as?"sysasm"?or?as?"sysdba".
The?default?value?if?this?option?is?unspecified?is?"sysasm".
Specifying?the?-p?option?allows?the?current?directory?to?be?displayed
in?the?command?prompt,?like?so:
ASMCMD?[+DATAFILE/ORCL/CONTROLFILE]?>
[command]?specifies?one?of?the?following?commands,?along?with?its
parameters.
Type?"help?[command]"?to?get?help?on?a?specific?ASMCMD?command.
commands:
--------
help
cd
cp
du
find
ASMCMD>?cp?/data/solaris.sparc64_11gR1_database.zip?solaris.sparc64_11gR1_database.zip
source?/data/solaris.sparc64_11gR1_database.zip
target?solaris.sparc64_11gR1_database.zip
ASMCMD-08012:?can?not?determine?file?type?for?file->'/data/solaris.sparc64_11gR1_database.zip'
ORA-15056:?additional?error?message
ORA-17503:?ksfdopn:DGGetFileAttr15?Failed?to?open?file?/data/solaris.sparc64_11gR1_database.zip
ORA-27046:?file?size?is?not?a?multiple?of?logical?block?size
Additional?information:?1
ORA-06512:?at?"SYS.X$DBMS_DISKGROUP",?line?207
ORA-06512:?at?line?3?(DBD?ERROR:?OCIStmtExecute)
錯誤信息已經很明顯了,Oracle的ASM從設計上就不是可以存放任何東西的文件系統,只有Oracle數據庫相關的文件,比如數據文件、日志文件、控制文件、參數文件以及備份文件等可以存儲到ASM中。