데이터 복구하기( 백업본이 없는 경우 )

양혜정·2024년 3월 6일

Oracle

목록 보기
32/49

데이터 복구하기( 백업본이 없는 경우 )

  • 데이터 백업본 없이 delete, update 를 진행한 후 commit 되어진 데이터를 복구하고 싶은 경우, 타임머신 기능을 이용하여 복구
    -> Oracle 11g 버전 부터 가능

Flashback query ( 타임머신 )

  • 어떤 테이블의 데이터값을 과거의 데이터값으로 돌아가는 기능

    from 테이블명
    as of timestamp(systimestamp - interval '숫자' minute);


1. Flashback query 이용하여 백업본 만들어서 적용

create table 테이블명_backup
as
select *
from 테이블명 as of timestamp(systimestamp - interval '숫자' minute);
-- systimestamp : yy/mm/dd hh24:mi:ss.ms 현재시각
-- 현재시각에서 interval 숫자 minute 전 을 timestamp에 저장

-- create 전에 select 문 만 실행해보고 
-- 원하는 결과가 나오면 바로 create 하기!! => 시간이 계속 흐르기 때문!!

2-1. Flashback query 이용하여 다른부분만 골라내서 테이블 만들기 ( + MINUS )

select *
from 테이블명 as of timestamp(systimestamp - interval '숫자' minute)
MINUS
select *
from 테이블명;

2-2. Flashback query 이용하여 다른부분만 골라내서 병합하기 ( + MERGE )

-- 다른부분만 골라내어 테이블 만들기 [2-1]
create table 테이블명_origin
as
select *
from 테이블명 as of timestamp(systimestamp - interval '숫자' minute)
MINUS
select *
from 테이블명;

-- 테이블 병합하기
merge into 테이블명 A
using 테이블명_origin B
on (A.no = B.no)
when matched then   	-- 똑같은 것이 있을 경우
    update set E.name = O.name
              , E.address = O.address
when not matched then   -- 똑같은 것이 없을 경우
    insert (no, name, address) values(O.no, O.name, O.address);
-- no, name, address 는 컬럼명이다.

정리

-> local_hr에서작업한것

0개의 댓글