一、对于oracle9i,比较麻烦1,建表插入数据:create table TT(ID VARCHAR2(2));insert into tt(id) values('1');insert into tt(id) values('2');insert into tt(id) values('3');2,查询,并模拟删除一条数据select * from tt;delete tt where id='1';3,采用命令将数据恢复(可以提前一分钟,也可以指定时间)execute dbms_flashback.enable_at_time(sysdate-1/1440);execute dbms_flashback.enable_at_time(to_date('2008-1-11 18:09','yyyy-mm-dd hh24:mi'));4,注意在使用DBMS_FLASHBACK包的时候还应该注意以下几点:(1)倒叙查询是有前提的,即该数据库必须具有撤消管理功能。具体做法是,DBA应该建立一个撤消表空间,并启动自动撤消管理,并建立一个撤消保留时间窗。这样,Oracle将在撤消表空间中维护足够的撤消信息以便在保留时间内支持倒叙查询。(2)由于撤消表空间的大小直接决定了倒叙查询执行的成败。即撤消表空间越大,那么可以查询的时间可以越早,那么对于一般的撤消表空间的大小,为了保证倒叙查询的成功,尽量查询5天以内的数据,这样成功的可能性更高一些。二、对于oracle10g,利用闪回表特性,可以毫不费力地恢复被意外删除的表1,建表并查看当前模式的表create table TT(ID VARCHAR2(2));select * from tab;2,模拟删除该表drop table tt;3,再查看该表的状态SQL>select * from tab; TNAME TABTYPE CLUSTERID------------------------------ ------- ----------BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE 表 TT已不存在,但是请注意出现新表 BIN$04LhcpndanfgMAAAAAANPw==$0。这就是所发生的事情:被删除的表 RECYCLETEST 并没有完全消失,而是重命名为一个由系统定义的名称。它存在于同一个表空间中,具有与原始表相同的结构。如果在该表上定义了索引或触发器,则它们也被重命名,使用与表相同的命名规则。任何相关源(如过程)都失效;原始表的触发器和索引被改为放置在重命名的表 BIN$04LhcpndanfgMAAAAAANPw==$0 上,保持被删除表的完整对象结构。 表及其相关对象被放置在一个称为“回收站”的逻辑容器中,它类似于您 PC 机中的回收站。但是,对象并没有从它们原先所在的表空间中删除;它们仍然占用那里的空间。回收站只是一个列出被删除对象目录的逻辑结构。在 SQL*Plus 提示符处使用以下命令来查看其内容(您需要使用 SQL*Plus 10.1 来进行此操作)SQL> show recyclebinORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME---------------- ------------------------------ ------------RECYCLETEST BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE 2004-02-16:21:13:31结果显示了表的原始名称 TT,并显示了回收站中的新名称,该名称与我们看到的删除后所创建的新表名称相同。(注意:确切的名称可能因平台不同而不同。)为恢复该表,您所需要做的就是使用 BACK TABLE 命令:4,恢复表SQL> FLASHBACK TABLE TT TO BEFORE DROP;FLASHBACK COMPLETE.SQL> SELECT * FROM TAB;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------TT TABLE
oracle删除数据后如何恢复
未经允许不得转载:福利吧|福利社|fuliba » oracle删除数据后如何恢复
相关推荐
- 暂无文章