본문 바로가기
DB/ORACLE

[oracle] 특정시점(과거) 데이터 조회하기

by 쑨s 2025. 7. 25.
728x90

[oracle] 특정시점(과거) 데이터 조회하기

 

데이터를 조작하다보면 실수로 원하지않게 수정해버리거나, 삭제한 경험이 한번쯤 있을거다.

오라클에서는 이런 상황을 대비해 Flashback Query라는 아주 유용한 기능을 제공한다.

Flashback Query에 대해서 한번 알아보자.

 

Flashback Query란?

Flashback Query는 오라클에서 제공하는 기능으로, 특정 시점의 데이터 상태를 조회할 수 있다.
삭제되었거나 수정된 데이터를 복구하거나, 과거 상태를 비교할 때 유용하게 활용할 수 있다.

 

사용 조건

1. UNDO 정보가 남아 있어야 함

  - 과거 시점을 조회하려면 해당 시간의 Undo 정보가 삭제되지 않아야 한다.

  - UNDO_RETENTION 파라미터를 통해 보존 시간을 확인할 수 있다.

2. 테이블에 FLASHBACK 권한이 있어야 함

GRANT FLASHBACK ON 테이블명 TO 사용자명;

 

3. 테이블은 일반 테이블만 된다. 외부테이블, 임시테이블은 당연히 안됨.

 

사용 방법
-- 특정시점 데이터 조회
SELECT *
FROM 테이블명 AS OF TIMESTAMP TO_TIMESTAMP('2025-07-25 13:00:00', 'YYYY-MM-DD HH24:MI:SS');

-- 시스템 시간으로 10분 전 조회
SELECT *
FROM 테이블명 AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);

 

실전 예제
-- 직원 테이블에서 수정 전 급여 정보 조회
-- 예제 테이블 생성
CREATE TABLE emp_flash AS
SELECT * FROM emp;

-- 데이터 수정
UPDATE emp_flash SET sal = sal + 100 WHERE empno = 7369;
COMMIT;

-- 1분 전 상태 조회
SELECT *
FROM emp_flash AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' MINUTE)
WHERE empno = 7369;

 

 

Flashback Query의 장점
  • 트랜잭션 복원 없이 과거 상태 확인 가능
  • 로그 테이블 없이 데이터 변경 내역 비교 가능
  • 단순 조회로 데이터 복구 여부 판단 가능
단! 주의할점
  • UNDO 정보 만료 : 너무 오래된 시점은 조회불가
  • 성능 : 대량의 UNDO 스캔 시 성능저하 발생
  • 읽기 전용 : Flashback Query는 조회 전용 (DML 불가)
현재 UNDO_RETENTION 설정 값 확인
SHOW PARAMETER undo_retention;

SELECT name, value
FROM v$parameter
WHERE name = 'undo_retention';

 

 

오라클 특정시점(과거) 데이터 조회하기

 

728x90

댓글