案例描述:
生产库,客户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)执行基于时间点的不完全恢复。
转载于:https://blog.51cto.com/99570386/967439