Oracle/백업&복구

백업&복구 15번째(Flashback) ; Database level, Flashback Data Archive(11g)

에몽이ㅋ 2012. 2. 25. 19:08

Redo, archive만 사용하는 불완전 복구와,

Database flashback의 차이

Redo, archive만 사용하는 불완전 복구

Database flashback(어느정도 redo도 사용)

복구 시 백업파일을 복원해야한다.

복원 불필요

복구 후 재차 복구 불가능(resetlog때문에)

복구 후 재채 복구 가능

Redo, archive파일사용

Flashback log파일사용

Archive 파일을 사용하기 위해서는

Database archivelog 이여야한다.

사용하기 위해서는 DB

Archivelog mode이고

추가로 flashback database mode


Database flashback은 Table, Row level Flashback과는 다르게 추가로 설정을 해줘야 사용이 가능합니다.!
 

Default가 ON이 아닌 이유 : Database flashback에 사용되는 log파일을 저장하기 위해서는 FRA(Flash Recovery Area)를 사용해야하는데,
FRA가 꽉차게 되면 DB가 죽어버리기 때문입니다. flashback log파일은 거의 Snapshot수준으로 뜨기때문에 용량이 큽니다.


환경설정 :
db_recovery_file_dest=/home/oracle/flash_recovery_area  (FRA설정)
db_recovery_file_dest_size=2G  (FRA의 최대size, 10g는 기본 2G, 11g는 4G, 늘리고 싶으면, 수정하시면됩니다.)
db_flashback_retention_target=30  (기본값 1440(분입니다)

NAME                           VALUE    ISSYS_MOD
------------------------------ -------- ---------
db_flashback_retention_target  1440     IMMEDIATE  
DESCRIPTION : Maximum Flashback Database log retention time in minutes.

alter database flashback on;   : Database level flashback을 사용하겠다는 의미입니다.
SQL> select flashback_on from v$database;

FLASHBACK_ON
------------------
NO

SQL> alter database flashback on;

Database altered.

SQL> select flashback_on from v$database;

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


명령어:
FLASHBACKUP DATABASE TO TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE);
; database level이기때문에 mount상태에서만 수행가능합니다.
; 또한 불완전복구이기 때문에 open시 resetlog로 open해야합니다.(하지만 재차 불완전복구가 가능합니다.)

예제. Truncate 장애 복구
SQL> select flashback_on from v$database;

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

SQL> select * from koo.rtest3;

        NO
----------
         1
         2

SQL> truncate table koo.rtest3;  << 논리적인 장애발생

Table truncated.

SQL> select * from koo.rtest3;

no rows selected

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
---------------------------------------------------------------------------
---------------------------------------------------------------------------
SQL> startup mount  << MOUNT에서 작업합니다.
ORACLE instance started.

Total System Global Area  535662592 bytes
Fixed Size                  1345376 bytes
Variable Size             209717408 bytes
Database Buffers          318767104 bytes
Redo Buffers                5832704 bytes
Database mounted.
SQL> flashback database to timestamp(systimestamp - interval '10' second);

Flashback complete.

SQL> alter database open resetlogs;

Database altered.

SQL> select * from koo.rtest3;    << 너무 최근으로 돌려서 자료가 없습니다. 다시 수행합니다.

no rows selected

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
---------------------------------------------------------------------------
---------------------------------------------------------------------------
SQL> startup mount
ORACLE instance started.

Total System Global Area  535662592 bytes
Fixed Size                  1345376 bytes
Variable Size             209717408 bytes
Database Buffers          318767104 bytes
Redo Buffers                5832704 bytes
Database mounted.
SQL> flashback database to timestamp(systimestamp - interval '3' minute);  << 3분전으로 돌립니다.

Flashback complete.

SQL> alter database open resetlogs;

Database altered.

SQL> select * from koo.rtest3;

        NO
----------
         1
         2
복구완료!!

----------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------

Flashback Data Archive(11g) ; FBDA


Flashback를 사용하지 못하는 상황 : undo segment가 덮어쓰여졌을떄
--> 개선 : undo segment를 덮어쓸때, archivelog와 같이 undo의 자료도 다른 곳에 저장을 합니다.

사용하기 위한 환경설정
1. Flashback history table을 저장할 Tablespace를 생성
2. Flashback Data Archive를 관리할 FBDA관리자 계정생성
3. 관리자계정에 권한할당
4. flashback history table생성


SQL> create tablespace fbda
  2  datafile '/app/oracle/oradata/testdb/fbda01.dbf' size 10M autoextend on maxsize 2G;

Tablespace created.

SQL> create user fbda_admin identified by fbda_admin
  2  default tablespace fbda;

User created.

SQL> grant resource, connect to fbda_admin;

Grant succeeded.

SQL> grant flashback archive administer to fbda_admin;   << FBDA 관리자권합입니다.

Grant succeeded.

SQL> conn fbda_admin/fbda_admin
Connected.
SQL> create flashback archive fbda01 tablespace fbda
  2  retention 30 day;  << Archive 된 Undo데이터를 30일간 보관한다는 의미입니다.

Flashback archive created.


Flashback Archive 사용하기
생성된 Flashback archive조회하기
SQL> l
  1  select OWNER_NAME, FLASHBACK_ARCHIVE_NAME, RETENTION_IN_DAYS, STATUS
  2* from dba_flashback_archive   << 해당 dict로 조회
SQL> /

OWNER_NAME                     FLASHBACK_ARCHI RETENTION_IN_DAYS STATUS
------------------------------ --------------- ----------------- -------
FBDA_ADMIN                     FBDA01                         30


* Table을 생성할 때 Flashback archive을 사용하라고 해야합니다.
** 그 이전에 해당 사용자에게 Flashback history table사용권한 부여
SYS> grant flashback archive on fbda01 to scott;
SCOTT> create table test(no number) flashback archive fbda01 

이후에는 해당 테이블(scott.test)의 undo데이터가 덮어쓰여지게 되면 archive에 저장을 합니다.

*해당 테이블 flashback archive 사용해제하기
alter table scott.test no flashback archive;

* 어떤 테이블들이 Flashback archive기능을 사용하는지 조회하기
SQL> select * from dba_flashback_archive_tables;

TABLE_NAME OWNER_NAME FLASHBACK_ARCHI ARCHIVE_TABLE_NAME   STATUS
---------- ---------- --------------- -------------------- -------------
TEST       SYS        FBDA01          SYS_FBA_HIST_75992   ENABLED