본문 바로가기
ORACLE/Backup & Recovery

[Oracle] Flashback Data Archive 데이터 복원 작업

by 🌻♚ 2020. 7. 21.

Flashback Data Archive(11g)

DML 작업을 하면서 실수를 저질러버리고 commit까지 해버리는 경우가 있습니다. 예를 들어 실수로 delete문에 조건절을 포함하지 않아 모든 데이터가 사라지는... 그런 경우가 생길 수 있습니다. Flashback 기능을 사용하면 이런 상황에서 복구가 가능합니다. 하지만 Undo Data를 기본적으로 사용하는 Flashback 기능은 undo_retention 파라미터에 따라 데이터를 복구하지 못하는 상황이 발생할 수 있습니다. undo_retention은 기본으로 900이므로 15분이 지나면 undo에서 데이터를 읽어오지 못하여 Flashback 기능을 사용해서 복구가 안될 수 있습니다. 이럴때는 Flashback Data Archive를 생성하여 Undo Data를 오랜 기간 보존하여 Flashback 기능을 사용할 수 있습니다. 

 

 

 

Flashback Data Archive 실습

실습환경

OS : Red Hat Enterprise Linux Server release 6.10
DB : Oracle 11.2.0.1
SID : orcl
host : 601d2fce71dc

 

Flashback Data Archive 전용 Tablespace 생성

SYS@orcl> create tablespace flash_tbs datafile '/opt/oracle/app/oradata/orcl/flash_tbs01.dbf' size 50m;

Tablespace created.

Flashback Data Archive를 이용하여 Undo Data가 저장될 Tablespace를 생성합니다.

 

 

Flashback Data Archive 관리 유저 생성

SYS@orcl> create user fra_admin identified by oracle default tablespace flash_tbs;

User created.

Flashback Data Archive를 관리할 유저를 생성해주고 위에서 생성한 tablespace를 default로 지정해줍니다.

 

 

SYS@orcl> grant resource, connect, unlimited tablespace to fra_admin;

Grant succeeded.

세션접속과 기본적으로 오브젝트를 다루는데 필요한 권한과 tablespace에 대한 접근 권한을 부여해줍니다.

 

 

SYS@orcl> grant flashback archive administer to fra_admin;

Grant succeeded.

Flashback Archive Segment를 생성할 수 있는 권한을 부여합니다.

 

 

 

Flashback Data Archive 생성

SYS@orcl> conn fra_admin/oracle
FRA_ADMIN@orcl> create flashback archive fra1 tablespace flash_tbs retention 6 month;

Flashback archive created.

fra_admin으로 접속 후, Undo Data 보존 기간이 6개월인 Flashback Data Archive를 생성했습니다.

 

FRA_ADMIN@orcl> create flashback archive fra2 tablespace flash_tbs retention 2 year;

Flashback archive created.

Undo Data 보존 기간이 2년인 Flashback Data Archive를 생성했습니다.

 

FRA_ADMIN@orcl> conn / as sysdba
Connected.
SYS@orcl> alter flashback archive fra2 set default;

Flashback archive altered.

fra2를 Default Flashback Data Archive로 설정했습니다.

 

 

FRA_ADMIN@orcl> col flashback_archive_name for a10

FRA_ADMIN@orcl> 
select 
    flashback_archive_name
    ,retention_in_days
    ,status 
from dba_flashback_archive;

생성이 완료된것을 확인할 수 있습니다.

 

 

Historical Data Access

FRA_ADMIN@orcl> grant flashback archive on fra1 to sh;

Grant succeeded.

Flashback Archive에 접근할 수 있는 권한을 부여합니다. sh계정에서 fra1에 Undo data의 내용을 저장할 수 있도록 권한을 부여해줬습니다.

 

 

FRA_ADMIN@orcl> conn sh/sh
Connected.
SH@orcl> alter table sales flashback archive fra1;

Table altered.

fra1에 sales 테이블에서 발생하는 Undo의 데이터를 기록하도록 설정했습니다.

 

 

SH@orcl> conn fra_admin/oracle
Connected.
FRA_ADMIN@orcl> select * from dba_flashback_archive_tables;

Fashback Archive에 등록된 테이블의 정보를 확인할 수 있습니다.

 

Flashback Archive에 등록된 테이블에 한해서 undo_rention 파라미터의 값이 아닌 Flashback Archive의 retention 기간만큼 데이터가 보존되어 Flashback 기능을 사용할 수 있습니다.

 

원칙상으로 undo_retention값이 지나면 더이상 Undo에 데이터를 보존하지 않습니다. 하지만 실제로 테스팅 작업을 해보면 undo_retention 기간만큼 지나도 undo의 데이터가 읽어지는 경우가 있습니다. 11g, 12c 버전에서 테스팅 작업을 해봤는데 undo_retention 기간이 지나도 해당 데이터가 읽히는 것을 확인했습니다. 이는 OS 환경이나 버전에 따란 일종의 Oracle Bug와 비슷한 것이라고 봐야할 것 같습니다.

 

 

 

댓글0