ITPub博客

首页 > 数据库 > Oracle > ORACLE数据库基于时间点的不完全恢复

ORACLE数据库基于时间点的不完全恢复

Oracle 作者:shilei1 时间:2019-05-01 12:36:04 0 删除 编辑

ORACLE数据库基于时间点的不完全恢复

 (2006-09-18 16:42:25)
2006年维护典型案例之
----ORACLE数据库基于时间点的不完全恢复
一、问题概述
2006年7月7日,15:15分,由于开发人员不慎,误将PORT_DETIALS表TRUNCATE,导致该表数据完全丢失。经过短暂时间的信息收集了解到如下情况:
1. PORT_DETIALS于15:15分被TRUNCATE ,该表数据为号码端口信息,丢失会影响整个配号流程。
2. 数据库工作于ARCHIVED模式,使用带CATALOG 的RMAN的联机备份。
3. 上一次数据库全备份执行日期为2006年6月27日。且自上次全备份以来的所有ARCHIVED  LOG文件均被完整备份,日志序列号为4823----4913。
二、解决方案
为了将影响减低到最小,经过仔细的研究,确定了如下的恢复流程:
通知业务部门,停止配号业务并继续运行其它业务。待18:00点下班后,SHUTDOWN 原数据库并将原库数据文件,控制文件,REDOLOG 文件重命名,随后执行数据库的基于时间点的不完全恢复,恢复到15:13分,然后取出PORT_DETIALS表,并恢复到原库中,即可恢复PORT_DETIALS表。
三、恢复步骤
具体各步骤执行如下:
1. 确定数据文件,控制文件,REDO LOG路径及名称
 SQL> select * from v$logfile order by group#;
    GROUP# STATUS  MEMBER
---------- ------- --------------------------------------------------------------------------------
         1         /itsmdata/oradata/ora7/redo11.log
         1         /itsmidx/oradata/ora7/redo12.log
         2         /itsmdata/oradata/ora7/redo21.log
         2         /itsmidx/oradata/ora7/redo22.log
         3         /itsmdata/oradata/ora7/redo31.log
         3         /itsmidx/oradata/ora7/redo32.log
         4         /itsmdata/oradata/ora7/redo41.log
         4         /itsmidx/oradata/ora7/redo42.log
         5         /itsmdata/oradata/ora7/redo51.log
         5         /itsmidx/oradata/ora7/redo52.log
         6         /itsmdata/oradata/ora7/redo61.log
         6         /itsmidx/oradata/ora7/redo62.log
SQL> select name from v$datafile ;
NAME
--------------------------------------------------------------------------------
/itsmdata/oradata/ora7/system01.dbf
/itsmdata/oradata/ora7/tools01.dbf
/itsmdata/oradata/ora7/rbs01.dbf
/itsmdata/oradata/ora7/data_hx01.dbf
/itsmdata/oradata/ora7/data_hx02.dbf
/itsmidx/oradata/ora7/data_hx03.dbf
/itsmdata/oradata/ora7/data_hx04.dbf
/itsmdata/oradata/ora7/data_hx05.dbf
/itsmsys/oradata/ora7/data_hx06.dbf
/itsmdata/oradata/ora7/data_hx_0101.dbf
/jfxtdata/oradata/data_hx_idx01.dbf
/jfxtdata/oradata/data_hx_idx02.dbf
/jfxtdata/oradata/data_hx_idx03.dbf
/jfxtdata/oradata/data_hx_idx04.dbf
/itsmdata/oradata/ora7/data_hx07.dbf
/itsmdata/oradata/ora7/data_hx08.dbf
/itsmidx/oradata/ora7/data_hx09.dbf
/itsmdata/oradata/ora7/data_hx10.dbf
/itsmdata/oradata/ora7/data_hx11.dbf
/itsmidx/oradata/ora7/data_hx12.dbf
/itsmdata/oradata/ora7/data_hx13.dbf
/itsmdata/oradata/ora7/perfstat.dbf
/itsmdata/oradata/ora7/data_hx_0102.dbf
/itsmdata/oradata/ora7/data_hx_0103.dbf
/jfxtdata/oradata/data_hx_idx05.dbf
/jfxtdata/oradata/data_hx_idx06.dbf
/itsmdata/oradata/ora7/perfstat1.dbf  
SQL> select name from v$controlfile ;
NAME
--------------------------------------------------------------------------------
/itsmsys/oradata/ora7/control01.ctl
/itsmidx/oradata/ora7/control02.ctl
/itsmdata/oradata/ora7/control03.ctl
2. 确定需要的恢复的ARCHIVED LOG 文件
SQL〉select thread#,to_char(first_time,'yyyymmdd') riqi,sequence# from v$log_history
where to_char(first_time,'yyyymmdd')>='20060627'
order by thread#,riqi;
查询得出需要恢复的日志序列号为4823----4913。
3.18:00关闭数据库,重命名相关文件。
$ sqlplus "/as sysdba"
Sql> shutdown immediate
Sql>exit
$ mv /itsmdata/oradata/ora7/system01.dbf  /itsmdata/oradata/ora7/system01.dbf.orig
$ mv /itsmdata/oradata/ora7/tools01.dbf   /itsmdata/oradata/ora7/tools01.dbf.orig
.
.
.
4. 执行数据库的基于时间点的不完全恢复,并导出PORT_DETAILS 表
1)restore数据库
$ rman target / catalog rmanhx/******@rmanyy
Recovery Manager: Release 8.1.7.4.0 - Production
RMAN-06005: connected to target database: ORA7 (DBID=1302697569)
RMAN-06008: connected to recovery catalog database
RMAN>startup nomount ;
RMAN > run {
allocate channel 'dev1' type sbt_tape parms
'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=ora7)';
allocate channel 'dev2' type sbt_tape parms
'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=ora7)';
restore database;
release channel dev1;
release channel dev2;
}
RMAN > exit
2)恢复归档日志
$ rman target / catalog rmanhx/******@rmanyy
Recovery Manager: Release 8.1.7.4.0 - Production
RMAN-06005: connected to target database: ORA7 (DBID=1302697569)
RMAN-06008: connected to recovery catalog database
RMAN > run {
allocate channel 'dev1' type sbt_tape parms
'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=ora7)';
allocate channel 'dev2' type sbt_tape parms
'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=ora7)';
restore archivelog from logseq 4823 until logseq 4913;
release channel dev1;
release channel dev2;
}
RMAN>exit

3)RECOVER数据库至2006年7月7日15:13
$ Sqlplus "/as sysdba"
Sql> alter database mount;
Sql> alter session set nls_date_format='yyyymmdd hh24:mi:ss';
Sql > set until time='20060707 15:00:00';
Sql > recover database;
Sql > alter database open resetlogs;
Sql >exit
$ exp itsm/**** tables=port_details direct=y file=/itsmdata/port.dmp feedback=10000 recordlength=65535

5. 关闭不完全恢复的数据库,并恢复原库的数据文件、控制文件及REDO文件名,启动原库。
$sqlplus "/as sysdba"
sql > shutdown immediate
sql > exit
$ mv /itsmdata/oradata/ora7/system01.dbf.orig  /itsmdata/oradata/ora7/system01.dbf
$ mv /itsmdata/oradata/ora7/tools01.dbf.orig   /itsmdata/oradata/ora7/tools01.dbf
.
.
.
$sqlplus "/ as sysdba"
Sql > startup
6.DISABLE PORT_DETAILS表上的触发器,导入数据后,ENABLE表上的触发器。
Sql >ALTER TABLE PORT_DETAILS DISABLE ALL TRIGGERS;
Sql > exit ;
$ imp itsm/itsm file=/itsmdata/port.dmp buffer=51200000 ignore=y indexes=n fromuser=itsm tables=port_details touser=itsm feedback=10000 commit=y
Sql >ALTER TABLE PORT_DETAILS ENABLE ALL TRIGGERS;
经过如上的恢复步骤,整个恢复过程完成,经过检查及测试,数据完全恢复,业务运行正常。本案例涉及到ORACLE数据库的带CATALOG 的RMAN备份与基于时间点的不完全恢复;数据库的冷备份等等数据库的备份与恢复高级技术,可以作为解决同类问题的参考文档。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/196700/viewspace-1067981/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-10-10

  • 博文量
    546
  • 访问量
    25607