본문 바로가기

Oracle

DROP된 테이블, 테이블스페이스 FLASHBACK 기능으로 복구하기.

## DROP TABLE .. PURGE
10G 부터 제공되는 쓰레기통 기능으로 DROP 된 SEGMENT 가
이상한이름으로 생성되는것을 방지 하려면 뒤에 PURGE 를 써준다.

DROP TABLE CHECK_NVL PURGE ;

## 휴지통 완전 비우기
USER 의 경우
PURGE USER_RECYCLEBIN ;
DBA 의 경우
PURGE DBA_RECYCLEBIN ;

## ALTER TABLE .. MOVE
$$$$$$$$####################################$$$$$$$$$$$$$$$$$$$$$$$
상기는 TABLESPACE 이고, $ 가 데이타 있음, # 이 데이타 비였음 ( DROP 등에 의해서)
일 경우 DATA FILE RESIZE 를 하여도 실제 데이타 화일의 끝에를 사용 중이라
불가능하다, 이 경우 해당 TABLESPACE 에 존재하는 TABLE, INDEX 등을 ( BLOCK_ID 가 가장 높은 순서로)
ALTER TABLE CHECK_INDEX_ST MOVE TABLESPACE USER_DATA ;
MOVE TABLESPACE 현재테이블스페이스를 실행 하면
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#############################
이런식으로 변경할 수 있고 ,결과적으로 RESIZE 가 가능해진다.

 

2008.12.10 ADD-ON

휴지통이 재사용되는 경우
OBJECTS IN THE RECYCLE BIN WILL BE AUTOMATICALLY PURGED BY THE SPACE RECLAMATION PROCESS IF

O A USER CREATES A NEW TABLE OR ADDS DATA THAT CAUSES THEIR QUOTA TO BE EXCEEDED.
O THE TABLESPACE NEEDS TO EXTEND ITS FILE SIZE TO ACCOMMODATE CREATE/INSERT OPERATIONS.

THERE IS NO ISSUES WITH DROPPING THE TABLE, BEHAVIOUR WISE. IT IS THE SAME AS IN 8I / 9I.
THE SPACE IS NOT RELEASED IMMEDIATELY AND IS ACCOUNTED FOR WITHIN THE SAME TABLESPACE / SCHEMA AFTER THE DROP.

WHEN WE DROP A TABLESPACE OR A USER THERE IS NO RECYCLING OF THE OBJECTS.

O RECYCLEBIN DOES NOT WORK FOR SYS OBJECTS
==> SYS OBJECT 에 대해서는 휴지통이 작동 하지 않는다. 주의 !!!

SYS> SELECT * FROM USER_RECYCLEBIN;

선택된 레코드가 없습니다.

SYS>DROP TABLE CHECK_SYS_BIN ;
테이블이 삭제되었습니다.

SYS>SELECT * FROM USER_RECYCLEBIN ;

선택된 레코드가 없습니다.

==> SYS 의 OBJECT는 DROP 해도 휴지통에 쌓이지 않는다 .

SYS> CONN SCOTT/TIGER
연결되었습니다.

SCOTT> CREATE TABLE TEST_TABLE ( A1 VARCHAR2(10) ,A2 VARCHAR2(10) ) ;

테이블이 생성되엇습니다.

SCOTT> SELECT * FROM TEST_TABLE;

선택된 레코드가 없습니다.

SCOTT>DROP TABLE TEST_TABLE;

테이블이 삭제되었습니다.

SQL> SELECT * FROM USER_RECYCLEBIN ;
==>

OBJECT_NAME ORIGINAL_NAME OPERATION
------------------------------ -------------------------------- ---------
TYPE DROPSCN DROPTIME
------------------------- ---------- -------------------
BIN$LWZMR8JLSMQILPK3V2ZUIA==$0 TEST_TABLE DROP
TABLE 9.1063E+12 2008-12-10:09:21:49
==> 일반 유저의 테이블은 DROP 하면 자동으로 휴지통에 쌓이게 된다.

SQL>PURGE TABLE TEST_TABLE ;

테이블이 지워졌습니다.(PURGED)

SQL> SELECT * FROM USER_RECYCLEBIN ;


SQL>SHOW RECYCLEBIN

==> 휴지통 보기

SYS>PURGE RECYCLEBIN ;

휴지통이 지워졌습니다.

==> 휴지통 비우기

SQL>PURGE DBA_RECYCLEBIN ;

DBA RECYCLEBIN PURGED.

SYS>PURGE TABLESPACE USERS ;

테이블스페이스가 지워졌습니다.(PURGED)

==> 특정 테이블스페이스의 휴지통 비우기
SQL>PURGE TABLESPACE USERS USER SCOTT ;

테이블스페이스가 지워졋습니다.

==> 특정 테이블스페이스의 특정 유저의 휴지통 비우기


!! 휴지통 기능 끄기 !!
웬만하면 놔두자 ㅇ.ㅇ
ON 10GR1, IN CASE WE WANT TO DISABLE THE BEHAVIOR OF RECYCLING, THERE IS AN UNDERSCORE PARAMETER
"_RECYCLEBIN" WHICH DEFAULTS TO TRUE. WE CAN DISABLE RECYCLEBIN BY SETTING IT TO FALSE.

SYS>COL KSPPINM FORMAT A30
SYS>COL KSPPSTVL FORMAT A30
SYS>COL KSPPSTDF FORMAT A30

SYS>SET LINESIZE 150
SYS> 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 ;


KSPPINM KSPPSTVL KSPPSTDF
------------------------------ ------------------------------ ------------------------------
_DB_PERCENT_HOT_RECYCLE 0 TRUE
_RECYCLEBIN TRUE TRUE
BUFFER_POOL_RECYCLE TRUE
DB_RECYCLE_CACHE_SIZE 0 TRUE

SQL>ALTER SYSTEM SET "_RECYCLEBIN"=FALSE SCOPE = BOTH;

SYSTEM ALTERED.

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 ;

SPPINM KSPPSTVL KSPPSTDF
------------------------------ ------------------------------ ------------------------------
_DB_PERCENT_HOT_RECYCLE 0 TRUE
_RECYCLEBIN FALSE TRUE
BUFFER_POOL_RECYCLE TRUE
DB_RECYCLE_CACHE_SIZE 0 TRUE

 

SQL>CONN SCOTT/TIGER

연결되었습니다.

SQL>CREATE TABLE TEST_TABLE ( A1 VAHRCHAR2(10) ,A2 VARCHAR2(10) ) ;

테이블이 생성되었습니다.

SCOTT>SELECT * FROM USER_RECYCLEBIN;

선택된 레코드가 없습니다.

SQL>DROP TABLE TEST_TABLE ;

테이블이 삭제되었습니다.

SQL>SELECT * FROM USER_RECYCLEBIN ;

선택된 레코드가 없습니다.


ON 10GR2 RECYCLEBIN IS A INITIALIZATION PARAMETER AND BYDEFAULT ITS ON.
WE CAN DISABLE RECYCLEBIN BY USING THE FOLLOWING COMMANDS:

SQL> ALTER SESSION SET RECYCLEBIN = OFF;
SQL> ALTER SYSTEM SET RECYCLEBIN = OFF;

==> !! 주의 10G(R2) 에서만 작동 된다. !!

SQL> ALTER SYSTEM SET RECYCLEBIN = ON ;


## 쓰레기통에서 복구 하기


# DROP
SQL> DROP TABLE EMP;

테이블이 삭제되었습니다.

# 원래 이름으로 원복
SQL>FLASHBACK TABLE EMP TO BEFORE DROP;

플래시백이 완료되었습니다.

# DROP
SQL>DROP TABLE EMP ;

테이블이 삭제되었습니다.

# 다른 이름으로 복구
SQL>FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMPLOYEES;

플래시백이 완료되었습니다.

 

이리저리 짜집어서 정리를 하다보니 @_@ 하네..

'Oracle' 카테고리의 다른 글

오라클 숫자 or 문자 확인. 필터링 함수(translate)  (0) 2012.10.11
explain plan. plan table 생성 및 실행계획 확인법  (0) 2011.04.27
자주 참조하는 DB dictionary  (0) 2010.07.02
HWM  (0) 2009.10.18
현재 날짜 가져오기!  (1) 2009.10.18