在前两篇文章中描述了中小型数据库使用RMAN catalog设计备份与恢复方案,并给出了所有相关的脚本来从某种车程度上模拟Oracle Data Guard以减少硬件故障带来Prod服务器上数据库损失。在这边文章中主要描述Prod数据库的变迁在Bak server端如何进行恢复。
中小型数据库 RMAN CATALOG 备份恢复方案系列文章:
- 中小型数据库 RMAN CATALOG 备份恢复方案(一)
- 中小型数据库 RMAN CATALOG 备份恢复方案(二)
- 中小型数据库 RMAN CATALOG 备份恢复方案(三)
1、恢复前提
按照前两篇文章的描述,我们制定了每天做一个level 0级备份并ftp整个备份集到Bak server。同时定时ftp Prod的归档日志到Bak server。
其次是每天会对Bak server端的数据库做还原(restore)操作。因此对于Bak server实现数据恢复所要做的是应用归档日志(含定时ftp的归档日志)
将数据库刷新到最新时刻。对于备份如恢复的间隔也可自行定义,如每2天做一次。下面是恢复的前提条件,否则需要手动备份或还原。
使用RMAN备份脚本已经完成RMAN备份,且备份被ftp到备份服务器
使用RMAN恢复脚本已经在备份服务器成功进行了还原
2、Prod DB上准备测试数据
SQL> select * from v$version where rownum select instance_name,host_name from v$instance;
INSTANCE_NAME HOST_NAME
---------------- ---------------------------------------------
Ak3210 N10db03p
--为prod添加tablespace
SQL> create tablespace tbs_tmp datafile '/u02/database/Ak3210/oradata/tbs_tmp.dbf' size 10m autoextend on;
--基于新的tablespace添加表对象
SQL> create table xy(seq varchar2(20),who varchar2(20),dt varchar2(20)) tablespace tbs_tmp;
--插入数据
SQL> insert into xy select 'FirstArch','Robinson',to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;
SQL> commit;
--对当前日志归档
SQL> alter system archive log current;
--下面是生成的归档日志
SQL> ho ls
arch_818416637_1_157.arc
--验证刚刚插入的记录是否存在于归档日志
SQL> ho strings arch_818416637_1_157.arc | grep "FirstArch"
FirstArch
--再次插入新的数据
SQL> insert into xy select 'SecnodArch','Jackson',to_char(sysdate,'yyyymmdd hh:mi:ss') from dual;
SQL> commit;
SQL> alter system archive log current;
SQL> ho ls
arch_818416637_1_157.arc arch_818416637_1_158.arc
SQL> ho strings arch_818416637_1_158.arc | grep "SecnodArch"
SecnodArch
--Author : Robinson Cheng
--Blog : http://www.linuxidc.com
--将归档日志文件复制到备份服务器
SQL> ho scp *.arc 192.168.250.101:/u02/database/Ak3210/archive
arch_818416637_1_157.arc 100% 34MB 34.2MB/s 00:00
arch_818416637_1_158.arc 100% 12KB 12.0KB/s 00:00
--Prod数据库的归档情况,当前Log sequence是159
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u02/database/Ak3210/archive/
Oldest online log sequence 157
Next log sequence to archive 159
Current log sequence 159
SQL> col name format a60
SQL> set linesize 160
SQL> alter session set nls_date_format='yyyymmdd hh24:mi:ss'; -->查询归档日志
SQL> select name,sequence#,status,COMPLETION_TIME from v$archived_log where status='A';
NAME SEQUENCE# S COMPLETION_TIME
------------------------------------------------------------ ---------- - -----------------
/u02/database/Ak3210/archive/arch_818416637_1_157.arc 157 A 20130731 16:34:30
/u02/database/Ak3210/archive/arch_818416637_1_158.arc 158 A 20130731 16:35:42
SQL> select * from xy;
SEQ WHO DT
-------------------- -------------------- --------------------
FirstArch Robinson 20130731 16:34:15
SecnodArch Jackson 20130731 16:35:35