无法复制和rename ASM磁盘组上的数据文件处理方法

由于SYSTEM 数据文件丢失,启动数据库时会报如下无法标识或找不到数据文件1的错误:

03:47:02 SYS@racdb1*SQL> startup;
ORACLE instance started.


Total System Global Area          413372416 bytes
Fixed Size                          2213896 bytes
Variable Size                     381683704 bytes
Database Buffers                   20971520 bytes
Redo Buffers                        8503296 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '+DATA/racdb/datafile/system.256.858651361'

需要从备库拷贝system数据文件过来,但从常规的文件系统中拷贝到ASM磁盘组中有一定的命名规则,随便拷贝会报如下错误:

ASMCMD [+DATA/racdb/datafile] > cp /home/grid/tmp/SYSTEM.258.910919287 ./SYSTEM.256.858651361

copying /home/grid/tmp/SYSTEM.258.910919287 -> +DATA/racdb/datafile/./SYSTEM.256.858651361
ASMCMD-08016: copy source->'/home/grid/tmp/SYSTEM.258.910919287' and target->'+DATA/racdb/datafile/./SYSTEM.256.858651361' failed
ORA-19505: failed to identify file "+DATA/racdb/datafile/./SYSTEM.256.858651361"
ORA-17502: ksfdcre:4 Failed to create file +DATA/racdb/datafile/./SYSTEM.256.858651361
ORA-15046: ASM file name '+DATA/racdb/datafile/./SYSTEM.256.858651361' is not in single-file creation form
ORA-15122: ASM file name '+DATA/racdb/datafile/./SYSTEM.256.858651361' contains an invalid file number
ORA-06512: at "SYS.X$DBMS_DISKGROUP", line 397
ORA-06512: at line 3 (DBD ERROR: OCIStmtExecute)


所以,不能随便复制OMF格式的文件名,用常规的文件名复制方式即可,如下:

ASMCMD [+DATA/racdb/datafile] > cp /home/grid/tmp/SYSTEM.dbf  ./
copying /home/grid/tmp/SYSTEM.dbf -> +DATA/racdb/datafile/SYSTEM.dbf


ASMCMD [+DATA/racdb/datafile] > ls -ls 
Type      Redund  Striped  Time             Sys  Block_Size  Blocks      Bytes      Space  Name
DATAFILE  UNPROT  COARSE   JUL 21 03:00:00  Y          8192   12801  104865792  106954752  EXAMPLE.264.858651503
DATAFILE  UNPROT  COARSE   JUL 21 03:00:00  Y          8192   87041  713039872  715128832  SYSAUX.257.858651361
                                            N                                              SYSTEM.dbf => +DATA/ASM/DATAFILE/SYSTEM.dbf.256.917754869
DATAFILE  UNPROT  COARSE   JUL 21 03:00:00  Y          8192   12033   98574336  100663296  TEST_TBS.275.910289303
DATAFILE  UNPROT  COARSE   JUL 21 03:00:00  Y          8192   14081  115351552  117440512  UNDOTBS1.258.858651363
DATAFILE  UNPROT  COARSE   JUL 21 03:00:00  Y          8192    3201   26222592   27262976  UNDOTBS2.265.858651785
DATAFILE  UNPROT  COARSE   JUL 21 03:00:00  Y          8192     641    5251072    6291456  USERS.259.858651363


但是,还必须使用 alter database rename file '+DATA/racdb/datafile/system.256.858651361' to '+DATA/racdb/datafile/SYSTEM.dbf'; 命令重命名system数据文件,

但由于+DATA/racdb/datafile/system.256.858651361 这个数据文件已经丢失,不存在这个数据文件,所以无法执行以上重命名文件命令,会报如下错误:

03:56:12 SYS@racdb1*SQL> alter database rename file '+DATA/racdb/datafile/system.256.858651361' to 'DATA/racdb/datafile/SYSTEM.dbf';
alter database rename file '+DATA/racdb/datafile/system.256.858651361' to 'DATA/racdb/datafile/SYSTEM.dbf'
*
ERROR at line 1:
ORA-01511: error in renaming log/data files
ORA-01141: error renaming data file 1 - new file 'DATA/racdb/datafile/SYSTEM.dbf' not found
ORA-01110: data file 1: '+DATA/racdb/datafile/system.256.858651361'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory

Additional information: 3


可以通过如下方法解决:

RMAN> run {
2> set newname for datafile 1 to '+DATA/racdb/datafile/SYSTEM.dbf';
3> switch datafile 1;
4> }



executing command: SET NEWNAME


RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of switch command at 07/21/2016 04:04:30
RMAN-20230: datafile copy not found in the repository
RMAN-06015: error while looking up datafile copy name: +DATA/racdb/datafile/system.dbf


RMAN> catalog start with '+DATA/racdb/datafile';   ##这个必须要执行,否则执行 switch datafile 1;会报如上错误。

searching for all files that match the pattern +DATA/racdb/datafile


List of Files Unknown to the Database
=====================================
File Name: +data/racdb/DATAFILE/SYSTEM.dbf


Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done


List of Cataloged Files
=======================
File Name: +data/racdb/DATAFILE/SYSTEM.dbf

然后再执行以上的rman命令更新控制文件中system数据文件的新位置即可,如下:

RMAN> run {
2> set newname for datafile 1 to '+DATA/racdb/datafile/SYSTEM.dbf';
3> switch datafile 1;
4> }


executing command: SET NEWNAME


datafile 1 switched to datafile copy
input datafile copy RECID=9 STAMP=917755520 file name=+DATA/racdb/datafile/system.dbf


RMAN> 


04:07:02 SYS@racdb1*SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '+DATA/racdb/datafile/system.dbf'    ##已经提示新的system.dbf文件需要恢复了,执行如下恢复即可:


04:07:07 SYS@racdb1*SQL> recover datafile 1;
Media recovery complete.
04:07:15 SYS@racdb1*SQL> alter database open;


Database altered.


OK,主库system数据文件丢失,恢复完成。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值