본문 바로가기

오라클 백업/복구

Flashback 3 - Database Level



3. Database Level Flashback

Database 전체를 과거의 특정 시점으로 돌림

불완전 복구와 비슷한 개념이지만, 불완전 복구 보다는 속도도 빠르고 복구 방법도 훨씬 더 간단

장애난 데이터 파일에 Flashback Log 라는 것을 바로 적용 시켜 복구하는 방법

그래서 Flashback Log에 대한 설정이 먼저 되어 있어야 함

반드시 Archive Log Mode 에서만 가능함




환경 설정


1) 파라미터 파일에 파라미터 설정


*.db_recovery_file_dest='/app/oracle/fast_recovery_area' 

*.db_recovery_file_dest_size=4196401152 


이 두개는 이미 적혀져 있음, 아래 파라미터만 추가해주면 됨

db_flashback_retention_target=분단위

--> 설정한 시간동안의 내용만 저장해서 장애 처리

시간 길게 설정하면 당연히 용량이 많아짐



2) Archaive Log Mode 확인


Flashback database는 Archive Log Mode 에서만 가능하니까 확인하기

No Archive 면 

> alter database archivelog ;

명령어로 바꿔주기



3) Flashback database 기능 enable


DB MOUNT 상태에서 flashback database 사용한다는 명령어 입력

> alter database flashback on ;


flashback database 상태 조회 (DB OPEN하고 조회)

> select flashback_on from v$database ;



ORA-38714: Instance recovery required.

이런 에러가 발생하는데 shutdown immediate 하고 다시 startup mount 하고 다시 시도하기





Fast Recovery Area


11g는 기본 경로가 /app/oracle/fast_recovery_area/SID/flashback/


파라미터 파일에서 

db_recovery_file_dest 로 지정되는 곳이 바로 Fast Recovery Area (10g는 Flash Recovery Area)

db_recovery_file_dest_size로 크기를 설정할 수 있다. 기본 크기는 2G


저장되는 파일들은

- flashback log file (.flb)

- archive redo log file

- RMAN backup file


기본 크기가 2G로 크기가 작아서 저장되는 파일들이 금방 가득차게 된다.

그래서 DB Hang이 걸리는 경우 가 발생할 수 있음, 수시로 공간 관리 해줘야함

아니면 다른 경로로 경로를 변경해주면 된다.

Archive log 경로 바꿔주려면 파라미터 파일에 log_archive_dest_1='경로' 로 설정

RMAN도 마찬가지, 이렇게 경로를 직접 정해주면 정해준 경로로 저장이 된다.


DB_RECOVERY_FILE_DEST 크기 조회

> select * from v$recovery_file_dest ;


DB_RECOVERY_FILE_DEST 사용량조회

> select * from v$flash_recovery_area_usage ;


DB_RECOVERY_FILE_DEST 크기 변경

> alter system set db_recovery_file_dest_size=크기 ;

--> 크기가 작을 경우 해당 작업을 하다 에러 발생


DB_RECOVERY_FILE_DEST 관련 에러에 대한 원인과 권장사항 찾는 쿼리 

> SELECT object_type, message_type, message_level, reason, suggested_action

   FROM dba_outstanding_alerts ;


[예제]





Flashback Database


Flashback database 꼭 알아둬야 할 점!

Flashback database는 데이터베이스 전체를 과거 시점으로 돌리는 것이기 때문에 

반.드.시 MOUNT 상태에서 작업

dba권한을 가지고 수행해야 함

불완전 복구 처럼 과거 특정 시간으로 돌리는 것이기 때문에

datafile ,controlfile redo log file SCN 정보가 모두 다름 --> resetlogs로 open 해야 함!


flashback database 명령어로 복구 해야하는 대표적 장애가 바로

drop user / truncate table 장애


복구가 안됬을 경우에는 

불완전 복구마냥 다 다시 restore하고 등등 작업 귀찮게 할 필요없이 간단히 작업할 수 있다.

shutdown immediate --> MOUNT --> flashback datase --> OPEN RESETLOGS


[실습]







Flashback Data Archive - 11g New Feature


Row Level Flashback에서도 잠시 설명했지만

DML 장애 처리 중 Undo Data를 사용해 다른 사용자가 undo segment를 덮어쓴다면

Flashback 기능을 사용할 수 없음


11g 에서부터는 이 문제를 해결하기 위해

online redo log archiving 같이 

undo segment에 있는 commit된 내용을 특정 테이블 스페이스에 archaving 해서 영구적으로 저장하는 기능

즉, Flashback Data Archive(FBDA) 기능이 추가됨


원리는 FBDA라는 백그라운드 프로세스가 undo segment 내용을 비정기적으로 특정 테이블 스페이스에 저장



Flashback Data Archive 기본값은 disable, 

이 기능이 활성화 되면 FBDA는 undo segment 내용을 모두 기록하기 전에는 

해당 undo segment는 절대 재활용 되지 않음

FBDA 프로세스는 sleep 하고 있다가 특정 시간이 되면 자동으로 활성화 되 undo segment 내용을 저장

undo양이 많을 경우에는 자주 내려쓰게 된다. 기본값은 5분



Flashback Database Archive 활성화

1. Flashback history table 지정할 테이블 스페이스 생성


2. Flashback data archive 관리할 관리자 계정 생성


3. 관리자 계정에 권한 할당

> grant resource, connect to 계정 ;

> grant flashback archive administer to 계정 ;

--> flashback archive administer 권한은 flashback data archive를 관리하기 위한 권한

flashback history table을 생성하고 관리 할 수 있고, retention time도 관리 가능

테이블스페이스를 추가하거나 삭제도 가능하다.


4. 관리자 계정으로 로그인 후 Flashback history table 생성

> create flashback archive flashback_archive_이름 tablespace 테이블스페이스이름 retention # day ;

--> 30 day라고 쓰면 history table에 저장되는 undo data의 저장 기간이 30일, 30일 지나면 자동으로 삭제됨



Flashback data archive 상태 조회

>SELECT owner_name, flashback_archive_name, retention_in_days, status

  FROM dba_flashback_archive ;


[실습]



일반계정에서 flashback history table 사용하려면 권한이 필요

> grant flashback archive on T/S이름 to 계정 ;

--> 여기서 T/S 이름은 flashback history table을 저장할 테이블 스페이스를 말함



테이블 생성시 'flashback archive T/S이름' 을 붙여주면 된다.

> create table 테이블명 ( ) FLASHBACK ARCHIVE T/S명 ;

flashback 명령어를 사용해서 복구하면 flashback data archive 기능 사용으로 인해 

다른 사용자가 undo segment를 덮어썼더라도 그 내용까지 모두 복구 가능



Flashback Data Archive 사용 테이블 삭제

> alter table 테이블명 no flashback archive ;

다음에

> drop table 테이블명 ;

--> flashback data archive 기능 사용중이면 drop table이 안되니까 기능 해제 후 drop


Flashback history table 조회

> SELECT * FROM dba_flashback_archive_tables ;


[실습]





4. Flashback 명령어를 사용할 수 없는 경우

- 물리적 장애 -> 파일이 삭제된 경우
- system tablespace에 있던 테이블이 삭제되면 flashback table to before drop 안됨
- control file 재생성하면 flashback database 명령어 사용 못함
- tablespace drop 되면 flashback 명령어로 복구 안됨
- datafile shrunk 되면 flashback database 명령어로 복구 못함
- alter table 로 테이블 구조 변경시 version query 로 복구 안됨
- system tables와 통계정보는 flashback 명령어로 복구 안됨
- purge 된 테이블도 flashback 명령어로 복구 안됨
- 테이블과 별도로 삭제된 인덱스는 복구 안됨
- Mview 복구 안됨




'오라클 백업/복구' 카테고리의 다른 글

RMAN - 백업  (0) 2013.02.19
RMAN - Recovery Catalog와 Channel  (0) 2013.02.18
Flashback 2 - Table Level  (0) 2013.02.14
Flashback 1 - Row Level  (0) 2013.02.13
백업 파일 / 아카이브 로그에 문제가 있을 때 복구  (0) 2013.02.13