环境描述:
1.因为主库存储空间不足,于是将备份放在dg备库上做。
2.主库因为磁盘空间问题,数据文件有两个目录。
3.dg备库因为主库两个数据文件目录里面有两个同名数据文件,所有dg备库也有两个数据文件目录。
4.主库与备库与测试库均为Windows系统11.2.0.4
恢复步骤
1.打开测试库到nomount
2.设置控制文件和归档日志路径
3.恢复控制文件
restore primary controlfile from ’d:\bak\FULL_SQ1RBKLE_1_1_20230505.BAK';
5.配置db_file_name_convert和log_file_name_convert参数
alter system set db_file_name_convert='X:\ORADATA\ORCL\','D:\ORADATA\ORCL1\','W:\ORADATA\ORCL\','D:\ORADATA\ORCL2\' scope=spfile;
alter system set log_file_name_convert='X:\ORADATA\ORCL\','D:\ORADATA\ORCL1\' scope=spfile;
--因为我这里恢复的是primary控制文件,所以我这路的convert里配置的是主库和新测试库的文件路径转换,和dg备库数据文件路径并没有关系。
6.打开测试库到mount
7.注册备份集
8.check备份集并删除过期备份集
9.开始恢复数据库
一开始我以为配置了convert参数后,可以直接恢复,恢复的时候会自动转换文件路径的,于是我直接用下面脚本restore
run{
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
allocate channel ch3 device type disk;
allocate channel ch4 device type disk;
restore database;
release channel ch1;
release channel ch2;
release channel ch3;
release channel ch4;
}
恢复过程出现报错:
这里恢复过程中出现的E盘数据文件路径是dg备库的数据文件路径,这个就很奇怪,查看控制文件中的数据文件路径:
这几个数据文件好像是dg做完之后,在主库添加的数据文件,不知道为什么这里恢复的时候没有转换过来。
这里我们尝试用rename的方式在控制文件中重命名数据文件路径,但是提示文件不存在不能rename。
于是尝试在restore的时候set newname,脚本如下:
run{
allocate channel ch1 device type disk;
allocate channel ch2 device type disk;
allocate channel ch3 device type disk;
allocate channel ch4 device type disk;
set newname for datafile 148 to 'D:\ORADATA\ORCL2\ZLWSDATANEW01.DBF';set newname for datafile 149 to 'D:\ORADATA\ORCL2\ZLWSDATANEW02.DBF';set newname for datafile 150 to 'D:\ORADATA\ORCL2\ZL9LISDATANEW02.DBF';set newname for datafile 151 to 'D:\ORADATA\ORCL2\ZL9INDEXCISNEW02.DB';set newname for datafile 152 to 'D:\ORADATA\ORCL2\ZLWSDATANEW03.DBF';set newname for datafile 153 to 'D:\ORADATA\ORCL2\JSGJLDYBNEW02.DBF';set newname for datafile 154 to 'D:\ORADATA\ORCL2\ZL9INDEXCISNEW03.DBF';
restore database;
switch datafile all;
release channel ch1;
release channel ch2;
release channel ch3;
release channel ch4;
}
--单独将这几个数据文件set newname是可行的,可以正常restore。
10.恢复归档
11.不完全恢复
12.open resetlogs