确认能够恢复的时间点:
flashback database 所能回退到最早的时间,取决于保留的flashback database log 多少,视图V$flashback_database_log提供许多信息。oldest flashback scn 是说目前数据库能回退的最早SCN,
oldest flashback time 说明数据库能够回退到的最早时间,这两列从不同角度说明一个问题,retention target 是当前系统参数设置值,flashback size 代表目前flashback log 空间,而estimated flashback size 是说为了达到retention target 定义的要求,预计需要多大的flashback log 空间,这个值可以用于指导设置 flash recovery area大小。
创建表:
create table test22 as select * from employees;
Table created.
记录时间:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2012-04-25 10:12:31
截断表:
truncate table test22;
Table truncated.
查询可以闪回的时间:
select oldest_flashback_scn, to_char(oldest_flashback_time,'yyyy-mm-dd hh24:mi:ss') flash_time, retention_target, flashback_size, estimated_flashback_size from v$flashback_database_log;
OLDEST_FLASHBACK_SCN FLASH_TIME RETENTION_TARGET FLASHBACK_SIZE
-------------------- ------------------- ---------------- --------------
ESTIMATED_FLASHBACK_SIZE
------------------------
668713 2012-04-24 09:31:53 1440 88276992
178077696
执行闪回:
首先关闭两个节点的数据库,然后把第一个节点启动到MOUNT 状态进行闪回。
flashback database to timestamp to_timestamp('2012-04-25 10:12:31','yyyy-mm-dd hh24:mi:ss');
Flashback complete.
将数据库打开以RESETLOGS 方式打开。 在这里我是记录了时间所以可以这样做, 当不清楚表截断的时间时,可以估计时间进行,执行多次闪回, 验证数据时必须以READ ONLY的方式打开数据库,如发现表还是空的,可以再关闭数据库,启动到MOUNT 进行第二次闪回。
alter database open resetlogs;
Database altered.
验证:
select count(*) from test22;
COUNT(*)
----------
107
将第二节点启动,并验证。
select count(*) from hr.test22;
COUNT(*)
----------
107
本文介绍如何使用Oracle的闪回数据库功能恢复误操作的数据。通过创建表、记录时间点、截断表等步骤,演示了如何查询可闪回的时间范围,并实际执行闪回操作以恢复数据。
741

被折叠的 条评论
为什么被折叠?



