目录
一、准备需要恢复的数据
巧妇难为无米之炊,没有恢复的数据可不行。
根据你的备份策略备份的文件来获取需要的备份的控制文件、备份的数据文件及备份的归档日志文件。
如果是要恢复到当天,但当天还未备份,需要直接拷贝A机当天的归档日志和redo日志)
准备好用于恢复数据库的B机服务器
恢复思路就是根据备份的控制文件、数据文件、归档文件。A库现有的redo日志文件进行数据库恢复。
切记:需要的恢复数据一定要准备完整,且拷贝到B机(恢复服务器)的恢复目录(我一般使用备份集的目录)才进行恢复操作,否则后续会遇到很多报错的麻烦。备份文件一定是在恢复点之前完成的备份。
在B机上执行:1、2、3步
1. show parameter DB_RECOVERY_FILE_DEST; --查看快闪恢复区,找到备份集目录
我的快闪恢复区显示在:/opt/oracle/oradata2/flash_recovery_area 目录
备份集目录在快闪目录下的:/opt/oracle/oradata2/flash_recovery_area/ORCL/backupset 目录
2. 将备份好的恢复文件全部复制到 /opt/oracle/oradata2/flash_recovery_area/ORCL/backupset 目录下(注意用户权限问题)
3. 解压备份策略备份的文件(未压缩请忽略此步):tar -zxvf 20220421data.tar.gz
二、在B机上恢复
SQL> shutdown immediate
SQL> startup nomount
--备份B机上redo日志
mv /opt/oracle/oradata/orcl/redo01.log /opt/oracle/oradata/orcl/redo01.log.bak
mv /opt/oracle/oradata/orcl/redo02.log /opt/oracle/oradata/orcl/redo02.log.bak
mv /opt/oracle/oradata/orcl/redo03.log /opt/oracle/oradata/orcl/redo03.log.bak
--从A机拷贝当天的归档日志和redo日志到B机(恢复当天的需要拷贝、恢复其它天的可以省略)(当天增量数据)
192.168.0.x为A机
scp -r oracle@192.168.0.x:/opt/oracle/flash_recovery_area/ORCL/archivelog/2022_04_21 /opt/oracle/oradata2/flash_recovery_area/ORCL/backupset/
scp -r oracle@192.168.0.x:/opt/oracle/oradata/orcl/redo01.log /opt/oracle/oradata/orcl/
scp -r oracle@192.168.0.x:/opt/oracle/oradata/orcl/redo02.log /opt/oracle/oradata/orcl/
scp -r oracle@192.168.0.x:/opt/oracle/oradata/orcl/redo03.log /opt/oracle/oradata/orcl/
--进入rman环境,然后exit;退出进行登录
[oracle@localhost ~]$ rman
--登录rman
[oracle@localhost ~]$ rman target /
RMAN> set DBID=1535108156
--恢复控制文件,必须是到恢复时间点之后的控制文件,不然recover时可能找不到SCN记录
RMAN> restore controlfile from "/opt/oracle/oradata2/flash_recovery_area/ORCL/backupset/control_20220421_1102551008_6842";
RMAN> alter database mount;
--执行代码块,更改数据文件路径,还原数据库
RMAN> run {
set newname for datafile '/opt/oracle/oradata/orcl/gytestds.dbf' to '/opt/oracle/oradata2/gytestds.dbf';
set newname for datafile '/opt/oracle/oradata/orcl/gytestds02.dbf' to '/opt/oracle/oradata2/gytestds02.dbf';
set newname for datafile '/opt/oracle/oradata/orcl/gytestds01.dbf' to '/opt/oracle/oradata2/gytestds01.dbf';
set newname for datafile '/opt/oracle/102/dbs/omng01.dbf' to '/opt/oracle/oradata2/omng01.dbf';
set newname for datafile '/opt/oracle/102/dbs/omng.dbf' to '/opt/oracle/oradata2/omng.dbf';
set newname for datafile '/opt/oracle/oradata/orcl/sysaux01.dbf' to '/opt/oracle/oradata2/sysaux01.dbf';
set newname for datafile '/opt/oracle/oradata/orcl/system01.dbf' to '/opt/oracle/oradata2/system01.dbf';
set newname for datafile '/opt/oracle/oradata/orcl/undotbs01.dbf' to '/opt/oracle/oradata2/undotbs01.dbf';
set newname for datafile '/opt/oracle/oradata/orcl/users01.dbf' to '/opt/oracle/oradata2/users01.dbf';
restore database;
switch datafile all;
}
--恢复数据到某个时间点
RMAN> recover database until time "to_date('2022-04-21 09:10:00','yyyy-mm-dd hh24:mi:ss')";
RMAN> alter database open resetlogs;
三、补充
--指定存放恢复文件的备份集路径
catalog start with '/opt/oracle/oradata2/flash_recovery_area/ORCL/backupset/';
RMAN> restore database preview;
1、查看恢复整个数据库所需要的备份文件是否存在
RMAN> restore database validate;
1、检查用于恢复数据库的最新备份集,以确认这个备份是否完整
2、检查恢复所需要的数据文件副本和归档日志备份集,并确认他的完整性
3、validate对备份集进行全面验证,确定完整性
--验证控制文件和参数文件
RMAN> restore validate controlfile;
RMAN> restore validate spfile;
--根据原库查询出更改数据文件恢复路径的语句
select 'set newname for datafile '''||file_name||''' to ''/usr/date/oracle/102/data'||substr(file_name,instr(file_name,'/',-1))||''';' from dba_data_files
order by tablespace_name