NBU5240是一个基于系统文件和多种数据库备份的灾备系统,灵活性比较高。下面具体记录如何利用该系统的备份文件进行数据库还原。(基于业务场景)
公司某业务部门突然发现前台系统数据有异常,已经是几天前的跑出来的数据了,要求IT部门后台核实。FP系统前台数据利用测试机返回到13号中午跑完的时间。
数据库也要相应的返回到13号下午的数据。系统对于FP数据库是周六全备,周日不做备份策略,其他时间均为差异备份。客户端做的一系列还原操作都要安装NBU客户端工具读取主服务器上的备份文件,因为惯例用主机名称,所以要做好的HOSTS文件的识别(IP-HOSTNAME)。
C:\Users\Administrator>bplist -C zhnsdfp -s 2017-6-13 -e 2017-6-15 -k oracle_zhn
sdfp_0_97_seinescm_arch -t 4 -R -b -l / |findstr "cnt"
-rw------- SYSTEM SYSTEM 16252928 Jun 15 02:21 cntrl_1214_1_946693032:\
-rw------- SYSTEM SYSTEM 16252928 Jun 14 02:49 cntrl_1202_1_946608342:\
-rw------- SYSTEM SYSTEM 16252928 Jun 13 02:40 cntrl_1182_1_946521390:\
因为要求的是返回中午14-15点的数据库,所以控制文件的备份时间要晚于这个点,即取14号凌晨2点备份的控制文件
基于Windows平台,要先创建一个实例,实例名可以根据你自己命名,Liunx平台可以直接创建一个pfile文件启动到nomount状态
Windows平台下创建好实例后,调整归档模式及目录,关闭数据库后可以将除了参数文件的其他数据库文件通通删掉。
接着将数据库启动到NOMOUNT状态,利用RMAN脚本还原控制文件
还原好控制文件后,将数据库启动到mount状态,进行数据库还原到13号restore要加具体的时间点,下面漏了具体的时分秒,基于具体时间点的恢复,还原数据文件也要指定上(YYYY/MM/DD HH24:MI:SS)
还原好数据库之后,根据时间带出归档日志序列还原归档文件
alter session set nls_date_format='YYYYMMDD HH24:MI:SS';
set linesize 160;
set pagesize;
select THREAD#,SEQUENCE#,FIRST_TIME,COMPLETION_TIME from v$archived_log
where COMPLETION_TIME>to_date('20170613 14:00:00','yyyymmdd hh24:mi:ss')
and COMPLETION_TIME<to_date('20170613 15:00:00','yyyymmdd hh24:mi:ss') order by SEQUENCE#;
恢复归档文件
还原完归档日志文件后利用控制文件进行数据库恢复,将数据库恢复到13号下午14:20分
这里报找不到归档日志序列109672的错误信息,在困惑了好久之后突然想起该数据库的备份策略,周六全备,其他皆差异备份,所以需要还原全备以来的归档日志文件,
从日志序列109672到110181;
还原完后,再次进行数据库恢复
恢复过程将回检索全备以来的归档日志到指定恢复时间的日志序列号,完成介质恢复后,用resetlogs模式打开数据库。
SYS@seinescm>alter database open resetlogs;
数据库已更改。
SYS@seinescm>select status from v$instance;
STATUS
------------------------
OPEN
SYS@seinescm>archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 M:\test
最早的联机日志序列 1
下一个存档日志序列 2
当前日志序列 2
SYS@seinescm>