행위

FLASHBACK DATABASE LEVEL

DB CAFE

thumb_up 추천메뉴 바로가기


1 FLASHBACK DATABASE LEVEL[편집]

  1. 전통적인 백업 방법은 파일을 restore 하고 redo와 Archive File을 이용하여 복구
  2. Database Level Flashback 은 restore 과정을 생략하고 Flashback log 를 이용하여 복구 하는 것이 차이점

1.1 전통적인 복구 VS DATABASE FLASHBACK[편집]

REDO,ARCHIVE파일 복구 DATABASE FLASHBACK 복구
Redo, archive만 사용하는 불완전 복구 Database flashback(어느정도 redo도 사용)
복구 시 백업파일을 복원해야한다. 복원 불필요
복구 후 재차 복구 불가능(resetlog때문에) 복구 후 재차 복구 가능
Redo, archive파일사용 Flashback log파일사용
Database archivelog 모드만 가능 Archivelog mode 이고 flashback database mode

1.1.1 주의사항[편집]

  1. flashback log 는 Database snapshot 수준으로 남기므로 많은 용량을 필요로 한다.
  2. system Tablespace 내의 Table은 Flashback 으로 복구 불가능
  3. Control file 을 재생성시 Flashback Database 설정 초기화

1.2 DATABASE FLASHBACK 전제조건[편집]

  1. flashback log 설정 활성화
  2. archive log mode
  3. Flashback Database Mode 설정 활성화


1.3 DB 환경 설정[편집]

  1. Database Level 의 Flashback 을 사용하려면 아래와 같은 설정을 선행 해야 한다.
-- db_flashback_retention_target 분 설정 
SQL> alter system set db_flashback_retention_target=30 scope=spfile;

-- 종료 (pfile 을 사용한다면 종료후 pfile 에 db_flashback_retention_target 을 설정한다.)
SQL>SHUTDOWN  IMMEDIATE;

-- MOUNT 상태로 시작 
SQL> startup mount;

-- archive log 시작
SQL> alter database archivelog;

-- flashback on
SQL> alter database flashback on;

-- database open
SQL> alter database open;

-- flashback 상태 조회
select flashback_on from v$database;

FLASHBACK_ON
------------------
YES

https://t1.daumcdn.net/cfile/tistory/1977D1394FA32D6C2B

1.4 시나리오[편집]

  1. 테이블 생성
  2. 데이터 입력
  3. 테이블 truncate
  4. 복구



-- 1.테이블 생성 
SQL>  create table t ( no number,name varchar2(10)) tablespace example;
Table created.

-- 2. 데이터 입력
SQL> begin
    for i in 1..1000 loop
       insert into t values ( i , dbms_random.string('A', 9));
    end loop;
    commit;
    end;
    /

-- 3. Table Truncate
SQL> truncate table t;
Table truncated.

-- 4. 복구 

-- sys 계정 로그인 (database shutdown 하기 위해)
SQL> conn / as sysdba

-- database shutdown  
SQL> shutdown immediate;

-- 마운트 상태에서 복구 
SQL> startup mount;

-- 시간은 알아서..
SQL>flashback database to timestamp (systimestamp - interval '10' minute);

Flashback complete.

-- database 를 open 한다.
SQL> alter database open resetlogs;