目的
——————
这份报告是为了阐明10g数据库中闪回表提供的新特性
范围及应用
——————
可以被用于ORACLE支持分析和DBA
闪回查询概念已经在ORACLE9i中被介绍。但是它不可以闪回DDL操作例如丢弃表。RAOCEL10g中的闪回表特性实现了丢弃表的恢复功能通过执行一些语句。
让我们来看看闪回表是如何工作的….
SQL> Create table TESTFLASH (id number);
SQL> Insert into TESTFLASH values (1);
SQL> Insert into TESTFLASH values (2);
SQL> Insert into TESTFLASH values (3);
SQL> Insert into TESTFLASH values (4);
SQL> Insert into TESTFLASH values (5);
SQL> Commit;
SQL> select * from TESTFLASH;
ID
----------
1
2
3
4
5
5 rows selected.
让我们来看看表中现在的方案。
==========================================
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------ ------- ----------
TESTFLASH TABLE
现在,我们意外的删除表
====================================
SQL> drop table TESTFLASH;
Table dropped.
现在让我检查表的状态
========================================
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE
TESTFLASH表是消失了,但是要注意新出现的表BIN$04LhcpndanfgMAAAAAANPw==$0.取代被丢弃的表TESTFLASH,完全消失,被重命名为系统指定的名字。存在同一个表空间当中,与原来的表保持相同的构架。如果在表中建立有索引或者触发器,那么它们也被重命名了,使用与表相同的命名方式,任何相关的得资源例如程序,将失效;原表的触发器和索引则存在于重命名表BIN$04LhcpndanfgMAAAAAANPw==$0上,保存被丢弃表的完整对象构架。
该表和它的相关对象被存放在一个被称为“回收站”的逻辑容器当中,和我们个人PC中的回收站概念很相似。但是对象并没有从它们原先的表空间移出;它们仍旧占用这那里的空间。回收站只不过是一个逻辑架构记录所有被丢弃的对象。在SQL*PLUS中使用如下命令去查看它的内容(你将要使用SQL*Plus 10.1来完成它):
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ ------------------
TESTFLASH BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE 2004-02-16:21:13:31
这将展示表的原始名,TESTFLASH,回收站中的新名字(BIN$04LhcpndanfgMAAAAAANPw==$0)。使用闪回表命令来恢复该表:
SQL> FLASHBACK TABLE TESTFLASH TO BEFORE DROP;
FLASHBACK COMPLETE.
现在来查询TESTFLASH表
ID
----------
1
2
3
4
5
5 rows selected.
让我们来看现在的方案:
==========================================
SQL> SELECT * FROM TAB;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
TESTFLASH TABLE
该表已经轻松被恢复,如果你现在检查回收站,它将是空的。
SQL> Show Recyclebin
SQL>