2020년 7월 19일 일요일

오라클 FlashBack Drop 및 Recycle Bin

오라클 FlashBack Drop 및 Recycle Bin

http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=632

8.1.5 FlashBack Drop 및 Recycle Bin

리사이클빈(Recycle Bin)이란?

Oracle10g 이후 생긴 기능으로 테이블이 삭제되면 완전히 삭제되지 않고 테이블의 이름을 변경한 후 테이블스페이스 내의 리사이클 빈 영역(윈도우 휴지통 같은 곳)으로 이동 시킨다. 오브젝트가 삭제되면 삭제되는 오브젝트의 정보를 포함하고 있는 데이터 딕셔너리에 존재하는 테이블로써 윈도우의 휴지통과 비슷한 개념으로 이기능을 이용하여 DROP TABLE 후 복구가 가능하다.

n 리사이클 빈으로 옮겨가는 테이블을 FLASHBACK TABLE이라고 한다.

n 리사이클 빈안에 만들어지는 FLASHBACK TABLE의 이름은 “BIN$unique_id$version” 형태를 가진다.(unique_id는 26자의 오브젝트에 대한 유일한 문자열이다)

--세션 레벨에서 리사이클빈 기능의 활성화, 비활성화(기본은 Enabled 이다)

--alter session, alter system 명령으로 가능하며 기능이 꺼져있는 경우 테이블 삭제시 복구 불가능하다.

SQL> alter session set recyclebin = off;

세션이 변경되었습니다.

SQL> alter session set recyclebin = on;

세션이 변경되었습니다.

--리사이클빈은 아래 명령으로 확인 가능하다.

SQL>drop table sales;

SQL> select object_name, original_name from recyclebin;

OBJECT_NAME ORIGINAL_NAME

------------------------------ --------------------------------

BIN$Taaxs2vjQAS14g+08tU/dg==$0 SALES

SQL> show recyclebin;

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME

---------------- ------------------------------ ------------ -------------------

SALES BIN$Taaxs2vjQAS14g+08tU/dg==$0 TABLE 2014-09-10:12:45:02

--DROP TABLE 명령어 사용시 뒤부분에 PURGE하고 하면 테이블은 영구히 삭제되며 리사이클 빈으로 이동되지 않는다.

SQL> create table t1 ( id number);

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

SQL> drop table t1;

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

SQL> desc t1;

ERROR:

ORA-04043: t1 객체는 존재하지 않습니다.

SQL> show recyclebin;

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME

---------------- ------------------------------ ------------ -------------------

T1 BIN$TcAMYpDbS8SAUlBQ8kfwVQ==$0 TABLE 2014-09-10:13:30:49

-- flashback table명령어로 복구

SQL> flashback table t1 to before drop;

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

-- purge 옵션으로 drop하면 리사이클빈에 저장되지 않는다.

SQL> drop table t1 purge;

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

-- 리사이클빈에는 아무것도 없다.

SQL> show recyclebin;

SQL> -- T1 테이블을 리사이클빈에서 영구히 삭제하려면 아래처럼 purge를 사용한다.

SQL> purge table t1;

테이블이 지워졌습니다.

SQL> -- 리사이클빈 전체를 purge하면 현재 USER의 리사이클빈이 삭제된다.

SQL> purge recyclebin;

휴지통이 지워졌습니다.

SQL> flashback table t1 to before drop;

flashback table t1 to before drop

*

1행에 오류:

ORA-38305: 객체가 RECYCLE BIN에 없음

SQL> conn scott/tiger

연결되었습니다.

SQL> create table t1 ( id number);

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

SQL> create table t2 ( id number);

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

SQL> -- 현재 테이블스페이스는 USERS이다.

SQL> select default_tablespace from user_users;

DEFAULT_TABLESPACE

------------------------------

USERS

SQL> purge tablespace users;

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

SQL> purge tablespace users user scott;

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

n 다음과 같이 테이블을 만들고 삭제를 반복했다면 리사이클빈에 오리지널 테이블 이름이 EMP인 것이 여러개 존재할 것이다.

CREATE TABLE EMP ( ...columns ); # EMP version 1

DROP TABLE EMP;

CREATE TABLE EMP ( ...columns ); # EMP version 2

DROP TABLE EMP;

CREATE TABLE EMP ( ...columns ); # EMP version 3

DROP TABLE EMP;

......

......

SQL> SHOW RECYCLEBIN;

ORIGINAL_NAME RECYCLEBIN_NAME OBJECT_TYPE DROP_TIME

--------------------------------------------------------------

EMP BIN$TaaaXccddd+ee$0 TABLE 2016-01-01

EMP BIN$TaaaXccd3d+ee$1 TABLE 2016-02-01

EMP BIN$TaaaXccdyd+ee$2 TABLE 2016-03-01

n 아래와 같이 복구하는 경우 가장 최근에 삭제된 테이블이 복구된다.

FLASHBACK TABLE EMP TO BEFORE DROP;

n 물론 아래처럼 최근의 EMP 테이블을 복구하면서 RENAME 명령으로 이름을 바꾸는 것도 한 방법이다.

FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMP_VERSION_3;

FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMP_VERSION_2;

FLASHBACK TABLE EMP TO BEFORE DROP RENAME TO EMP_VERSION_1;

또한 플래시백 테이블의 이름으로 복구도 가능하다.

FLASHBACK TABLE " BIN$TaaaXccddd+ee$0" TO BEFORE DROP;

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...