Oracle Flashback

1. IT Story/DB 2015. 9. 4. 10:53


Oracle Flashback


- DBMS
기능으로써, drop 테이블, 또는 테이블의 데이터를 특정 시점으로 복구할 있다.

   

   ① 삭제된 테이블 복구(table drop recyclebin)

- 의도하지 않은 오류로 인해 테이블이 drop 경우, 아래와 같이 복구가 가능하다.

다만 해당 테이블에 속해 있는 Index Constraint등은 복구가 되지만 이름이 원래 이름으로 돌아오지 않으므로 매뉴얼 하게 수정이 필요하다.

step

장애 내용

처리 방법

1

테이블 삭제 발생

  

2

복구 가능여부 확인

SQL> select * from dba_recyclebin where original_name='<테이블명>';

3

flashback table drop 실행

flashback table <장애object> to before drop;

4

테이블의 인덱스 및 Constraint를 조사하여 원래 이름으로 변경

SQL> alter index <Drop된 인덱스 이름> rename to <Original 이름>;

SQL> alter table <Drop된 테이블 이름> rename constratin <Drop된 Constraint이름> to <Original 이름>;

   

아래는 복구 예제이다.

 SQL1 > select index_name from user_indexes where table_name = 'FLASHBACK_TEST';

   

Index Name

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

PK_FLASHBACK_TEST

IX_FLASHBACK_TEST_01

   

SQL1 > drop table flashback_test;

   

SQL1 > desc flashback_Test;

ERROR:

ORA-04043: object flashback_Test does not exist

   

SQL1 > select * from dba_recyclebin where original_name = 'FLASHBACK_TEST';

   

OWNER OBJECT_NAME ORIGINAL_NAME OPERATION TYPE

TS_NAME CREATETIME

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

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

DROPTIME DROPSCN PARTITION_NAME CAN CAN RELATED BASE_OBJECT PURGE_OBJECT SPACE

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

DBA01 BIN$HUCzSx+DYoLgRAAWNYRg4A==$0 FLASHBACK_TEST DROP TABLE

USERS 2011-12-21 21:19:41

2011-12-21 21:20:30 7.7763E+12 YES YES 1050494 1050494 1050494 512

   

SQL1 > flashback table FLASHBACK_TEST to before drop;

SQL1 > select index_name from user_indexes where table_name = 'FLASHBACK_TEST';

Index Name

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

BIN$HUCzSx+CYoLgRAAWNYRg4A==$0

BIN$HUCzSx+BYoLgRAAWNYRg4A==$0

SQL1 > alter index "BIN$HUCzSx+CYoLgRAAWNYRg4A==$0" rename to PK_FLASHBACK_TEST;

SQL1 > alter index "BIN$HUCzSx+BYoLgRAAWNYRg4A==$0" rename to IX_FLASHBACK_TEST_01;

SQL1 > select index_name from user_indexes where table_name = 'FLASHBACK_TEST';

   

Index Name

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

PK_FLASHBACK_TEST

IX_FLASHBACK_TEST_01

 

테이블 시점 복구(flashback table)

- 데이터 조작오류 (update 또는 delete) 의해 데이터가 논리적으로 손상되었을 경우,과거의 특정시점으로 테이블을 복구할수 있다. Undo retention 파라미터가 보증하는 시간까지만 복구가 가능하며, undo_retention 보증하는 시간범위를 초과하는 복구의 경우는 incomplete recovery 수행하여야 한다.

step

장애 내용

처리 방법

1

복구 상황 발생

  

2

특정 시점으로 flashback table 실행

SQL> alter table <테이블명> enable row movement;

SQL> flashback table <테이블명> to timestamp to_timestamp (<시간format>);

   

아래는 복구 예제이다.

Ex) AAA 테이블을 2014 03 11 11 20 시점으로 flash back

   

SQL> alter table DBM.AAA enable row movement;

SQL> flashback table DBM.AAA to timestamp to_timestamp ('2014/03/11 11:21:00','YYYY/MM/DD HH24:MI:SS');

( flashback전에 enable row movement 내용을 반드시 disable하지 않아도 된다)

 


블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,