Oracle数据闪回(删除的数据、更新的数据)
查询指定时间的数据快照
sql-- 查询执行过的sql语句,确定快照时间 SELECT R.FIRST_LOAD_TIME,R.SQL_TEXT,R.* FROM V$SQLAREA R WHERE R.SQL_TEXT LIKE '%当时执行的sql语句部分片段%' ORDER BY R.FIRST_LOAD_TIME DESC -- PS:如果报错 ORA-00942: table or view does not exist,说明是用户没有查询相关的v$视图的权限,解决办法如下 -- 给用户授予所有权限 grant select any dictionary to 用户 -- 这个权限是最低的要求,但是可以访问到v$相关视图 grant select_catalog_role to 用户 -- 收回权限 revoke select_catalog_role from user -- 查询指定时间的数据快照 SELECT * FROM 表名 AS OF TIMESTAMP TO_TIMESTAMP('2025-03-06 12:00:00', 'yyyy-mm-dd hh24:mi:ss') -- 查询当前时间20分钟之前的数据快照 SELECT * FROM 表名 AS OF TIMESTAMP SYSDATE - 20 / 1440 -- PS:1440咋来的呢?一天的时间是 60(分) x 24 = 1440,SYSDATE是以天为单位,所以 SYSDATE - 20 / 1440 就是距离当前时间20分钟前的时间恢复数据
sql-- 1.启动表的row movement特性 ALTER TABLE 表名 ENABLE ROW MOVEMENT -- 2.闪回指定时间的快照 FLASHBACK TABLE 表名 TO TIMESTAMP TO_TIMESTAMP('2025-03-06 12:00:00','yyyy-mm-dd hh24:mi:ss') -- 3.关闭表的row movement功能 ALTER TABLE 表名 DISABLE ROW MOVEMENT -- PS:如果不确定具体的数据删除/修改时间,在没有太多操作这个表的情况下,闪回的时间可以稍微提前一点
Oracle表闪回(不小心drop的)
drop的表不一定能恢复,前提是oracle开启了回收站功能,或者回收站没有被清空
恢复表
查询oracle回收站表
sqlselect * from recyclebin ORDER BY CREATETIME DESC
找到ORIGINAL_NAME为被删除的表的记录的
OBJECT_NAME,然后恢复,记得OBJECT_NAME要用双引号包裹sqlFLASHBACK TABLE "BIN$YAuvlQWzQA+YBLx0RbotCQ==$0" TO BEFORE DROP