행위

FLASHBACK TABLE LEVEL

DB CAFE

thumb_up 추천메뉴 바로가기


1 Table Level Flashback[편집]

  1. 다른 테이블에 영향을 주지 않고 대상이 되는 테이블만 복구하는 기술이다.
  2. Table Level Flashback 은 두가지 방법으로 나눌 수 있다.
    1. - SCN 기반 Flashback
      - 시간 기반 Flashback

1.1 복구 불가 테이블[편집]

  • 복구 대상 테이블이 Alter 명령어로 변경되면 변경전으로 Flashback을 사용하지 못한다


1.2 SCN 기반 Flashback[편집]

  1. 이벤트가 발생하기 전의 SCN 을 이용한 Flashback 기능을 사용하는 방법.
  2. 이 방법은 이벤트를 발생시키기 전에 미리 SCN을 기록해 두거나 , 변경 이력 조회 방법등으로 알아낸SCN 을 이용하여 Table Level 의 Flashback 방법
  3. 전제 조건
    1. Flashback을 사용하는 테이블은 row movement 가 활성화되어 있어야 한다.

1.2.1 복구실습[편집]

--  map 은 복구 대상 테이블 명 
SQL> flashback table map to scn '604359' -- 테이블 레벨에서 SCN 604359 으로 Flashback 을 시도. 
ERROR at line 1:
ORA-08189: cannot flashback the table because row movement is not enabled

SQL> ALTER table map enable row movement;
Table altered.

SQL> flashback table map to scn '604359';
Flashback complete.
  • 설명
  1. 테이블 레벨에서 SCN 604359 으로 Flashback 을 시도한다.
    1. - 이 값은 앞선 포스팅에서( 4. 변경 이력 조회 ) 조회된 값이다.
    2. - 삭제전에 현재 SCN 조회를 하여 기록해 놨던 SCN 으로 사용해도 된다.
  2. 테이블에 row movement 가 설정되어 있지 않아서 메시지가 표시된다.
  3. 테이블에 row movement 를 활성화한다.
  4. flashback 을 재시도 한다.


1.2.2 현재 scn 조회[편집]

select current_scn from v$database;

CURRENT_SCN
-----------
     611387
--


1.3 시간 기반 Flashback[편집]

  1. SCN 과 마찬가지로 undo 를 사용하며 시간을 기반으로 Flashback 기능 사용.

1.3.1 복구실습[편집]

-- 1.대상 테이블 조회
SQL> select * from map;

KEY                  NAME
-------------------- --------------------
동물                 강아지
바다                 배
하늘                 비행기


--  2. 테이블 삭제 
SQL> delete from map;
3 rows deleted.

-- 3. 복구

SQL> flashback table map to timestamp(systimestamp - interval '2' minute);
Flashback complete.


1.4 관련 에러[편집]

1.4.1 ORA-01466: unable to read data - table definition has changed[편집]

시간을 너무 뒤로 돌려서 해당 테이블이 존재하지 않은 시간대를 선택했거나, alter 명령어로 테이블을 수정시 수정 전 시간으로 Flashback 을 시도하면 위와같은 에러 발생

1.4.2 UNDO Data가 없을때[편집]

ORA-00604 : error occurred at recusive SQL... ORA-12801 error signaled in parallel... ORA-01555 : snapshot too old : rollback segment number ...


1.5 Recycle Bin[편집]

  1. 윈도우의 휴지통같은 기능
  2. 테이블을 drop 할때 purge 옵션을 주지 않으면 완전히 삭제되지 않고 복구가 가능한 상태로 바뀌게 되는데. 삭제되어 복구가 가능한 테이블들은 조회 할 수 있으며 복구 할 수 있다.
  3. 주의사항
    1. - 테이블이 삭제되면 다른영역으로 이동하는것이 아니라 상태만 변경.
      그래서 테이블스페이스에 공간이 부족하게되면 우선적으로 recycle bin 이 차지하고 있는 영역을 사용하게 되는데 그러면 recycle bin 을 이용하여 복구가 불가능하다.
      - 인덱스가 존재하는 테이블을 삭제하고 flashback 을 사용하여 복구하면 인덱스도 같이 복구 된다.
      하지만 인덱스 명이 BIN$. 으로 시작하므로 이름을 변경시켜 주던지 아니면 삭제하고 다시 생성한다.

1.5.1 인덱스 조회[편집]

select table_name, column_name,index_name
  from user_ind_columns
 where table_name='&tableName' -- map 테이블 인덱스 조회 

--  map  테이블 삭제
SQL> drop table map;
Table dropped.

-- 테이블 존재하는지 확인 
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
DEPT                           TABLE
EMP                            TABLE
BONUS                          TABLE
SALGRADE                       TABLE
BIN$vL0lpMaYHDDgQAB/AQA0Tw==$0 TABLE
SYS_TEMP_FBT                   TABLE

-- 휴지통 확인 
SQL> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
MAP              BIN$vM4c+mQ5ZZ/gQAB/AQBU0Q==$0 TABLE        2012-04-04:06:37:26
  • select * from tab; 명령을 통한 조회에서는 이름만 표시되고 있으며 show recyclebin 명령은 원본 명과 recycle 명 타입 삭제된 시간 등을 알 수 있다.

1.6 테이블 복구[편집]

1.6.1 drop 한 테이블 명으로 복구[편집]

flashback table map to before drop;

1.6.2 recycle bin name 으로 복구[편집]

flashback table "BIN$vM4c+mQ5ZZ/gQAB/AQBU0Q==$0" to before drop;

-- ORA-38312: original name is used by an existing object 이미 존재하는 경우 새이름으로 복구
flashback table "BIN$vM4c+mQ5ZZ/gQAB/AQBU0Q==$0" to before drop rename to map2;