oracle恢复测试

最近做了一次rman的恢复测试,记录一下。

开启两个终端:

rman:rman  target  /;

sql:sqlplus / as sysdba;

先说一下增量和全量,增量是在全量的基础上做的备份

增量分为差异增量和累计差异增量

差异增量:

备份逻辑:当前level n到最近一次level n 或最近一次小于n期间增加的数据

RMAN备份等级详解

累计差异增量:

备份逻辑:当前level n到最近一次小于level n期间增加的数据

RMAN备份等级详解

图片来自:http://blog.sina.com.cn/s/blog_70ca64640100v5g9.html

由于本次备份采用的是周日:全量leve 0,周一~周六 增量leve 1 

所以恢复时先restore database(恢复全量),recover database(增量恢复部分,介质恢复)

1.参数文件

由于是异机恢复,内存大小都不一样,一不小心把参数文件也给恢复了(竟然还忘记了备份),最后只得初始化了下参数文件,

其实恢复时参数文件可以先不用恢复,除非环境相同

查询原来的位置:show parameter spfile;

---/home/opt/oracle/11g/dbs/spfilepdm.ora

rman:
restore spfile  to '/home/opt/oracle/11g/dbs/spfilepdm1.ora'  from '/home/opt/oracle/pdm_recovery_bak/20190609/pdm_lev0_201906092200_c-2539989307-20190610-01'

create pfile from spfile;会生成initxxx.ora的文件
修改pfile 
如果还是不成功 从init.ora复制一个模板改一下

2.恢复控制文件

由于本次的备份集的信息时写在控制文件中的,所以需要恢复一下控制文件,这样才能使用list backupset查询备份集信息。(另外备份集还可写在数据库中,一般是多台数据库备份时使用,方便管理)

rman:
alter databaser nomount;
restore controlfile from '/home/opt/oracle/pdm_recovery_bak/20190609/cntl_lev0.bak';

alter database mount时报:
ORACLE报错 ORA-00201: control file version 11.2.0.4.0 incompatible with ORACLE version 11.2.0.0.0 

以pfile启动(创建出pfile文件,删除spfile文件即可,create pfile from spfile;会生成initxxx.ora的文件),手动修改pfile文件中的版本为11.2.0.4.0

3.备份的数据集过期

rman:
crosscheck backup;#验证备份集信息是否过期,如果过期,需要删除后重新注册
delete expired backup;#删除过期的备份集信息,这个只是删除了控制文件中的备份信息


rman:
catalog start with '/home/opt/oracle/pdm_recovery_bak/';#重新注册

rman:
list backup summary;查看备份集注册情况

4.恢复数据文件

restore database;如果目录不同会恢复失败执行

圈中的是datafile文件号,由于数据库与备份集数据库的数据文件的存储路径不一致,所以需要设置下路径,运行下面的脚本:

由于数据文件较多,所以只粘了下面的模板:

rman:
{
set newname for datafile 1
  to 'C:\oracle\product\10.2.0\oradata\orcl\SYSTEM.DBF';  #实例中SYSTEM.DBF放置的位置
   set newname for datafile 2
   to 'C:\oracle\product\10.2.0\oradata\orcl\UNDOTBS1.DBF';
   set newname for datafile 3
   to 'C:\oracle\product\10.2.0\oradata\orcl\SYSAUX.DBF';
   set newname for datafile 4
   to 'C:\oracle\product\10.2.0\oradata\orcl\USERS.DBF';
   set newname for datafile 5
   to 'C:\oracle\product\10.2.0\oradata\orcl\PDM_DATA.DBF';
restore database;
recover database;
switch datafile all ; 
}

查看恢复进度

sql:
select sid,opname,serial#,context,sofar,totalwork,round(sofar/totalwork*100,2) "%_complete" from v$session_longops where opname like 'RMAN%' and opname not like '%aggregate%'   and totalwork  != 0  and sofar <> totalwork  order by "%_complete" des

可以看到文件正在恢复

实际上由于空间不足的问题,我是分开恢复的,,先恢复的全量大慨600多个G的文件(模板中的set newname 到restore database部分),之后把全量的文件删掉,把控制文件中的全量的备份集注册信息删掉(步骤2),然后(模板中的set newname 到去掉restore database部分)

执行完成后会出现下面的错误:

这是由于数据库重新启动的时候,Oracle将文件头中的那个启动scn(v$datafile_header中记录的scn)与数据库文件检查点scn进行比较,如果这两个值相互匹配,oracle接下来还要比较数据文件头中的启动scn和控制文件中数据文件的终止scn。如果这两个值也一致,就意味着所有数据块多已经提交,所有对数据库的修改都没有在关闭数据库的过程中丢失,因此这次启动数据库的过程也不需要任何恢复操作,此时数据库就可以打开了。当所有的数据库都打开之后,存储在控制文件中的数据文件终止scn的值再次被更改为null,这表示数据文件已经打开并能够正常使用了。如果数据库是异常关闭或者通过不完全恢复过来的,那么终止scn会是null,所以启动数据库时,就需要做实例恢复,利用online redolog来恢复数据库,这也就是实例启动时,SMON进程会去利用redolog做恢复,俗称‘前滚‘数据库。(此段文字摘自:https://blog.csdn.net/qq_22935429/article/details/50558321 

最后一行的scn就是能恢复到的scn

执行:recover database until scn XXXXX;

这时报redo文件不存在,是因为我的数据库和备份集中redo路径不一致导致的

  sql:
select * from v$logfile;-- 查出当前控制文件所记录的redo路径

select sequence#,group#,status from v$log; --当前redo文件的组号和状态

 

ORA-00349  redo路径不一致报的错误

修改路径:
         ALTER DATABASE RENAME FILE '/data/pdm/DATA/pdm/redo04.log'  TO '/home/opt/oracle/oradata/pdm/redo001.log';
         ALTER DATABASE RENAME FILE '/data/pdm/DATA/pdm/redo05.log'  TO '/home/opt/oracle/oradata/pdm/redo002.log';
          ALTER DATABASE RENAME FILE '/data/pdm/DATA/pdm/redo06.log'  TO '/home/opt/oracle/oradata/pdm/redo003.log';

 ora-00392 日志正在清除故障

select group#,bytes/1024/1024||'M',status from v$log;-- 查询清楚状态
 根据查出的组号执行下面sql语句
             ALTER DATABASE CLEAR LOGFILE GROUP 4;
             ALTER DATABASE CLEAR LOGFILE GROUP 5;
             ALTER DATABASE CLEAR LOGFILE GROUP 6;

此时rman执行 alter database open resetlogs;启动成功

rman执行的xshell日志在:https://me.csdn.net/download/qq_35201754

猜你喜欢

转载自blog.csdn.net/qq_35201754/article/details/92573830