본문 바로가기

DBMS/ORACLE

FLASHBACK TABLE

반응형

목적

- 휴먼, 어플리케이션 오류로 부터 테이블의 이전 상태로 리스토어

- 테이블이 flashback 될수 있는 과거시점은  undo의 양에 의존적이다

- DDL은 리스토어 될수 없다.

관련뷰

- UNDO_MANAGEMENT :  디폴트 AUTO

- UNDO_RETENTION : UNDO 보관 시간(단위 초, 디폴트 30분 )

SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     1800
undo_tablespace                      string      UNDOTBS1
SQL>

 

Syntax

 

예 1)이전 상태로 테이블 리스토어

- FLASHBACK TABLE table_name TO TIMESTAMP(systimestamp - interval '10' minute); => 현재시간 기준에서 interval 시간 전으로 복구

- FLASHBACK TABLE table_name TO TIMESTAMP('2019-12-31 23:00:00',''YYYY-MM-DD HH24:MI:SS'); => 지정시간 복구

SQL> select * from t1;

       AGE
----------
         1
         2
         3
         4

SQL> delete from t1 where age=4 ;

1 행이 삭제되었습니다..

SQL> delete from t1 where age=3 ;

1 행이 삭제되었습니다..

SQL> select * from t1 ;

       AGE
----------
         1
         2

SQL> commit ;

커밋이 완료되었습니다..

SQL> flashback table t1 to timestamp (systimestamp - interval '10' minute) ;
flashback table t1 to timestamp (systimestamp - interval '10' minute)
                *
1행에 오류:
ORA-08189: 행 이동이 사용으로 설정되지 않았으므로 테이블을 플래시백을 할 수 없음


SQL> ALTER TABLE t1 ENABLE ROW MOVEMENT ;

테이블이 변경되었습니다..

SQL> flashback table t1 to timestamp (systimestamp - interval '10' minute) ; => 10분전 상태로 복구

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

SQL> select * from t1 ;

       AGE 
---------- 
         1 
         2 
         3 
         4  

SQL>

예 2) Drop 된 테이블 리스토어 

 - recyclebin 에서 제거된 테이블은 flashback table로 복구 불가(purge table tble_name)

SQL> drop table t1 ;

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

SQL> select * from recyclebin ;

OBJECT_NAME                    ORIGINAL_NAME                    OPERATION
------------------------------ -------------------------------- ---------
TYPE                      TS_NAME                        CREATETIME
------------------------- ------------------------------ -------------------
DROPTIME               DROPSCN PARTITION_NAME                   CAN CAN
------------------- ---------- -------------------------------- --- ---
   RELATED BASE_OBJECT PURGE_OBJECT      SPACE
---------- ----------- ------------ ----------
BIN$mfG7amlqA6fgVAgAJ+VJPA==$0 T1                               DROP
TABLE                     USERS                          2019-12-16:09:24:14
2019-12-18:10:54:59    1198420                                  YES YES
     74144       74144        74144          8


SQL> FLASHBACK TABLE t1 TO BEFORE DROP ; => DROP 전으로 t1 테이블 복구

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

예 3) DROP 된 테이블  리네임(rename) 복구

SQL> drop table t1 ; 

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

SQL> FLASHBACK TABLE t1 TO BEFORE DROP RENAME TO t1_1 ; => t1 테이블을 t1_1 이름으로 복구

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

SQL>

예 3) recyclebin에 동일 이름의 object가 있을 경우 선택 복구

SQL> select object_name, droptime from recyclebin where original_name='T1' ;

OBJECT_NAME                    DROPTIME
------------------------------ -------------------
BIN$mfG7amlsA6fgVAgAJ+VJPA==$0 2019-12-18:11:08:12
BIN$mfG7amltA6fgVAgAJ+VJPA==$0 2019-12-18:11:09:01

SQL> flashback table "BIN$mfG7amlsA6fgVAgAJ+VJPA==$0" TO BEFORE DROP ;   " " 부호로 감싸준다 

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

SQL> select object_name, droptime from recyclebin where original_name='T1' ;

OBJECT_NAME                    DROPTIME
------------------------------ -------------------
BIN$mfG7amltA6fgVAgAJ+VJPA==$0 2019-12-18:11:09:01

SQL>
반응형

'DBMS > ORACLE' 카테고리의 다른 글

ORACLE 19C 완전 삭제  (0) 2019.12.20
ORACLE 19C 설치 - 리눅스  (10) 2019.12.19
Fast Recovery Area 이란  (0) 2019.12.16
Flashback Database  (0) 2019.12.16
RECYCLEBIN(휴지통) 관리  (0) 2019.12.15