[Oracle] Undo Data

·2025년 9월 4일
0

오라클 관리

목록 보기
95/163

undo data와 redo data의 차이

  1. undo data
    : 취소를 하기 위한 data
    undo tablespace에 저장
     
  2. redo data
    : 복구를 하기 위한 data
    redo log file에 저장

undo data의 용도

  1. rollback을 할 수 있게 해줌
  2. flashback을 할 수 있게 해줌
  3. instance가 비정상적으로 종료되었을 때 복구 할 수 있게 해줌
  4. 읽기 일관성 보장

⭐ 읽기 일관성이란?

누군가 update를 했어도 최종적으로 commit 된 데이터만 볼 수 있음


Instance recovery 할 때 undo data가 사용되는 이유


[실습1] Instance recovery를 테스트 하시오


[실습2] emp 테이블을 전부 delete 하고 commit 하시오

SCOTT @ ORA19 > delete from emp;

14 행이 삭제되었습니다.

SCOTT @ ORA19 > commit;

커밋이 완료되었습니다.

💡 이때 지워진 데이터는 undo tablespace의 undo segment에 들어있음


[실습3] flashback table이 가능한 골든 타임을 확인하시오

SCOTT @ ORA19 > show parameter undo_retention

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_retention                       integer     900
SCOTT @ ORA19 >

900초 = 15분


[실습4] flashback table로 복구하세요

SCOTT @ ORA19 > alter table emp enable row movement;

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

SCOTT @ ORA19 > flashback table emp to timestamp
  2  			(systimestamp - interval '10' minute);

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

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

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

SCOTT @ ORA19 >

💡 undo segment에 undo data가 저장되어있어서 flashback이 가능한 것


문제1. hr 접속해서 hr 이 가지고 있는 테이블과 그 건수를 확인하시오

select table_name, num_rows
 from user_tables;
 
select 'select count(*) from ' || table_name || ';'
 from  user_tables;
 
select count(*) from COUNTRIES;  --25
select count(*) from DEPARTMENTS; --27 
select count(*) from EMPLOYEES; -- 107
select count(*) from JOBS; -- 19
select count(*) from JOB_HISTORY;  --10
select count(*) from LOCATIONS;  -- 23
select count(*) from REGIONS; --4

문제2. 위의 7개의 테이블 중 랜덤으로 3개의 테이블의 data를 delete 하고 commit 하고 복구하시오

delete from JOBS;
delete from JOB_HISTORY;
delete from LOCATIONS;
delete from REGIONS;

alter table JOBS enable row movement;
alter table JOB_HISTORY enable row movement;
alter table LOCATIONS enable row movement;
alter table REGIONS enable row movement;

flashback table JOBS, JOB_HISTORY, LOCATIONS, REGIONS to timestamp
(systimestamp - interval '10' minute);

0개의 댓글