RECYCLE BIN은 drop된 object 들이 상주하는 곳이다.
drop된 object 도 같은 공간을 차지하고 있다.
만일 emp table이 users tablespace 에 생성되었다면 drop된 emp table도 users tablespaces 내에 남아 있다.
drop된 table과 그와 관련된 objects들 (indexes,constraints,다른 관련된 objects 등)은 없어지지 않고
BIN$$가 첫머리에 추가되어 다른 이름으로 변경되어 있다..
SQL> select segment_name,tablespace_name from user_segments
2 where segment_name like '%EMP%';
EMP USERS
SQL> select index_name,tablespace_name from user_indexes
2 where table_name ='EMP';
SYS_C004335 USERS
SQL> drop table emp;
Table dropped.
SQL> select object_name,ORIGINAL_NAME,ts_name from recyclebin;
BIN$153amJrNRj3gMEWYESkisg==$0 EMP USERS
BIN$153amJrMRj3gMEWYESkisg==$0 SYS_C004335 USERS
Flashback Query 를 사용하여 drop한 table의 data 를 query 할수 있다.
각 user는 table을 drop하기전과 동일한 권한을 가지고 있다.
Recycle Bin에서 drop한된 table들을 볼 수 있다.
Recycle Bin내의 object 들은 drop된 object의 owner가 purge command를 이용해서 삭제하기전 까지
db내에 남아 있으나 다음의 경우에는 자동적으로 purge 된다.
user 가 quota초과를 일으키는 새로운 table을 생성하거나 data 가 추가되는 경우나
tablespace가 create 나 insert 작업을 수용하기 위해 file size를 확장할 필요가 있을 경우
drop된 table에 대한 부분은 8i/9i와 동일하나 space 부분만 즉시 release 되지 않는다.
tablespace 나 user 를 drop하는 경우에는 recycling 되지 않는다.
EXAMPLE
=======
SQL> select * from v$version;
BANNER
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Prod
PL/SQL Release 10.1.0.2.0 - Production
CORE 10.1.0.2.0 Production
TNS for Linux: Version 10.1.0.2.0 - Production
NLSRTL Version 10.1.0.2.0 - Production
SQL> show user
USER is "SCOTT"
SQL> SELECT object_name,original_name,operation,type,dropscn,droptime
2 FROM user_recyclebin;
no rows selected
SQL> CREATE TABLE t1(a NUMBER);
Table created.
SQL> DROP TABLE t1;
Table dropped.
SQL> SELECT object_name,original_name,operation,type,dropscn,droptime
2 FROM user_recyclebin;
OBJECT_NAME ORIGINAL_NAME OPERATION
--------------------------------
TYPE DROPSCN DROPTIME
----------
BIN$153amJrPRj3gMEWYESkisg==$0 T1 DROP
TABLE 2350013 2004-04-09:17:33:29
SQL> conn sys/manager as sysdba
Connected.
SQL> show user
USER is "SYS"
SQL> SELECT owner,original_name,operation,type FROM dba_recyclebin;
OWNER ORIGINAL_NAME OPERATION
--------------------------------
TYPE
SCOTT T1 DROP
TABLE
drop된 table은(BIN$$ table) recover (restore, flashback) 되기 전까지는 어떤 operation도 불가능 하다.
이 상황에서는 동일 이름으로 table 을 생성하는 것도 가능하다.
drop된 table 의 정보는 다음과 같이 볼수도 있다.
SQL> show user
USER is "SCOTT"
SQL> SELECT table_name,tablespace_name
2 FROM user_tables WHERE dropped='YES';
TABLE_NAME TABLESPACE_NAME
------------------------------
BIN$153amJrPRj3gMEWYESkisg==$0 USERS
PURGING
=======
DB내에서 table을 완전히 삭제하고자 할 때 사용하며 space 도 release 된다.
Command 는
Scott user 에서
SQL> PURGE TABLE t1;
Table purged.
OR
SQL> purge table "BIN$153amJrPRj3gMEWYESkisg==$0";
Table purged.
From SYSDBA user:
SQL> SELECT owner,original_name,operation,type FROM dba_recyclebin;
no rows selected
Scott user:
SQL> show recyclebin
SQL>
Purge 하는 여러 방법은 다음과 같다.
PURGE TABLE t1;
PURGE INDEX ind1;
PURGE recyclebin; (Recyclebin내의 모든 objects 를 purge:해당 owner 의 object 만 purge )
PURGE dba_recyclebin; (sysdba권한으로 모든 object 를 purge)
PURGE TABLESPACE users; (해당 tablespace 내의 모든 objects 를 purge )
PURGE TABLESPACE users USER scott; (scott user 에 속하는 users tablespace 내의 object 들을 Purge)
RECYCLEBIN Dsiable 방법
==========================
하나의 command 로 drop과 purge 를 함께 할 수 있다.
Scott user:
SQL> DROP TABLE t1 PURGE;
Table dropped.
SQL> SELECT * FROM recyclebin;
no rows selected
이 경우에는 purge 가 필요 없다.
recycling 기능을 없애는 방법은 "_recyclebin" 을 FALSE 로 setting 하면 된다.
default는 TRUE 이다 .
SYSDBA user:
SQL> SELECT a.ksppinm, b.ksppstvl, b.ksppstdf FROM x$ksppi a, x$ksppcv b
2 WHERE a.indx = b.indx AND a.ksppinm like '%recycle%'
3 ORDER BY a.ksppinm;
출처 : http://kr.forums.oracle.com/forums/thread.jspa?threadID=477120&tstart=105
Purge DOC : http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_9018.htm