데이터베이스 연구실.log

Flashback 조회와 테이블 복구

UNDO로 과거 시점의 데이터를 조회하는 Flashback Query, 테이블을 과거 시점으로 되돌리는 Flashback Table, 휴지통에서 삭제된 테이블을 되살리는 Flashback Drop의 조건과 명령

VERSIONS BETWEENPURGE RECYCLEBINFLASHBACK QUERYAS OF TIMESTAMPFLASHBACK TABLETO BEFORE DROPRECYCLEBINROW MOVEMENTUNDO_RETENTION

#핵심 요약

Flashback Query(AS OF TIMESTAMP)는 UNDO로 과거 시점의 데이터를 조회함

Flashback Table은 백업이 아니라 UNDO 테이블스페이스의 정보로 테이블을 과거 시점으로 되돌림
나머지 데이터베이스는 그대로 쓸 수 있음

Flashback Table에는 행 이동(ENABLE ROW MOVEMENT)이 켜져 있어야 하고, 대상 시점까지의 UNDO가 남아 있어야 함

Flashback Drop(FLASHBACK TABLE ... TO BEFORE DROP)은 UNDO가 아니라 휴지통에서 삭제된 테이블을 되살림

#개념과 동작 원리

#Flashback Table

새 행은 지우고 예전 행은 다시 넣는 방식으로 동작함

권한: FLASHBACK ANY TABLE 시스템 권한 또는 그 테이블의 FLASHBACK 객체 권한, 그리고 테이블의 READ 또는 SELECT, INSERT, DELETE, ALTER 권한

대상이 될 수 없는 것: 클러스터에 속한 테이블, 구체화 뷰, AQ 테이블, 정적 데이터 딕셔너리 테이블, 시스템 테이블, 원격 테이블, 객체 테이블, 중첩 테이블, 개별 파티션

현재와 대상 시점 사이에 테이블 구조가 바뀌면 안 됨(이동, TRUNCATE, 제약 추가, 열 수정, 삭제 등)

행 이동이 켜져 있어야 함
되돌린 뒤 ROWID가 바뀌므로 ROWID에 의존하는 애플리케이션에는 쓸 수 없음

Flashback Table을 위한 UNDO_RETENTION 설정 지침은 86400초(24시간) 이상임
설정값만으로 필요한 UNDO 보존이 항상 보장되지는 않음
UNDO 보존은 UNDO 공간과 보존에 있음

FLASHBACK TABLE은 롤백할 수 없으므로 실행 전에 현재 SCN을 기록해 두라고 권함

타임스탬프와 SCN의 대응은 최대 약 3초 어긋날 수 있어, 정확한 시점은 SCN으로 지정함

기본적으로 작업 중 트리거를 끄고, ENABLE TRIGGERS를 주면 켠 채로 둠

#Flashback Drop

휴지통은 SYSTEM이 아닌 로컬 관리 테이블스페이스에서만 쓸 수 있음
공간이 필요해지면 오래된 객체부터 지워지므로 얼마나 남아 있을지 보장되지 않음

원래 이름이나 휴지통 이름(BIN$...)으로 되살림
같은 원래 이름이 여럿이면 가장 최근에 지운 것부터 되살아남
RENAME TO로 새 이름을 줄 수 있음

종속 인덱스는 휴지통 이름 그대로 돌아오므로 필요하면 이름을 바꿈
참조 제약은 휴지통이 보존하지 않으므로 다시 만듦

#주요 용어와 구성 요소

구문 의미
AS OF 지정 시점에 커밋되어 있던 데이터 조회임
VERSIONS BETWEEN 지정 구간에 존재한 커밋 버전들을 조회하며 트랜잭션별 모든 중간 DML을 한 줄씩 보장하는 기능은 아님
VERSIONS_STARTSCN, ENDSCN 버전이 시작, 종료된 SCN이며 조회 구간 이전에 만들어진 버전의 시작값은 NULL일 수 있음

#필수 명령어 또는 SQL

항목 실행 조건
작업 대상 und_use, emp의 과거 상태, 버전, 현재 SCN, UNDO 설정과 휴지통 객체
필요 권한 과거 조회는 대상 FLASHBACK과 READ 또는 SELECT, 과거 복원은 추가 INSERT, DELETE, ALTER 권한이 필요함
V$ 조회는 관리자 조회 권한 필요
바꿀 입력값 테이블명, <ENAME>, <SCN>, 휴지통 이름, <NEW_NAME>과 목표 시각
결과 해석 버전 메타데이터의 의미와 복원 조건을 구분하며 실습에 없는 출력, 복구 성공은 기재 없음

#Flashback Query와 Flashback Table

SQL*Plus조회만 함
SELECT COUNT(*) FROM und_use AS OF TIMESTAMP SYSTIMESTAMP - INTERVAL '7' MINUTE;
SQL*Plus객체 또는 설정을 변경함
ALTER TABLE und_use ENABLE ROW MOVEMENT;
FLASHBACK TABLE und_use TO TIMESTAMP SYSTIMESTAMP - INTERVAL '10' MINUTE;

결과 해석:

실습에서는 FLASHBACK TABLE und_use TO systimestamp - interval '10' minute로 TIMESTAMP 키워드 없이 적었음
시각으로 되돌리는 구문에는 TO TIMESTAMP <식>이 필요함

#실행 전 확인

SQL*Plus (DBA)조회만 함
SELECT current_scn FROM v$database;
SELECT name, scn, time FROM v$restore_point;
SELECT name, value/60 minutes_retained FROM v$parameter WHERE name = 'undo_retention';

결과 해석: 개별 실행 출력은 기재 없음

#Flashback Drop

SQL*Plus조회만 함
SHOW RECYCLEBIN
SELECT object_name AS recycle_name, original_name, type FROM recyclebin;
SQL*Plus객체 또는 설정을 변경함
FLASHBACK TABLE <TABLE_NAME> TO BEFORE DROP;
FLASHBACK TABLE "<BIN$이름>" TO BEFORE DROP RENAME TO <NEW_NAME>;

결과 해석:

휴지통 이름은 특수 문자가 있어 큰따옴표로 감쌈

SQL*Plus데이터 또는 파일을 삭제함, 되돌릴 수 없음
PURGE RECYCLEBIN;                     -- 내 휴지통 비우기
DROP TABLE <TABLE_NAME> PURGE;        -- 휴지통에 넣지 않고 바로 삭제

결과 해석:

PURGE로 지운 테이블은 TO BEFORE DROP으로 되살릴 수 없음

#Flashback Version Query

데이터를 잘못 고치거나 지웠을 때 그냥 과거 시점으로 되돌리면 그 사이의 다른 변경도 함께 사라짐
과거에 어떤 DML이 언제 일어났는지 행 단위로 보면 돌아갈 시점을 정확히 고를 수 있음

SQL*Plus조회만 함
SELECT ename, sal, deptno, versions_operation, versions_starttime
  FROM emp
  VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
 WHERE ename = '<ENAME>';

결과 해석: 같은 행의 변경 이력이 여러 줄로 나오고, VERSIONS_OPERATION에 I(입력), U(수정), D(삭제)가, VERSIONS_STARTTIME에 그 변경 시각이 보임
이 시각이나 SCN을 FLASHBACK TABLE ... TO TIMESTAMP나 TO SCN에 넣어 되돌림

SQL*Plus객체 또는 설정을 변경함
ALTER TABLE emp ENABLE ROW MOVEMENT;
FLASHBACK TABLE emp TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '5' MINUTE);
FLASHBACK TABLE emp TO SCN <SCN>;

결과 해석:

SCN(System Change Number)은 데이터베이스에 변경이 일어날 때마다 생기는 번호이고, SCN_TO_TIMESTAMP, TIMESTAMP_TO_SCN으로 서로 바꿀 수 있음

TRUNCATE한 테이블은 Flashback Table로 되돌릴 수 없어 백업받은 테이블로 복구해야 한다고 수업 자료는 설명함

#구문과 옵션 설명

VERSIONS 조회의 범위 시작과 끝은 포함됨
한 버전의 유효 구간은 시작 SCN 이상, 종료 SCN 미만으로 해석함
FLASHBACK TABLE의 TO SCN, TO TIMESTAMP와 휴지통 기반 TO BEFORE DROP은 필요한 저장 정보가 다름

#사용 조건과 주의사항

Flashback Table이 대상 시점까지 가려면 그만큼의 UNDO가 남아 있어야 함
고정 크기 UNDO 테이블스페이스에서는 UNDO_RETENTION이 보장되지 않음(UNDO 공간과 보존)

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기