当我们使用RMAN执行restore时,有时会碰到RMAN-06023: no backup or copy of datafile X found to restore
这个报错的意思是,当数据库执行restore database/datafile时,找不到可用于restore指定文件的备份文件,有时候明明备份文件在指定目录里,就是无法用于restore,我们只要了解相关的原理,问题很好解决
当我们执行数据库备份时,oracle默认会把控制文件作为记录这些备份信息的地方(使用了catalog除外),当进行数据库restore操作时,oracle会到控制文件中去获取相关的信息,然后再到指定的路径下去查找备份文件用于restore操作,我们可以在rman下借助list命令查看相应的文件
RMAN> list backup of archivelog all; ==> 查看所有归档日志的备份信息
RMAN> list backup of controlfile; ==> 查看控制文件的备份信息
RMAN> list backup of tablespace users; ==> 查看某个表空间的备份信息
RMAN> list backup of spfile; ==> 查看spfile文件的备份信息
RMAN> list backup of database; => 查看整个库的备份信息
RMAN> list backup of datafile X; => 查看某个特定文件的备份信息
Eg: RMAN> list backup of datafile 1;
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
9730 Incr 0 330.25G DISK 12:18:10 2021-04-04 16:18:15
BP Key: 9730 Status: AVAILABLE Compressed: YES Tag: TAG20210404T040004
Piece Name: /backup/rman/bak49.22/level0_ORCL_9736_1_g8vrdti5.bkp
List of Datafiles in backup set 9730
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- ------------------- ----
1 0 Incr 104639102816 2021-04-04 04:00:05 /data/oradata/orcl/system01.dbf
通过以上的结果信息,我们需要关注的是:
1. 对应的备份文件需要存在,同时ORACLE用户需要有读的权限
$ ls -l /backup/rman/bak49.22/level0_ORCL_9736_1_g8vrdti5.bkp
-rwxrwxrwx 1 1005 10002 354607366144 Apr 4 16:18 /backup/rman/bak49.22/level0_ORCL_9736_1_g8vrdti5.bkp
2. 状态应该是:AVAILABLE的,而不是EXPIRED状态
1. 备份文件存放目录和备份时不一致,导致oracle在原来的路径下没有找到备份文件,常见于进行数据库迁移时
在这种情况下,通过list backup of ...... 命令是没有办法列出指定的备份文件信息的
解决办法:
RMAN> catalog start with '<backup directory>' 可把整个目录备份文件信息都catalog到control file中
2. 备份文件的状态为expired
可能之前crosscheck或者读取时路径不对,或者权限不对,导致Oracle把备份文件的状态标记为expired
解决办法:
重新执行crosscheck并根据crosscheck更改对应文件的状态
RMAN> change backup of database crosscheck;