案例描述:

        生产库,客户2012-08-17日误操作删除了业务表空间下面的部分数据,当时没有恢复。2012-08-20日要求恢复17日删除的数据。在17到20日期间,数据库一直在使用,并且没有做备份。17日之前也没有有效备份。数据库是archivelog mode模式。

环境描述:

linux

orace 10.2.0

处理:

0)复习查看数据库是否归档的方法:

SQL>select LOG_MODE  from v$database;

SQL>archive log list;

1)首先希望通过10g的flashback特性查到误操作的数据。

查询undo相关参数

SQL> show parameter undo_retention
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_retention                       integer     900

此处复习一下另外一个命令:

Alter tablespace undotbs1 retention guarantee;

Alter tablespace undotbs1 retention noguarantee;

undo_retention参数是默认的900秒,已经过去2天多的时间,只能尝试一下数据是否还在undo中。

用闪回查询:

SQL> select * from  new12315.pc12315_info_td  as of timestamp sysdate-3  where id='4080e3a536dfc82301373602d093384e';
 
ORA-01555: snapshot too old: rollback segment number 10 with name "_SYSSMU10$" too small

看来闪回无法找回这部分数据。

2)因为有归档日志,希望通过rman备份含spfile,controlfile,datafile,archive log file的backupset,然后将backupset拷贝到测试库,并恢复出来,再将测试库不完全恢复到17号,找出当天数据。

有两个问题

1)本地没有linux环境测试机,仅有windows环境,异机异地数据库迁移。

2)17号之前没有完整备份,是否能做不完全恢复。

基于有归档无备份的恢复

此种恢复方式仅适用于非系统表空间

大概思路如下

a)restore需要恢复的数据文件;重建数据文件。

b)执行基于时间点的不完全恢复。