앞서 올렸던 Row Level Flashback에 이어 Table Level의 Flashback 이다. 이 Table Level 은 다른 테이블에 영향을 주지 않고 대상이 되는 테이블만 복구하는 기술이다.
이 Table Level Flashback 은 두가지 방법으로 나눌 수 있다.
- SCN 기반 Flashback
- 시간 기반 Flashback
주의사항
테이블의 Alter 명령어로 변경되면 변경전으로 Flashback을 사용하지 못한다
SCN 기반 Flashback
이벤트가 발생하기 전의 SCN 을 이용한 Flashback 기능을 사용하는 방법이다.
이 방법은 이벤트를 발생시키기 전에 미리 SCN을 기록해 두거나 앞선 포스팅에서 봤던 (4. 변경 이력 조회) 방법등으로 알아낸SCN 을 이용하여 Table Level 의 Flashback 방법이다.
전제 조건
Flashback을 사용하는 테이블은 row movement 가 활성화되어 있어야 한다. 자세한 내용은 아래 시나리오를 보자.
시나리오
앞선 포스팅에서 만든 테이블을 가지고 SCN 기반 Flashback 을 하도록 한다.
-
SQL> show user USER is "SCOTT" SQL> flashback table map to scn '604359' 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.-
highlight 설명
1 line : 현재 작업하는 유저는 scott이다.
4 line : 테이블 레벨에서 SCN 604359 으로 Flashback 을 시도한다.
- 이 값은 앞선 포스팅에서( 4. 변경 이력 조회 ) 조회된 값이다.
- 삭제전에 현재 SCN 조회를 하여 기록해 놨던 SCN 으로 사용해도 된다.
7 line : 테이블에 row movement 가 설정되어 있지 않아서 메시지가 표시된다.
9 line : 테이블에 row movement 를 활성화한다.
13 line : flashback 을 재시도 한다.
현재 scn 조회
select current_scn from v$database; CURRENT_SCN ----------- 611387--
시간 기반 Flashback
위의 SCN 과 마찬가지로 undo 를 사용하며 시간을 기반으로 Flashback 기능을 사용한다.
실습
대상 테이블 조회
SQL> select * from map;
KEY NAME
-------------------- --------------------
동물 강아지
바다 배
하늘 비행기
장애 발생
SQL> delete from map;
3 rows deleted.
복구
--
SQL> flashback table map to timestamp(systimestamp - interval '2' minute); Flashback complete.--
위의 문법중 systimestamp - intervla '2' minute 의 자세한 설명은 Literal( http://tawool-oracle.tistory.com/252 ) 을 참고한다.
관련 에러
데이터를 조회할 수 없음
ORA-01466: unable to read data - table definition has changed
시간을 너무 뒤로 돌려서 해당 테이블이 존재하지 않은 시간대를 선택했거나, alter 명령어로 테이블을 수정시 수정 전 시간으로 Flashback 을 시도하면 위와같은 에러 발생
UNDO Data가 없을때
ORA-00604 : error occurred at recusive SQL...
ORA-12801 error signaled in parallel...
ORA-01555 : snapshot too old : rollback segment number ...
이 기능은 윈도우의 휴지통같은 기능이다. 테이블을 drop 할때 purge 옵션을 주지 않으면 완전히 삭제되지 않고 복구가 가능한 상태로 바뀌게 되는데. 삭제되어 복구가 가능한 테이블들은 조회 할 수 있으며 복구 할 수 있다.
주의사항
- 테이블이 삭제되면 다른영역으로 이동하는것이 아니라 상태만 변경된다. 그래서 테이블스페이스에 공간이 부족하게되면 우선적으로 recycle bin 이 차지하고 있는 영역을 사용하게 되는데 그러면 recycle bin 을 이용하여 복구가 불가능하다.
- 인덱스가 존재하는 테이블을 삭제하고 flashback 을 사용하여 복구하면 인덱스도 같이 복구 된다. 하지만 인덱스 명이 BIN$. 으로 시작하므로 이름을 변경시켜 주던지 아니면 삭제하고 다시 생성한다.
인덱스 조회
--
select table_name, column_name,, index_name fromuser_ind_columns where table_name='&tableName'--
조회
아래에서 간단하게 두가지 예를 들어 설명한다.
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
select * from tab; 명령을 통한 조회에서는 이름만 표시되고 있으며 show recyclebin 명령은 원본 명과 recycle 명 타입 삭제된 시간 등을 알 수 있다.
복구
--
-- drop 한 테이블 명으로 복구 flashback table map to before drop; -- 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;--
purge recycle bin
-- 특정 테이블 purge purge table map; -- recyclebin 전체 purge purge recyclebin; -- 테이블 삭제시 purge - drop table map purge;--
&
'Oracle > 백업 & 복구 & 장애' 카테고리의 다른 글
RMAN ( Recovery Manager ) (2) | 2012.04.06 |
---|---|
FLASHBACK - 3 - [ Database Level Flashback ] (0) | 2012.04.06 |
FLASHBACK - 1 - [ Row Level Flashback ] (0) | 2012.04.05 |
datapump & (0) | 2012.04.04 |
EM Agent Connection to Instance 오류 (0) | 2012.03.29 |