2006. 10. 9. 21:26 오라클
10g 휴지통 기능
10g 부터 휴지통 기능이 생겼다. 뭐 원도우 바탕화면 휴지통이랑 같다고 생각하면 된다. 해당 객체를 삭제시 바로 안 없어지고 휴지통에 들어가 계신다. 필요할 때 뒤져서 쓰면 되는 것이다.
나름대로 필요한 기능인거 같기도 하고, 쓰잘때기 없는 기능 같기도 하고..
근데 아직도 10g에 익숙하지 않은 사람들이 많아 불편해 하는 기능인거 같다. (조회해 보면 table 이름이 막 지저분하게 나오니깐 안 좋아하는거 같다. ㅋ)
그럼 일단 휴지통 기능을 enable/disable 하는 방법은..
* 10g Release1 의 경우
- 아래와 같은 쿼리로 "_recyclebin" parameter 가 어찌 셋팅되어 있는지 조회한다.
SQL> SELECT a.ksppinm, b.ksppstvl, b.ksppstdf
FROM x$ksppi a, x$ksppcv b WHERE a.indx = b.indx AND a.ksppinm like '%recycle%'
ORDER BY a.ksppinm;
값이 true 이면 false 로 만들어 버리자.
SQL> ALTER SYSTEM SET "_recyclebin"=FALSE SCOPE = BOTH;
* 10g Release2 의 경우
- R2는 default 값이 ON 이므로 OFF 로 만들어 버린다.
SQL> ALTER SESSION SET recyclebin = OFF;
SQL> ALTER SYSTEM SET recyclebin = OFF;
==================================================================================
휴지통: drop된 DB객체들을 아래의 상황이전까지 보유한다.
- purge명령으로 영구히 삭제
- undrop명령으로 drop된 객체를 복구
- 테이블스페이스내 (휴지통의) 공간이 부족할때
- 테이블스페이스가 extend될때
* 휴지통에 들어있는 객체들 보기
user_recyclebin
dba_recyclebin
* 휴지통 비우기
SQL> purge recyclebin; 사용자의 휴지통 비우기
SQL> purge dba_recyclebin; 휴지통내의 모든 놈들 비우기
SQL> purge tablespace users; users테이블스페이스의 휴지통 비우기
*purge table "휴지통내의 이름" 휴지통의 하나의 객체만 제거시
* 휴지통의 객체 복구
SQL> flashback table 휴지통내의 이름 to before drop;
* 휴지통에 넣지 않고 drop
SQL> drop table 테이블명 purge;
* 만일 휴지통에 들어있는 객체에 대해 drop을 수행하면 아래와 같은 에러를 뱉는다.
SQL> drop table "BIN$biebYQhZRLmp9LlnMAD1VQ==$0";
drop table "BIN$biebYQhZRLmp9LlnMAD1VQ==$0"
*
1행에 오류:
ORA-38301: 휴지통에 있는 객체에 대해 DDL/DML을 수행할 수 없음
[실전연습]
SQL> create table aa(aa integer);
SQL> drop table aa;
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
---------------------------------------- -------------- ----------
BIN$biebYQhZRLmp9LlnMAD1VQ==$0 TABLE
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
AA BIN$biebYQhZRLmp9LlnMAD1VQ==$0 TABLE 2004-11-23:18:13:00
SQL> purge recyclebin;
SQL> show recyclebin
SQL> select * from tab;
선택된 레코드가 없습니다.
휴지통에 존재하는 객체를 제거
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
AA BIN$dm+wnjtVQye0d09bCvzHbw==$0 TABLE 2004-11-23:18:34:16
SQL> purge table "BIN$dm+wnjtVQye0d09bCvzHbw==$0";
테이블이 지워졌습니다.
휴지통내의 객체 복구
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
AA BIN$VPaE9OG4Qwa+KC0MesYKqw==$0 TABLE 2004-11-23:18:49:00
SQL> flashback table "BIN$VPaE9OG4Qwa+KC0MesYKqw==$0" to before drop;
플래시백이 완료되었습니다.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
---------------------------------------- -------------- ----------
AA TABLE