在做表空间传输实验时,想把ASM中的数据文件拷贝到操作系统上,于是想到用CP,help cp后,本以为很简单,敲了两次命令都报错了(其实那帮助写得不咋地)
--这是报错的场景
ASMCMD [+fra/ORCL/DATAFILE] > cp TEST.261.848058223 /home/oracle/test.dbf
copying +fra/ORCL/DATAFILE/TEST.261.848058223 -> /home/oracle/test.dbf
ASMCMD-08016: copy source->'+fra/ORCL/DATAFILE/TEST.261.848058223' and target->'/home/oracle/test.dbf' failed
ORA-19505: failed to identify file "/home/oracle/test.dbf"
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 13: Permission denied
Additional information: 1
ORA-06512: at "SYS.X$DBMS_DISKGROUP", line 397
ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute)
--这是成功的场景,没有别的,就是目录太深了,经过我的试验,发现CP中的目的地最多只允许一层目录结构(气得我想骂人),不信可以自己试试
ASMCMD [+fra/ORCL/DATAFILE] > cp TEST.261.848058223 /tmp/test.dbf
copying +fra/ORCL/DATAFILE/TEST.261.848058223 -> /tmp/test.dbf
2.ASMCMD支持3种文件传输方式
分别是:ASM——>OS
OS——>ASM
ASM——>ASM
第一种前边说过了
第三种不讲了
现在看第二种
ASMCMD [+fra/ORCL/DATAFILE] > ls
SYSAUX.257.847546983
SYSTEM.256.847546913
TEST.261.848067939
UNDOTBS1.258.847547051
USERS.260.847547075
--把文件从ASM磁盘组拷贝到操作系统上没问题
ASMCMD [+fra/ORCL/DATAFILE] > cp TEST.261.848067939 /tmp/test.dbf
copying +fra/ORCL/DATAFILE/TEST.261.848067939 -> /tmp/test.dbf
--再原样拷回去,问题来了
ASMCMD [+fra/ORCL/DATAFILE] > cp /tmp/test.dbf TEST.261.848067939
ASMCMD-08014: can not open file->''
Use of uninitialized value in concatenation (.) or string at /u01/app/oracle/product/11.2.0/grid/lib/asmcmdbase.pm line 3288, line 71.
copying /tmp/test.dbf ->
ASMCMD-08016: copy source->'/tmp/test.dbf' and target->'' failed
ORA-15056: additional error message
ORA-06512: at "SYS.X$DBMS_DISKGROUP", line 397
ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute)
--这事要放在文件系统上,应该提示你"文件名已存在"之类的错误
--随便改下incarnation,又换了个错误
ASMCMD [+fra/ORCL/DATAFILE] > cp /tmp/test.dbf TEST.261.848067940
copying /tmp/test.dbf -> +fra/ORCL/DATAFILE/TEST.261.848067940
ASMCMD-08016: copy source->'/tmp/test.dbf' and target->'+fra/ORCL/DATAFILE/TEST.261.848067940' failed
ORA-19505: failed to identify file "+fra/ORCL/DATAFILE/TEST.261.848067940"
ORA-17502: ksfdcre:4 Failed to create file +fra/ORCL/DATAFILE/TEST.261.848067940
ORA-15046: ASM file name '+fra/ORCL/DATAFILE/TEST.261.848067940' is not in single-file creation form
ORA-06512: at "SYS.X$DBMS_DISKGROUP", line 397
ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute)
ASMCMD [+fra/ORCL/DATAFILE] >
根据别人查到的metalink上的说法(详见:https://community.oracle.com/message/4218692)
ASMCMD cp command fails with ORA-15046: ASM file name is not in single-file creation form
you can't create file with name like OMF style! File name should not contain the file number/incarnation
一般来说,ASM磁盘组上都使用OMF,让oracle起名字,而在上边实验上,像cp /tmp/test.dbf TEST.261.848067940这种命令就相当于你起名字
oracle不高兴了,你既然设置OMF,就表示oracle说了算,现在你又插一杠子,后果很严重
最终附上ASM的文件名格式
--这是报错的场景
ASMCMD [+fra/ORCL/DATAFILE] > cp TEST.261.848058223 /home/oracle/test.dbf
copying +fra/ORCL/DATAFILE/TEST.261.848058223 -> /home/oracle/test.dbf
ASMCMD-08016: copy source->'+fra/ORCL/DATAFILE/TEST.261.848058223' and target->'/home/oracle/test.dbf' failed
ORA-19505: failed to identify file "/home/oracle/test.dbf"
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 13: Permission denied
Additional information: 1
ORA-06512: at "SYS.X$DBMS_DISKGROUP", line 397
ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute)
--这是成功的场景,没有别的,就是目录太深了,经过我的试验,发现CP中的目的地最多只允许一层目录结构(气得我想骂人),不信可以自己试试
ASMCMD [+fra/ORCL/DATAFILE] > cp TEST.261.848058223 /tmp/test.dbf
copying +fra/ORCL/DATAFILE/TEST.261.848058223 -> /tmp/test.dbf
2.ASMCMD支持3种文件传输方式
分别是:ASM——>OS
OS——>ASM
ASM——>ASM
第一种前边说过了
第三种不讲了
现在看第二种
ASMCMD [+fra/ORCL/DATAFILE] > ls
SYSAUX.257.847546983
SYSTEM.256.847546913
TEST.261.848067939
UNDOTBS1.258.847547051
USERS.260.847547075
--把文件从ASM磁盘组拷贝到操作系统上没问题
ASMCMD [+fra/ORCL/DATAFILE] > cp TEST.261.848067939 /tmp/test.dbf
copying +fra/ORCL/DATAFILE/TEST.261.848067939 -> /tmp/test.dbf
--再原样拷回去,问题来了
ASMCMD [+fra/ORCL/DATAFILE] > cp /tmp/test.dbf TEST.261.848067939
ASMCMD-08014: can not open file->''
Use of uninitialized value in concatenation (.) or string at /u01/app/oracle/product/11.2.0/grid/lib/asmcmdbase.pm line 3288, line 71.
copying /tmp/test.dbf ->
ASMCMD-08016: copy source->'/tmp/test.dbf' and target->'' failed
ORA-15056: additional error message
ORA-06512: at "SYS.X$DBMS_DISKGROUP", line 397
ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute)
--这事要放在文件系统上,应该提示你"文件名已存在"之类的错误
--随便改下incarnation,又换了个错误
ASMCMD [+fra/ORCL/DATAFILE] > cp /tmp/test.dbf TEST.261.848067940
copying /tmp/test.dbf -> +fra/ORCL/DATAFILE/TEST.261.848067940
ASMCMD-08016: copy source->'/tmp/test.dbf' and target->'+fra/ORCL/DATAFILE/TEST.261.848067940' failed
ORA-19505: failed to identify file "+fra/ORCL/DATAFILE/TEST.261.848067940"
ORA-17502: ksfdcre:4 Failed to create file +fra/ORCL/DATAFILE/TEST.261.848067940
ORA-15046: ASM file name '+fra/ORCL/DATAFILE/TEST.261.848067940' is not in single-file creation form
ORA-06512: at "SYS.X$DBMS_DISKGROUP", line 397
ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute)
ASMCMD [+fra/ORCL/DATAFILE] >
根据别人查到的metalink上的说法(详见:https://community.oracle.com/message/4218692)
ASMCMD cp command fails with ORA-15046: ASM file name is not in single-file creation form
you can't create file with name like OMF style! File name should not contain the file number/incarnation
一般来说,ASM磁盘组上都使用OMF,让oracle起名字,而在上边实验上,像cp /tmp/test.dbf TEST.261.848067940这种命令就相当于你起名字
oracle不高兴了,你既然设置OMF,就表示oracle说了算,现在你又插一杠子,后果很严重
Filename Type | Format |
---|---|
Fully Qualified ASM Filename | +dgroup/dbname/file_type/file_type_tag.file.incarnation |
Numeric ASM Filename | +dgroup.file.incarnation |
Alias ASM Filenames | +dgroup/directory/filename |
Alias ASM Filename with Template | +dgroup(template)/alias |
Incomplete ASM Filename | +dgroup |
Incomplete ASM Filename with Template | +dgroup(template) |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29646619/viewspace-1165158/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29646619/viewspace-1165158/