分类: Oracle
2011-04-11 17:49:08
一:概念
回收站,从原理上来说就是一个数据字典表,放置用户Drop掉的数据库对象信息。用户进行Drop操作的对象并没有被数据库删除,仍然会占用空间.除非是由于用户手工进行Purge或者因为存储空间不够而被数据库清掉。数据库有了这样的功能,能够减少很多不必要的麻烦.例如 :开发人员误把表删除。所以做一下几个小实验验证
Oracle回收站的功能。
二:实验内容
(一):drop掉数据表,再从recyclebin中把他恢复出来。
1.sqlplus scott/123 进入scott用户下创建teamsun表。
SQL> create table teamsun as ( select ename,empno,hiredate from emp);
2.验证该表是否创建成功。
SQL> select * from teamsun;
ENAME EMPNO HIREDATE
---------- ---------- --------------
SMITH 7369 17-12月-80
ALLEN 7499 20-2月 -81
WARD 7521 22-2月 -81
JONES 7566 02-4月 -81
MARTIN 7654 28-9月 -81
BLAKE 7698 01-5月 -81
************
SQL> select tname,tabtype from tab;
TNAME TABTYPE
------------------------------ -------
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
T1 TABLE
T2 TABLE
T3 TABLE
T4 TABLE
TEAMSUN TABLE
3. 删除TEAMSUN 表
SQL> drop table teamsun;
表已删除。
4. 验证表是否已经删除
SQL> select tname,tabtype from tab;
TNAME TABTYPE
------------------------------ -------
BIN$FtW/NFeBSryZtFD/lwCddQ==$0 TABLE
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
T1 TABLE
T2 TABLE
T3 TABLE
T4 TABLE
证明 teamsun表并没有从表空间中删除,只是换了一个名字而已。
5.查看回收站
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ---------------- ------------------------------ ------------ -------------------
TEAMSUN BIN$FtW/NFeBSryZtFD/lwCddQ==$0 TABLE 2011-03-15:16:45:14
6.从回收站中恢复表teamsun。
SQL> flashback table teamsun to before drop ;
闪回完成。
7.验证teasun表恢复
SQL> select tname,tabtype from tab;
TNAME TABTYPE
------------------------------ -------
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE
T1 TABLE
T2 TABLE
T3 TABLE
T4 TABLE
TEAMSUN TABLE
已选择9行。
SQL> select * from teamsun ;
ENAME EMPNO HIREDATE
---------- ---------- --------------
SMITH 7369 17-12月-80
ALLEN 7499 20-2月 -81
WARD 7521 22-2月 -81
JONES 7566 02-4月 -81
MARTIN 7654 28-9月 -81
BLAKE 7698 01-5月 -81
CLARK 7782 09-6月 -81
SCOTT 7788 19-4月 -87
KING 7839 17-11月-81
TURNER 7844 08-9月 -81
ADAMS 7876 23-5月 -87
JAMES 7900 03-12月-81
FORD 7902 03-12月-81
MILLER 7934 23-1月 -82
yang_zqi 111
8. SQL> show recyclebin 回收站已经没有数据。
9. 在table闪回的操作中同时可以为数据表重命名:
SQL> drop table teamsun;
表已删除。
SQL> flashback table teamsun to before drop rename to teamsun_kumin
闪回完成。
SQL> select tname,tabtype from tab;
TNAME TABTYPE
------------------------------ -------
BONUS TABLE
DEPT TABLE
EMP TABLE
ALGRADE TABLE
T1 TABLE
T2 TABLE
T3 TABLE
T4 TABLE
TEAMSUN_KUMING TABLE
(二):Recyclebin中的对象会被系统自动按照规则重命名,这就防止了命名冲突,命名规则为 BIN$unique_id$version,其中unique_id是26个字符的对象唯一标识,version 是对象在数据库忠的版本号。
--------在删除多个同一命名的table之后,闪回的是最近一张。
SQL> rename teamsun_kuming to teamsun;
SQL> drop table teamsun
SQL> create table teamsun as (select * from emp);
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TEAMSUN BIN$7SA9KTaxQpG4qZSvRRXq7g==$0 TABLE 2011-03-15:16:51:31
SQL> drop table teamsun;
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TEAMSUN BIN$PxtOEloWRum2uDLPR04wgA==$0 TABLE 2011-03-15:16:52:50
TEAMSUN BIN$7SA9KTaxQpG4qZSvRRXq7g==$0 TABLE 2011-03-15:16:51:31
SQL> flashback table teamsun to before drop;
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ---------------- ------------------------------ ------------ -------------------
TEAMSUN BIN$7SA9KTaxQpG4qZSvRRXq7g==$0 TABLE 2011-03-15:16:51:31
验证完成,如果回收站中存在多张相同 ORIGINAL NAME 的表,也就是drop之前两张表名字相同,在flashback table的时候闪回的是最近的一张表。由待完成的实验1.较早前drop掉的同original name的表能否恢复,如何恢复?
(三):更改系统设置
在默认情况下recyclebin 功能是打开的,可以通过以下语句来设置recyclebin的开启和关闭。
SQL> alter session set recyclebin=off;
SQL> drop table t3;
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
TEAMSUN BIN$7SA9KTaxQpG4qZSvRRXq7g==$0 TABLE 2011-03-15:16:51:31
---------t3被直接删除了------------
SQL> alter session set recyclebin=on;
会话已更改。
SQL> drop table t4;
表已删除。
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME --------------- ------------------------------ ------------ -------------------
T4 BIN$CAOHsjD8TWaTPSSHO89nEw==$0 TABLE 2011-03-15:16:56:01
TEAMSUN BIN$7SA9KTaxQpG4qZSvRRXq7g==$0 TABLE 2011-03-15:16:51:31
-----------但是在11g的版本中不能修改系统参数----
SQL> alter system set recyclebin =off;
alter system set recyclebin =off *
第 1 行出现错误:
ORA-02096: 此选项的指定初始化参数不可修改
(四): 实现彻底删除
-----在以上的实验中闪回相同的表名的表时,闪回的是最近的一张表,在用purge删除的时候删除的是最早的一张表,证明在oracle中采用的先进先出的原则。-----
SQL> show recyclebin; ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T2 BIN$hw6R4Zv3R9WGgXwa93PpWA==$0 TABLE 2011-03-15:20:14:29
T2 BIN$Eea6sFHsQtaytIWPg26/Uw==$0 TABLE 2011-03-15:20:13:59
SQL> purge table t2;
表已清除。
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ---------------- ------------------------------ ------------ -------------------
T2 BIN$hw6R4Zv3R9WGgXwa93PpWA==$0 TABLE 2011-03-15:20:14:29
-------也可以一次性删除回收站里的对象--------------
SQL> show recyclebin;
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
T1 BIN$TodKk83bRDK4kDN5XaevvA==$0 TABLE 2011-03-15:16:57:27
TEAMSUN BIN$7SA9KTaxQpG4qZSvRRXq7g==$0 TABLE 2011-03-15:16:51:31
SQL> purge recyclebin;
回收站已清空
SQL> show recyclebin;
SQL> ----------------
2.在drop后带purge参数实现彻底删除
Drop table tablename purge;
(五):总结
通过实验对10g之后oracle所提供的用于数据恢复的功能有了个简单的了解。该功能减少了因误删除带来的麻烦,但在drop掉用户对象的时候,数据并没有真正删除,空间没有得到释放,所以DBA日常中应关注这部分空间的管理。