有个朋友问我,他想恢复(利用rman备份迁移)数据库(10.2,从aix 到 linux)但控制文件restore失败,报错如下:
询问了下貌似那个人连原数据库结构都不知到,只时拿到了备份文件,就想恢复,哎!
从这个文件名(control_bak_
20180606),就知道他做的是 “用户管理的备份” ,指定%T的格式备份名称表明日期,不是autobackup方式的备份, 也不能确定autobackup是否打开
他在原库上的备份脚本如下:这是在自建的“/backup/backupset”目录下做备份,没有使用闪回恢复区。
他用来备份控制文件的语句是:backup current controlfile format '/backup/backupset/control_bak_ %T';
等同于: ALTER DATABASE BACKUP CONTROLFILE TO '/oracle/backup/control.bkp';
等同于: BACKUP AS COPY CURRENT CONTROLFILE
经查oracle文档, Backing Up Control Files 这个命令是 “复制当前存在的控制文件 ”
Back up the control file to a binary file ( duplicate of existing control file) using the following statement:
这条语句一般用在数据库结构变更后,对控制文件做一个copy备份
下面是我在相同OS上的测试结果:restore 成功的
不过,我在他建立的环境中 restore controlfile from ... 几次都报同样的错,确认过备份文件权限属主都是对的,
rman程序还是识别不了这个文件, 说明这种方式备份的控制文件不支持直接从 aix 传到 liunx使用, 需要做转换Linux下的控制文件,才能在Linux的rman识别。
oracle文档上有明确说明,rman 在10gR2只后支持跨平台恢复。
具体可以通过 select * from v$transportable_platform;
跨平台迁移的方法参考:
RMAN restore from AIX to Linux
Oracle RMAN 兼容性 及 不同版本和不同平台之间使用 常见问题说明
https://blog.csdn.net/tianlesoftware/article/details/7232602
【TTS】基于RMAN迁移AIX平台数据库到Linux(第一篇)
http://chuansong.me/n/358997951362
【TTS】基于RMAN迁移AIX平台数据库到Linux(第二篇)
http://chuansong.me/n/358997651762
------------------------
附1:(autobackup的备份控制文件格式说明)
%F 是最全的信息的格式,表示 c-IIIIIIIIII-YYYYMMDD-QQ , 包含了DBID、日、月、年、季度
%I 表示DBID
%T 表示 YYYYMMDD
参考: Database Backup and Recovery Reference - formatSpec
在开启autobackup的备份时,控制文件自动备份的格式应保证为默认的 %F,
oracle文档上说:参考: ( How RMAN Performs Control File Autobackups)
If you do not use the default format, then during disaster recovery you must specify the format that was used to generate the autobackups. Otherwise, RMAN cannot restore the autobackup.
如果不使用默认格式,那么在恢复过程中有个灾难,必须指定用于生成autobackup的格式。
否则,RMAN无法恢复autobackup。
实际测试:
用下面语句,即使指定了格式为 %T
set controlfile autobackup format for device type disk to '/home/orabak/control_bak_ %T';
这个命令是不成功的, 提示不可指定为 %T
估计必须要包含DBID吧
用以下方式还原rman设置中的控制文件备份格式:
CONFIGURE CONTROLFILE AUTOBACKUP FORMATFOR DEVICE TYPE DISK clear;
CONFIGURE CONTROLFILE AUTOBACKUP ON; #开启自动备份 默认格式 ‘%F’
附2:
偶到oracle官方文档查找各个版本的restore controlfile条件对比(都是使用autobackup)
10gR2: no catalog 状态下:
restore controlfile; 提示必须使用指定from autobackup ,而且restore controlfile from autobackup 必须先set dbid;
restore controlfile from 'xxx' ; 也是必须先set dbid
restore controlfile tag 'xxx' ; 如果no catalog 模式,会失败找不到tag。
之后的版本11gR2 / 12.1/12.2版本 , no catalog 状态下
如果跟 restore controlfile from autobackup , 不 再 需要set dbid
但如果 restore controlfile from 'media_handle'; 还是必须指定 set dbid
![](https://i-blog.csdnimg.cn/blog_migrate/e184836d968a1ff408f2e4074f88ccb2.png)
参考:https://docs.oracle.com/database/121/RCMRF/rcmsynta2008.htm#RCMRF149
恢复的步骤:
参考:
https://www.thegeekstuff.com/2014/11/oracle-rman-restore
询问了下貌似那个人连原数据库结构都不知到,只时拿到了备份文件,就想恢复,哎!
- RMAN> restore controlfile from '/home/orabak/control_bak_20180606';
-
- Starting restore at 11-JUN-18
- using channel ORA_DISK_1
-
- RMAN-00571: ===========================================================
- RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
- RMAN-00571: ===========================================================
- RMAN-03002: failure of restore command at 06/11/2018 11:08:30
- RMAN-06172: no autobackup found or specified handle is not a valid copy or piece
他在原库上的备份脚本如下:这是在自建的“/backup/backupset”目录下做备份,没有使用闪回恢复区。
- sql 'alter system switch logfile';
- crosscheck archivelog all;
- delete noprompt expired archivelog all;
- crosscheck backup;
- delete noprompt obsolete;
- delete expired copy;
- run{
- allocate channel c1 type disk;
- backup database format '/backup/backupset/full_level0_%U';
- backup archivelog all delete all input skip inaccessible format '/backup/backupset/ARC_%U';
- backup current controlfile format '/backup/backupset/control_bak_%T';
- release channel c1;
- }
他用来备份控制文件的语句是:backup current controlfile format '/backup/backupset/control_bak_ %T';
等同于: ALTER DATABASE BACKUP CONTROLFILE TO '/oracle/backup/control.bkp';
等同于: BACKUP AS COPY CURRENT CONTROLFILE
经查oracle文档, Backing Up Control Files 这个命令是 “复制当前存在的控制文件 ”
Back up the control file to a binary file ( duplicate of existing control file) using the following statement:
这条语句一般用在数据库结构变更后,对控制文件做一个copy备份
下面是我在相同OS上的测试结果:restore 成功的
- RMAN> restore controlfile from '/backup/backupset/control_bak_20180615';
- Starting restore at 2018-06-15 23:33:33
- using channel ORA_DISK_1
- channel ORA_DISK_1: restoring control file
- channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
- output file name=/u01/oracle/orahomes/oradata/orcl/control01.ctl
- output file name=/u01/oracle/orahomes/fast_recovery_area/orcl/control02.ctl
- Finished restore at 2018-06-15 23:33:34
- RMAN> alter database mount;
- Statement processed
- released channel: ORA_DISK_1
不过,我在他建立的环境中 restore controlfile from ... 几次都报同样的错,确认过备份文件权限属主都是对的,
rman程序还是识别不了这个文件, 说明这种方式备份的控制文件不支持直接从 aix 传到 liunx使用, 需要做转换Linux下的控制文件,才能在Linux的rman识别。
oracle文档上有明确说明,rman 在10gR2只后支持跨平台恢复。
具体可以通过 select * from v$transportable_platform;
跨平台迁移的方法参考:
RMAN restore from AIX to Linux
Oracle RMAN 兼容性 及 不同版本和不同平台之间使用 常见问题说明
https://blog.csdn.net/tianlesoftware/article/details/7232602
【TTS】基于RMAN迁移AIX平台数据库到Linux(第一篇)
http://chuansong.me/n/358997951362
【TTS】基于RMAN迁移AIX平台数据库到Linux(第二篇)
http://chuansong.me/n/358997651762
------------------------
附1:(autobackup的备份控制文件格式说明)
%F 是最全的信息的格式,表示 c-IIIIIIIIII-YYYYMMDD-QQ , 包含了DBID、日、月、年、季度
%I 表示DBID
%T 表示 YYYYMMDD
参考: Database Backup and Recovery Reference - formatSpec
在开启autobackup的备份时,控制文件自动备份的格式应保证为默认的 %F,
oracle文档上说:参考: ( How RMAN Performs Control File Autobackups)
If you do not use the default format, then during disaster recovery you must specify the format that was used to generate the autobackups. Otherwise, RMAN cannot restore the autobackup.
如果不使用默认格式,那么在恢复过程中有个灾难,必须指定用于生成autobackup的格式。
否则,RMAN无法恢复autobackup。
实际测试:
用下面语句,即使指定了格式为 %T
set controlfile autobackup format for device type disk to '/home/orabak/control_bak_ %T';
这个命令是不成功的, 提示不可指定为 %T
估计必须要包含DBID吧
用以下方式还原rman设置中的控制文件备份格式:
CONFIGURE CONTROLFILE AUTOBACKUP FORMATFOR DEVICE TYPE DISK clear;
CONFIGURE CONTROLFILE AUTOBACKUP ON; #开启自动备份 默认格式 ‘%F’
CONFIGURE CONTROLFILEAUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
附2:
偶到oracle官方文档查找各个版本的restore controlfile条件对比(都是使用autobackup)
10gR2: no catalog 状态下:
restore controlfile; 提示必须使用指定from autobackup ,而且restore controlfile from autobackup 必须先set dbid;
restore controlfile from 'xxx' ; 也是必须先set dbid
restore controlfile tag 'xxx' ; 如果no catalog 模式,会失败找不到tag。
![](https://i-blog.csdnimg.cn/blog_migrate/8fc2d538ff568278d72f7d5213684029.png)
之后的版本11gR2 / 12.1/12.2版本 , no catalog 状态下
如果跟 restore controlfile from autobackup , 不 再 需要set dbid
但如果 restore controlfile from 'media_handle'; 还是必须指定 set dbid
![](https://i-blog.csdnimg.cn/blog_migrate/e184836d968a1ff408f2e4074f88ccb2.png)
参考:https://docs.oracle.com/database/121/RCMRF/rcmsynta2008.htm#RCMRF149
恢复的步骤:
- RMAN> SET DBID 12345;
-
- RMAN> STARTUP NOMOUNT;
-
- RMAN> RESTORE CONTROLFILE FROM "/backup/rman/ctl_c-12345-20141003-03";
-
- RMAN> RESTORE DATABASE;
-
- RMAN> RECOVER DATABASE;
-
- RMAN> ALTER DATABASE OPEN RESETLOGS;
参考:
https://www.thegeekstuff.com/2014/11/oracle-rman-restore
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/807718/viewspace-2156009/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/807718/viewspace-2156009/