暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle中如何访问已删除的数据

原创 wzf0072 2022-11-02
2670

 Oracle中如何访问已删除的数据


1、修改的数据可以通过查询undo tablespace中的这个table的数据(此方法受到undo_retention的限制,该参数设定修改的数据在undo tablespace中的存放时间,过期就会被覆盖掉)
SELECT col1,col2,col3

FROM table_name AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL'0'MINUTE)

WHERE col1='2';


2、table 被drop后可以通过recycle bin查询 

drop table table_name;

drop table table_name cascade constraints;

drop table table_name purge;

如果使用第3中方法,table 将无法恢复。前2种都是将table放到recycle bin中,我们仍可以通过一下方法查询到:

flashback table table_name to before drop; 将 table 恢复

select * from table_name;

如果table 删除后有被re-create,那要访问已删除的那个table时需要加rename:

flashback table table_name to before drop rename to table_name_old;




一:表的恢复

对误删的表,只要没有使用PURGE永久删除选项,那么从FLASHBACK TABLE区恢复回来希望是挺大的。一般步骤有:

1、从FLASHBACK TABLE里查询被删除的表

SELECT * FROM RECYCLEBIN ORDER BY DROPTIME DESC

2.执行表的恢复

FLASHBACK TABLE TABLE_NAME TO BEFORE DROP;

二:表数据恢复

对误删的表记录,只要没有 TRUNCATE 语句,就可以根据事务的提交时间进行选择恢复,一般步骤有:

1、先从 FLASHBACK_TRANSACTION_QUERY 视图里查询,视图提供了供查询用的表名称、事务提交时间、UNDO_SQL等字段。

SELECT * FROM FLASHBACK_TRANSACTION_QUERY WHERE TABLE_NAME='TEST';

2、执行表记录恢复

一般先根据时间进行查询,查询语句模式为

SELECT * FROM TABLE_NAME AS OF TIMESTAMP TO_TIMESTAMP(time,'yyyy-mm-dd hh24:mi:ss'); --time指某个时间点如:SELECT * FROM SCOTT.TEST AS OF TIMESTAMP TO_TIMESTAMP('2009-12-11 20:53:57','yyyy-mm-dd hh24:mi:ss');

若有数据,恢复极为简单了,语句为

FLASHBACK TABLE TABLE_NAME TO TIMESTAMP TO_TIMESTAMP(TIME,'yyyy-mm-dd hh24:mi:ss');

如:

FLASHBACK TABLE SCOTT.TEST TO TIMESTAMP TO_TIMESTAMP('2009-12-11 20:47:30','yyyy-mm-dd hh24:mi:ss');

注意:

ALTER TABLE TABLE_NAME ENABLE ROW MOVEMENT;

这个命令的作用是,允许Oracle 修改分配给行的rowid。

在Oracle 中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。

闪回表处理会对EMP 完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。

要支持闪回就必须允许Oracle 执行这个操作

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论