oracle 闪回已经删除的表

oracle10g之后引入闪回技术,闪回技术是这样处理的,当一个表被删除时,它并不是真的被删除,而只是被放到了回收站(recyclebin)里,只要这表还在回收站里,它就可以被闪回回来。该回收站被放在表所在表空间,oracle并不保证所有删除的表都能闪回成功。因为当用户在某个表空间上创建新表(或需要磁盘空间)时,oracle首先使用空闲磁盘空间,如果没有足够的磁盘空间,oracle将使用回收站的磁盘空间。

要使用闪回技术,需修改系统参数recyclebin为ON

SQL> show parameters recyclebin

NAME				     TYPE		    VALUE
------------------------------------ ---------------------- ------------------------------
recyclebin			     string		    on

如果不是为ON,使用alter system修改需加入deferred,当前session不生效

SQL> alter system set recyclebin=off deferred;

System altered.

使用alter session 修改当前session生效,其它不生效

SQL>
SQL> alter session set recyclebin=on;

Session altered.

SQL> show parameter bin

NAME				     TYPE		    VALUE
------------------------------------ ---------------------- ------------------------------
cursor_bind_capture_destination      string		    memory+disk
recyclebin			     string		    ON

扩展:如想查询参数文件用alter session 还是 alter system 查询V$PARAMETER动态视图,

isses_modifiabl列两个可选值

    是否可以使用ALTER SESSION

        1.可以(TRUE

        2.不可以FALSE

issys_modifiable列三个可选值

    1.IMMEDIATE- ALTER SYSTEM无论用于启动实例的参数文件类型如何,都可以更改参数。更改立即生效。

      2.DEFERRED- ALTER SYSTEM无论用于启动实例的参数文件类型如何,都可以更改参数。此更改将在后续会话中生效。

      3.FALSE- ALTER SYSTEM除非使用服务器参数文件来启动实例否则无法更改参数。更改将在后续实例中生效。

SQL> select name ,isses_modifiable,issys_modifiable from v$parameter where name like 'recyclebin';

NAME					 ISSES_MODI ISSYS_MODIFIABLE
---------------------------------------- ---------- ------------------
recyclebin				 TRUE	    DEFERRED

查询回收站中的内容

SQL> show recyclebin

ts_name代表表空间名,space回收站中这个被删除的表所使用的磁盘空间为多少个数据块

SQL> select object_name,ts_name,space from user_recyclebin;

连接hr用户,创建t1表,删除t1表,查询回收站

SQL> create table t1 as select * from jobs;

Table created.

SQL> select table_name from user_tables;

TABLE_NAME
----------------------------------------
REGIONS
COUNTRIES
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
T1

8 rows selected.

SQL> drop table t1;

Table dropped.

SQL> show recyclebin
ORIGINAL NAME	 RECYCLEBIN NAME		OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T1		 BIN$cKe1roAHJgzgU4GzEKx4YQ==$0 TABLE	     2018-07-10:23:23:18
SQL> select object_name,ts_name,space from user_recyclebin;

OBJECT_NAME
------------------------------------------------------------------------------------------------------------------------
TS_NAME 							  SPACE
------------------------------------------------------------ ----------
BIN$cKe1roAHJgzgU4GzEKx4YQ==$0
USERS								      8s

查询t1表,已经不在了,报错。闪回t1表,再次查询t1表,已经闪回成功

SQL> select * from t1;
select * from t1
              *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> flashback table t1 to before drop;

Flashback complete.

SQL> select * from t1 where rownum < 2;

JOB_ID		     JOB_TITLE								    MIN_SALARY MAX_SALARY
-------------------- ---------------------------------------------------------------------- ---------- ----------
AD_PRES 	     President									 20080	    40000

删除回收站中的某个表

SQL> drop table t1;

Table dropped.

SQL> show recyclebin
ORIGINAL NAME	 RECYCLEBIN NAME		OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T1		 BIN$cKe1roAJJgzgU4GzEKx4YQ==$0 TABLE	     2018-07-10:23:33:12
SQL> purge table t1;

Table purged.

SQL> show recyclebin
SQL>

清空回收站

SQL> purge recyclebin;

Recyclebin purged.

如果删除一个表时就不想放入回收站可以在drop语句之后加上purge

SQL> drop table t1 purge;
闪回技术只能保护非系统(non-SYSTEM)表空间中的表,而且这些表还必须存放在本地管理的表空间中。尽管在一个表被删除时,依赖于该表的绝大多数对象也受到回收站的保护,但是位图连接索引、引用完整性约束等不受到回收站的保护。

你可能感兴趣的:(oracle)