[Oracle] 토탈 리콜(Total recall)

·2025년 9월 5일

오라클 관리

목록 보기
97/163

💡 undo data의 역할

  1. rollback을 가능하게 해줌
  2. 오라클 인스턴스가 갑자기 shutdown이 되었을 때 instance recovery를 가능하게 해줌
  3. flashback table, flashback query 등의 flashback 기능을 가능하게 해줌

--> undo tablespace가 undo segment로 가득찬 상태에서 undo_retention을 1시간으로 변경해놓고 심지어 undo tablespace의 retention 마저 guarantee로 해놓으면, 새로운 update 문장과 같은 transaction이 실패하게됨. 그래서 오라클에서 나온 해결 방법이 “total recall”


🔎 Total recall이란

  • flashback을 위한 전용 테이블스페이스를 따로 생성하겠다는 것
  • undo tablespace는 순수하게 rollback만 충실히 수행하게 하겠다는 것

📌 Flashback 7가지 기술

  1. flashback drop
  2. flashback table
  3. flashback query
  4. flashback version query
    : 과거에 특정 테이블에 어떠한 DML 작업을 했는지에 대한 이력정보
  5. flashback transaction query
    : 과거로 되돌리기 위한 DML문을 볼 수 있음
  6. flashback database
    : database 전체를 과거로 되돌리는 것
  7. total recall
    : flashback을 위한 전용 tablespace를 따로 생성

[실습1] undo tablespace 는 순수하게 rollback 을 위한 테이블 스페이스로 놔두기 위해 undo tablespace 의 retention을 nogurantee로 변경하시오

alter tablespace undotbs1 retention noguarantee;

select tablespace_name, retention
 from dba_tablespaces;

[실습2] flashback을 어떤 일이 있어도 성공할 수 있도록 total recall 기능을 활성화 시키시오

--- scott 에게 flashback 할 수 있는 권한을 부여합니다.
grant flashback archive administer to scott;


-- total recall 을 위한 tablespace 를 생성합니다.
create  tablespace fda_tbs
datafile '/u01/app/oracle/oradata/ORA19/fda_tbs01.dbf' size 5m;

alter database  datafile 
'/u01/app/oracle/oradata/ORA19/fda_tbs01.dbf' resize 50m;

--- flashback data archive 생성
-- FLASHBACK ARCHIVE ADMINISTER 권한이 있는 scott 계정에서 하기
CREATE FLASHBACK ARCHIVE fda1
TABLESPACE fda_tbs
QUOTA 5M
RETENTION 1 YEAR;


-- SCOTT 계정에서 EMP 테이블에 FDA 적용
alter  table  emp  flashback archive fda1;

-- 앞으로 emp 테이블에 관련해서 flashback 은 1년동안 가능합니다. 

💡 SCOTT 계정에서 emp 테이블에 fda 적용을 해제하는 방법
alter table emp no flashback archive fda1


문제1. emp 테이블을 모두 지우고 commit 한 후에 emp 테이블을 모두 지우기 전으로 되돌리시오

SCOTT @ ORA19 > connect scott/tiger
연결되었습니다.
SCOTT @ ORA19 >
SCOTT @ ORA19 >
SCOTT @ ORA19 > delete from emp;

14 행이 삭제되었습니다.

SCOTT @ ORA19 > commit;

커밋이 완료되었습니다.


SCOTT @ ORA19 > select systimestamp from dual;

SYSTIMESTAMP
---------------------------------------------------------------------------
25/09/05 10:14:40.358785 +09:00

SCOTT @ ORA19 > flashback table  emp  to timestamp
  2           to_timestamp('25/09/05 10:10:00','RR/MM/DD HH24:MI:SS');

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

SCOTT @ ORA19 > select count(*) from emp;

  COUNT(*)
----------
        14

SCOTT @ ORA19 > select table_name, row_movement
  2             from user_tables
  3             where table_name='EMP';

TABLE_NAME
----------------------
ROW_MOVE
--------
EMP
ENABLED

문제2. scott이 가지고 있는 모든 테이블들에 대해서 fda를 적용하시오

SCOTT @ ORA19 > select table_name from user_tables;

TABLE_NAME
--------------------------------------------------------------------------------
PLAN_TABLE
EMP
DEPT
SYS_FBA_DDL_COLMAP_74422
SYS_FBA_TCRV_74422
SYS_TEMP_FBT
SYS_FBA_HIST_74422

7 행이 선택되었습니다.


SCOTT @ ORA19 > grant flashback archive administer to scott;

권한이 부여되었습니다.

SCOTT @ ORA19 > alter table dept flashback archive fda1;

테이블이 변경되었습니다.

SCOTT @ ORA19 >

[실습3] 다시 원래 상태로 원복 시키시오. total recall 기능을 해제하기

 -- emp 테이블의 FDA 를 해제하기 
SCOTT @ ORA19 > alter   table  emp  no  flashback archive;

테이블이 변경되었습니다.

-- FLASHBACK Archive 삭제하기
SCOTT @ ORA19 > drop flashback archive fda1;

플래시백 아카이브가 삭제되었습니다.

-- sys 유져에서 tablespace 도 삭제합니다.

SCOTT @ ORA19 > connect / as sysdba
연결되었습니다.
SYS @ ORA19 >
SYS @ ORA19 > drop tablespace fda_tbs including contents and datafiles;

테이블스페이스가 삭제되었습니다.

0개의 댓글