暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

RMAN异机恢复总结

原创 不吃草的牛_Nick 2022-11-18
4792

1:了解一下目标服务器与源服务器的操作系统版本信息
需要对比一下目标服务器与源服务器的操作系统版本是否一致,具体来说,操作系统版本信息、内核信息(例如Oracle Linux是否使用Unbreakable Enterprise Kernel内核等),
以及操作系统是32bit还是64bit等。如果RMAN异机恢复只是准备Dev、Test、UAT环境,那么这个完全可以忽略,如果是正式环境的迁移,那么最好关注一下,避免一些问题。例如,有些版本的操作系统对不是官方认证的,如果在迁移前不关注这些,那么迁移后,有可能出现一些意想不到的问题。

uname -a
uname -m
more /etc/redhat-release


2:检查目标服务器与源服务器的数据库版本信息
如果源数据库和目标数据库版本一致,那么完全可以跳过这一步。但是,有时候可能是从32位还原升级到64位;有些是从ORACLE 10g 迁移升级到ORACLE 11g,
那么在后面的RMAN还原后,还需做一些额外的Upgrade工作。在一次迁移过程,事先安装过程中不小心选错了版本(标准版弄成了企业版,安装过程中由于检查某个选项,点击后退过程中系统默认选择了企业版,当时没有发现)

32bit
64bit
select * from v$version;


3:检查实例安装路径以及数据文件等路径
这里指数据库实例的安装路径,以及数据文件、控制文件、参数文件是否一致,如果全部一致的话,那么可以避免很多问题,但是很多时候,我们需要重新规划存储路径或者其它一些原因,这些数据文件、参数文件等,很有可能跟源服务器不一致,那么事先了解这些,在迁移过程中就必须注意到这些情况。作出相应的处理。否则RMAN还原过程中就会遇到一些问题。


4:将备份文件拷贝的相关目录
可以将备份拷贝到恢复目录解压或指定目录解压。
如果源服务器与目标服务器的RMAN备份路径一致,那么可以省去很多不必要的麻烦。


5: 创建相关的目录
例如,目标服务器安装ORACLE实例时,选择了“只安装实例”选项,那么在RMAN还原之前,我们必须创建下面一些目录
(这些不是必须的,有些环境甚至完全不必要。具体根据实际情况判断):

5-1:创建$ORACLE_BASE/admin/$ORACLE_SID/下的六个目录;
5-2:$ORACLE_BASE/oradata下创建$ORACLE_SID目录;
5-3:RMAN备份路径目录(这个地方最好与源数据库一致,创建好后,把源数据库备份的数据文件复制到这个目录里);--非必须。
5-4:归档日志目录(同样,创建好后,把需要的归档日志文件复制到此目录) --非必须。


操作步骤

1:查询DBID信息
DBID是 DataBase IDentifier 的缩写,意思就是数据库的唯一标识符。
这个DBID在数据文件头和控制文件都是存在的,可以用于标示数据文件的归属。

对于不同数据库来说,DBID应当不同,而db_name则可能是相同的。一般在nocatalog模式并且控制文件丢失时才需要这个。
select name,dbid from v$database;


如果源服务器已经宕机,那么如何查询DBID相关信息呢? 关于这个,其实也有很多方法获取,
例如,如果你曾经做过AWR报告,可以从AWR中找到对应的DBID,也可以从恢复的控制文件获取等。


2:启动数据库实例到nomount状态
使用RMAN还原恢复时,DB必须启动到nomout状态。

[oracle@db01 SCM2]$ rman target /
RMAN> startup nomount pfile='/home/oracle/oracle/product/10.2.0/db_1/dbs/init.ora';


3:还原参数文件spfile
RMAN> set DBID=3990839260;
RMAN> restore spfile to pfile '/home/oracle/oracle/product/10.2.0/db_1/dbs/spfileSCM2.ora' from '/app/backup/backup/backupsets/ora_cfc-3990839260-20170518-00';

参数文件恢复后,需要修改相关参数,这里由于测试缘故,我们故意在目标服务器安装ORACLE实例时,随意选择了一个路径,
故意与源服务器ORACLE实例的安装路径不一致,当然,还有其它一些情况,也有可能导致你必须修改一些参数。


如果前面准备步骤,没有创建对应的udmp等目录,就会遇到下面错误
RMAN> startup nomount pfile='/home/oracle/oracle/product/10.2.0/db_1/dbs/initSCM2.ora';
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of startup command at 05/26/2017 15:27:45
RMAN-04014: startup failed: ORA-00444: background process "PMON" failed while starting
ORA-07446: sdnfy: bad value '' for parameter .


4: 还原控制文件(control file)。
如果你实在不知道控制文件在那个备份集的那个文件,那么可以在源服务器使用list命令查看。如下所示。
当然如果经验丰富或者你对备份与还原了如指掌的话, 完全不用这一步骤。

RMAN> list backup of controlfile;


后续具体操作操作如下所示
RMAN> shutdown immediate;
RMAN> exit

[oracle@db01 ~]$ export ORACLE_SID=SCM2;
[oracle@db01 ~]$ rman target /
RMAN> startup nomount pfile='/home/oracle/oracle/product/10.2.0/db_1/dbs/initSCM2.ora';
RMAN> restore controlfile from '/app/backup/backup/backupsets/ora_cfc-3990839260-20170518-00';


5:启动数据库到mount状态
RMAN> alter database mount;


6:检查数据库备份有效性
RMAN> crosscheck backup;


通过下面这个命令可以将备份集注册到控制文件。catalog start with 命令将以前的备份集信息重新导入到当前控制文件中,
一般应用于RMAN恢复, 控制文件又是旧的或者是手工创建的(这样的控制文件当然没有最新的备份集的信息),
或者恢复目录不一致的情况, 通过catalog start with 可以将最新的备份集以及归档日志文件列表导入到控制文中, 然后就可以进行rman的恢复了.

RMAN> catalog start with '/app/backup/backup';
RMAN> crosscheck backup;
RMAN> restore database preview summary;


7: Restore database
如果要将数据文件还原到不同的地方(恢复路径不同),那么就要用set命令指定新位置。
并且使用 switch datafile all 将信息更新的到控制文件。否则就可以直接使用restore database命令。

run
{
set newname for datafile 1 to "/data/scm2/system01.dbf";
set newname for datafile 2 to "/data/scm2/undotbs01.dbf";
set newname for datafile 3 to "/data/scm2/sysaux01.dbf";
set newname for datafile 4 to "/data/scm2/users01.dbf";
set newname for datafile 5 to "/data/scm2/bookt_d01.dbf";
restore database ;
switch datafile all;
}

--如果路径不一致
set line 200
set pagesize 50000
select 'set newname for datafile '|| file# || ' to ' || '''+DATA/ces222/datafile/' || lower(substr(name,instr(name,'/',-1)+1))||''';' from v$datafile;
union all
select 'set newname for tempfile '|| file# || ' to ' || '''+DATA/ces222/tempfile/' || lower(substr(name,instr(name,'/',-1)+1))||''';' from v$tempfile;


8 Recover database;

RMAN> recover database;


9:处理redo log和temp表空间
如前面所说,如果实例安装路径不同,或者redo log和临时表空间对应的文件在目标服务器上找不到。那么就必须操作下面
col status for a7
col type for a7;
col member for a64;
select * from v$logfile;


alter database rename file '/u01/app/oracle/oradata/SCM2/redo01.log' to '/home/oracle/oracle/oradata/SCM2/redo01.log';
alter database rename file '/u01/app/oracle/oradata/SCM2/redo02.log' to '/home/oracle/oracle/oradata/SCM2/redo02.log';
alter database rename file '/u01/app/oracle/oradata/SCM2/redo03.log' to '/home/oracle/oracle/oradata/SCM2/redo03.log';
alter database rename file '/u01/app/oracle/oradata/SCM2/redo04.log' to '/home/oracle/oracle/oradata/SCM2/redo04.log';


如果不处理,否则就会出现这样的错误:

RMAN> alter database open resetlogs;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of alter db command at 05/26/2017 16:28:37
ORA-00344: unable to re-create online log '/u01/app/oracle/oradata/SCM2/redo01.log'
ORA-27040: file create error, unable to create file
Linux-x86_64 Error: 2: No such file or directory


col name for a80;
select name from v$tempfile;

alter database tempfile '/u01/app/oracle/oradata/SCM2/temp01.dbf' drop;
alter tablespace temp add tempfile '/home/oracle/oracle/oradata/temp01.dbf' size 200M autoextend on next 128M maxsize 4G;


10:用open resetlogs 打开数据库,正常情况下应该是
alter database open resetlogs;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论