46人参与 • 2025-02-12 • Oracle
1、闪回查询通常只能恢复几小时内的数据,因为undo表空间的大小和保留策略限制了旧数据版本的保留时间。
2、在进行闪回操作之前,建议备份当前数据库或相关数据,以防止意外情况导致数据丢失。
3、闪回功能不依赖于日志,可以在线恢复,无需关闭数据库,操作简单且恢复速度快1
使用select * from 表名 as of timestamp(时间点)语句,可以查询并恢复在指定时间点之前的数据状态。
例如,要查询10分钟前的数据,可以使用select * from 表名 as of timestamp(sysdate-10/1440)。
未更新前:4
delete update insert更新后:2
根据更新后的时间来确定数据要恢复的时间,比如恢复5分钟前的数据、20分钟前的等等时间段;
查询3分钟前的数据:
语法:
select * from 表名 as of timestamp(sysdate-3/1440);
此时查询到的数据为更新发生后,前3分钟的数据,相当于原来的数据,未改变的数据。
实际工作中可以根据具体时间来恢复,此时数据已经查到了原来的旧数据,创建新表拷贝闪回查询的数据:
闪回查询前10分钟的数据并拷贝到新表test_old中:
sql> create table test_old as select * from test1 as of timestamp(sysdate-10/1440); 表已创建。 sql> select * from test_old; no name ---------- ---------- 1 aa 2 bb 3 cc 4 dd
闪回查询的数据已经拷贝到新表test_old中,然后将原来的表test1表删除,将test_old表名修改未test1,整个闪回查询恢复数据流程到此恢复完成结束。
未更新前数据:
未更新前数据库系统时间:
此时的时间为表未发生任何变化的系统时间节点,后期根据这个时间节点来恢复数据,
更新表数据:delete update insert
delete test_old where no='2'--删除表中数据
表中操作已经完成,查询更新后的系统时间:
select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual -- 更新表后的时间20250107 17:17:33
当表中完成更新,得知更新前的系统时间和更新后的系统,就可以根据具体时间来恢复数据:
比如恢复到更新数据前系统的具体时间,上面第一次获取的时间:
select * from test_old as of timestamp to_date('20250107 17:59:28','yyyymmdd hh24:mi:ss') --恢复具体时间的数据
此时可以看到更新后,根据未更新前的系统时间来恢复了被更新的数据,创建新表拷贝恢复的数据,更新为原来的表,整个恢复流程完成,后期频繁的去更新只要知道具体的时间一定时间内都能正常恢复到为操作前的状态。
更新中:…
1、获取未操作前的scn值:
select dbms_flashback.get_system_change_number from dual --获取当前的scn 27511490
此时scn值未任何操作时候的scn。
2、对表进行delete update insert(更新);
delete test_old where no=5;
更新成功,
3.获取更新后的 scn:
此时更新操作前和操作后的值都获取到了,可以更新scn数值区间进行闪回查询:27511490- 27512132,
4、根据scn闪回查询:
语法: select * from test_old as of scn 数值;select * from test_old as of scn 27511490–根据scn的区间来一步一进行闪回查询 27511490- 27512132,之间取值
此时根据更新前的scn闪回查询返回到了,未操作前的状态,然后新建立表拷贝闪回查询的数据进行恢复即可:
create table test2_old as select * from test_old as of scn 27511490;
此时将scn闪回查询的数据已经恢复到新表中,可以对新表对象进行任何操作。
注意:
1、如果只有操作后的scn可以根据scn数据值大小一个一个去测试,知道闪回查询
2、如果有操作前后区间的scn值,可以根据区间去一一测试,直到闪回查询
···**闪回查询只要查看过去具体时间点的数据变化**···
如果表结构没有发生改变,并且用户有flash any table权限,可以使用alter table 表名 enable row movement和flashback table 表名 to timestamp(时间点)语句来将整个表闪回到指定的时间点45。
闪回数据库功能允许将整个数据库回滚到过去某个时间点,但这通常用于更严重的灾难恢复场景,并且需要配置恢复区(flash recovery area)2。
当使用drop命令删除表时,oracle并不会立即清空表所占用的空间,而是将表的信息放到一个虚拟的“回收站”中。在块未被重新使用之前,可以通过查询user_tables视图或user_recyclebin来找到被删除的表,并进行恢复
到此这篇关于oracle闪回恢复数据的文章就介绍到这了,更多相关oracle闪回恢复数据内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论