본문 바로가기

DBMS/ORACLE

Flashback Database

반응형

1. flashback database 기능

 - 전체 데이타베이스 복구

 - 특정 시점 데이타베이스 복구

 - flashback database가 활성화 되었을 경우 fast recovery area(DB_RECOVERY_FILE_DEST parameter) 에 flashback log를 생성, 이 flashback log는 특정 시간으로 데이타베이스를 flash back 하는데 사용된다.

- flashback table은 undo_tablespace를 사용하는 반면 flashback database는 flashback log 사용

2.  flashback database 제약 

   - currupt data file, 갑작스런 데이타 파일 삭제로 인한 복구는 불가능 ( RMAN을 이용하여 복구)

  - 운영 DB보다는 개발 DB환경에 더 적절

3. flashback database 활성상태 조회

SQL> select flashback_on from v$database ;

FLASHBACK_ON
------------------
NO                   => NO 일경우 비활성화, YES 일 경우 활성화 상태

SQL>

4. flashback database 활성화

SQL> shutdown immediate ;  => flashback database를 활성화를 위해서는 데이타베이스 재시작 필요

SQL> startup mount ;  => Mount 모드로 시작

SQL> archive log list ;     => ARCHIVELOG 모드 확인

SQL> alter database archivelog ;  => ARCHIVELOG 모드에서만 flashback database 사용 

SQL> alter system set DB_FLASHBACK_RETENTION_TARGET = 2880 ;   => 48시간(단위 분), defualt 1440

SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE = 20G ;

SQL> alter system set DB_RECOVERY_FILE_DEST=+FRA ;  예) ASM상의 FRA 이름의 디스크 구룹 지정

   - DB_RECOVERY_FILE_DEST는 디렉토리, ASM의 디스크 그룹 지정 가능

   - rac 환경에서는 ASM의 FRA(Fast Recovery Area), 또는 cluster 파일시스템상에 위치 해야함

SQL> alter system set UNDO_RETENTION = 86400 ;   => 24시간(단위 초)

SQL> alter database FLASHBACK ON ; => flashback 활성화

SQL> alter database open ;  => 데이타베이스 오픈(open)

SQL> select flashback_on from v$database ; => flashback database 상태 조회

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

SQL>

5. SCN을 이용한 flashback database 복구 예

SQL> conn / as sysdba
연결되었습니다.  
SQL> select current_scn from v$database ;   => 현재 SCN확인, 복구지점

CURRENT_SCN
-----------
    1145551

SQL> conn hoya/******* 
연결되었습니다.

SQL> select * from t1 ;

       AGE
----------
         1
         2

SQL>  truncate table t1 ;

테이블이 잘렸습니다.

SQL> select * from t1 ; => 장애 발생

선택된 레코드가 없습니다..

SQL> conn / as sysdba => flashback database를 실행하기 위해 sysdba 권한으로 접속
연결되었습니다.
SQL> flashback database to scn 1145551 ;
flashback database to scn 1145551
*
1행에 오류:
ORA-38757: 데이타베이스는 마운트 되어야하고 FLASHBACK을 위해 열리면 안됩니다.  => flashback database를 사용하기 위해서 데이타베이스는 mount 상태여야 함


SQL> shutdown immediate ;  => 데이타베이스 종료
데이타베이스가 닫혔습니다.
데이타베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다. 
SQL> startup mount ;           => mount 상태로 데이타베이스 시작
ORACLE 인스턴스가 시작되었습니다.
Total System Global Area 3423965184 bytes
Fixed Size                  2215824 bytes
Variable Size            1862271088 bytes
Database Buffers         1543503872 bytes
Redo Buffers               15974400 bytes
데이터베이스가 마운트 되었습니다.
SQL> flashback database to scn 1145551 ; => scn point로  복구

플래쉬백이 완료되었습니다.

SQL> alter database open resetlogs ; => 불완전 복구이므로 resetlogs 옵션으로 데이타베이스 오픈

데이타베이스가 변경되었습니다. 

SQL> conn hoya/******** 
연결되었습니다. 
SQL> select * from t1;

       AGE
----------
         1
         2

SQL>

 

6. TO_TIMESTAMP을 이용한 flashback database 복구 예

 - TO_TIMESTAMP 시간까지 복구

SQL> conn hoya/*******
연결되었습니다.
SQL> select * from t1 ;

       AGE
----------
         1
         2

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual ;

TO_CHAR(SYSDATE,'YY
-------------------
2019-12-17 10:27:28

SQL> truncate table t1 ; => 장애 발생

테이블이 잘렸습니다.

SQL> select * from t1 ;

선택된 레코드가 없습니다.

SQL> conn / as sysdba
연결되었습니다.
SQL> shutdown immediate
데이터베이스가 닫혔습니다.
데이타베이스가 마운트 해제되었습니다. 
ORACLE 인스턴스가 종료되었습니다.
SQL> startup mount ;
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area 3423965184 bytes
Fixed Size                  2215824 bytes
Variable Size            1862271088 bytes
Database Buffers         1543503872 bytes
Redo Buffers               15974400 bytes
데이터베이스가 마운트 되었습니다.
SQL> flashback database to timestamp TO_TIMESTAMP('2019-12-17 10:27:28','YYYY-MM-DD HH24:MI:SS') ;

플래쉬백이 완료되었습니다.

SQL> alter database open resetlogs ;

데이타베이스가 변경되었습니다.

SQL> conn hoya/*******
연결되었습니다.
SQL> select * from t1 ;

       AGE
----------
         1
         2

SQL>

7. 보장된 복원지점으로 복구 예

SQL> conn hoya/*******
연결되었습니다.
SQL> select * from t1 ;

       AGE
----------
         1
         2

SQL> conn / as sysdba   => sysdba 권한으로 접속
연결되었습니다.
SQL> select * from v$restore_point ;

선택된 레코드가 없습니다.

SQL> create restore point INIT_DB guarantee flashback database ;    => 보장된 복원지점 생성

복원 지점이 생성되었습니다.

SQL> select * from v$restore_point ;

       SCN DATABASE_INCARNATION# GUA STORAGE_SIZE
---------- --------------------- --- ------------
TIME
---------------------------------------------------------------------------
RESTORE_POINT_TIME                                                          PRE
--------------------------------------------------------------------------- ---
NAME
--------------------------------------------------------------------------------
   1147029                     5 YES     15941632
19/12/17 10:51:44.000000000
                                                                            YES
INIT_DB


SQL> conn hoya/******* 
연결되었습니다.
SQL> truncate table t1 ;  => 장애 발생

테이블이 잘렸습니다.

SQL> select * from t1 ;

선택된 레코드가 없습니다.

SQL> conn / as sysdba   => sysdba 권한으로 접속
연결되었습니다.
SQL> shutdown immediate => 데이타베이스 종료
데이터베이스가 닫혔습니다. 
데이타베이스가 마운트 해제되었습니다. 
ORACLE 인스턴스가 종료되었습니다
SQL> startup mount   => mount mode로 데이타베이스 시작
ORACLE 인스턴스가 시작되었습니다. 

Total System Global Area 3423965184 bytes
Fixed Size                  2215824 bytes
Variable Size            1862271088 bytes
Database Buffers         1543503872 bytes
Redo Buffers               15974400 bytes
데이터베이스가 마운트 되었습니다..
SQL> select * from v$restore_point ;

       SCN DATABASE_INCARNATION# GUA STORAGE_SIZE
---------- --------------------- --- ------------
TIME
---------------------------------------------------------------------------
RESTORE_POINT_TIME                                                          PRE
--------------------------------------------------------------------------- ---
NAME
--------------------------------------------------------------------------------
   1147029                     5 YES     15941632
19/12/17 10:51:44.000000000
                                                                            YES
INIT_DB


SQL> flashback database to restore point INIT_DB ; => 보장된 복원지점으로 복구

플래쉬백이 완료되었습니다. 

SQL> alter database open resetlogs ;

데이타베이스가 변경되었습니다. 

SQL> conn hoya/******* 
연결되었습니다. 
SQL> select * from t1 ;

       AGE
----------
         1
         2

SQL>
반응형

'DBMS > ORACLE' 카테고리의 다른 글

FLASHBACK TABLE  (0) 2019.12.18
Fast Recovery Area 이란  (0) 2019.12.16
RECYCLEBIN(휴지통) 관리  (0) 2019.12.15
오라클 권한(Privilege)과 Role(역할) 조회/생성/부여/회수  (0) 2019.12.14
오라클 객체 권한 조회/추가/회수  (0) 2019.12.14