可以还原使用旧版本直到Oracle Database 9i Release 2(9.2.0.8)的RMAN创建的备份。
在创建备份的Oracle数据库版本和运行还原的数据库的Oracle软件版本之间必须有支持的升级路径。
在这个示例中,源数据库是Oracle数据库11g Release 2版本,使用spfile。数据库运行在ARCHIVELOG模式和使用快速恢复区域。也配置了控制文件自动备份。然后创建源数据库的RMAN备份,包括归档redo日志。
还原备份的目标主机安装了Oracle数据库12c Release 1版本。
还原使用比当前目标数据库更旧版本的RMAN创建的备份:
1)验证从创建备份的数据库版本到你计划还原数据库的数据库版本之间有支持的升级路径。
例如,如果你在Oracle数据库11g Release 2(11.2.0.3)上创建了RMAN备份和想在Oracle数据库12c Release 1(12.1)上运行还原的数据库,那么你必须验证从11.2.0.3到12.1之间存在支持的升级路径。
2)确保源数据库备份在它必须还原的目标主机上可用。
你可以使用操作系统工具复制备份到目标主机或存储备份在目标主机可以访问的共享位置。
3) 关闭目标数据库。
4)在目标主机上,设置ORACLE_SID为源数据库上使用的相同值。
% setenv ORACLE_SID db112
5)在目标主机上启动RMAN,使用操作系统验证连接到目标数据库和不使用恢复目录。
% rman target / NOCATALOG
6)设置DBID为与源数据库相同的值。
RMAN> set DBID 699892390;
7)启动目标数据库在非挂载模式:
RMAN> startup nomount;
RMAN无法成功找到未被还原的spfile。然而,实例使用虚设的文件启动,显示以下输出:
startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/oracle/dbs/inittrgta.ora'
trying to start the Oracle instance without parameter files ...
Oracle instance started
8)从源数据库自动备份中还原spfile。
因为控制文件自动备份已在源数据库上启用,spfile包含在备份中。使用SET CONTROLFILE AUTOBACKUP FORMAT命令标明格式来还原非缺省格式的自动备份。
以下示例设置自动备份格式,还原源数据库的spfile到pfile dev3/oracle/network/init_db112.ora,然后关闭目标数据库。
run
{
set controlfile autobackup format for device type disk to ‘/scratch/fra/cf/%F.bck’;
restore spfile to pfile ‘/dev3/oracle/network/init_db112.ora’ from
autobackup recovery area ‘/scratch/fra/cf’ db_name ‘DB112’;
shutdown abort;
}
9)编辑初始化参数文件,修改要求的初始化参数。
这包括COMPATIBLE参数如果目标数据库的兼容性参数与源数据库设置的不同和在目标数据库版本中过时的参数。也更新任何位置特定的参数比如以_DEST结尾来反映新目录结构的参数。
在这个示例中,必须编辑位于/dev3/oracle/network/init_db112.ora的pfile。
10)使用编辑的初始化参数文件重启实例。
以下示例使用编辑的参数文件在非挂载模式启动数据库实例:
RMAN> startup force nomount pfile=‘/dev3/oracle/network/init_db112.ora’;
11)从自动备份中还原控制文件和挂载数据库。
以下示例设置控制文件的自动备份格式,从自动备份中还原控制文件,然后挂载数据库。
run
{
set controlfile autobackup format for device type disk to ‘/scratch/fra/cf/%F.bck’;
restore controlfile from autobackup recovery area '/scratch/fra/cf’db_name ‘DB112’;
alter database mount;
}
控制文件被还原到编辑的初始化参数文件中初始化参数CONTROL_FILES指定的位置。
12)登记源数据库的数据文件副本让它们对目标主机可用。
如果目录中的所有文件有共同的前缀,那么使用CATALOG START WITH命令。如果你想单独指定文件名称,那么使用CATALOG DATAFILECOPY命令。
在以下示例中,所有数据文件副本存储在单一的文件夹/
scratch/fra/DB112/backupset,所以使用CATALOG START WITH命令。
RMAN> catalog start with ‘/scratch/fra/DB112/backupset’;
13)还原和恢复源数据库。
如果还原数据文件到与源数据库上不同的路径,那么必须在目标主机上使用SET NEWNAME指定新路径。如果在线redo日志在与源数据库不同的位置上创建,那么使用ALTER DATABASE RENAME FILE命令指定目标数据库上每个redo日志文件的位置。
在这个示例中,使用SET NEWNAME FOR DATABASE指定所有还原的数据文件的新位置。使用ALTER DATABASE RENAME FILE命令指定每个在线redo日志的新位置。执行恢复直到在命令中指定的SCN为止。
run
{
set newname for database to ‘/ade/b/1885631999/oracle/dbs/%U.f’;
alter database rename file ‘/dev1/oracle/dbs/redo01.log’ to ‘/dev3/oracle/dbs/redo1.log’;
alter database rename file ‘/dev1/oracle/dbs/redo02.log’ to ‘/dev3/oracle/dbs/redo2.log’;
set until scn 1092435;
restore database;
switch datafile all;
recover database;
}
14)使用RESETLOGS和UPDATE选项打开还原的数据库。
RMAN> alter database open resetlogs upgrade;
Statement processed
RMAN-06900: WARNING: unable to generate V$RMAN_STATUS or V$RMAN_OUTPUT row
RMAN-06901: WARNING: disabling update of the V$RMAN_STATUS and V$RMAN_OUTPUT
rows
ORACLE error from target database:
ORA-04023: Object SYS.STANDARD could not be validated or authorized
这个错误是由于作为升级过程的一部分需要重新验证的数据库包导致。
15)退出RMAN。
16)通过执行需要升级数据库的步骤来升级目标数据库到期望的Oracle版本。
注:参考Oracle Database Upgrade Guide关于升级数据库的信息。
来源:《Oracle Database Backup and Recovery User’s Guide,19c》