2010년 2월 26일 금요일

Purge

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 

댓글 없음:

댓글 쓰기