Oracle 삭제된 테이블 복구하기 (Flashback)



Oracle에서 실수로 DROP한 테이블을 복구하는 방법입니다. Flashback 기능과 RECYCLEBIN을 활용합니다.



1. 휴지통(RECYCLEBIN) 확인



-- 휴지통 내용 조회
SELECT object_name, original_name, type, droptime
FROM recyclebin
ORDER BY droptime DESC;

-- 또는 간단하게
SHOW RECYCLEBIN;


2. Flashback Table 복구



-- 원래 이름으로 복구
FLASHBACK TABLE 테이블명 TO BEFORE DROP;

-- 예시
FLASHBACK TABLE TB_ORDER TO BEFORE DROP;

-- 새 이름으로 복구 (동명 테이블 존재 시)
FLASHBACK TABLE TB_ORDER TO BEFORE DROP RENAME TO TB_ORDER_BACKUP;


3. 휴지통 이름으로 복구



-- 같은 이름의 테이블이 여러 번 삭제된 경우
SELECT object_name, original_name, droptime
FROM recyclebin
WHERE original_name = "TB_ORDER";

-- 특정 버전 복구
FLASHBACK TABLE "BIN$xxxxx==$0" TO BEFORE DROP;


4. 복구 불가능한 경우



-- PURGE로 삭제된 경우 복구 불가
DROP TABLE TB_ORDER PURGE;

-- 휴지통 전체 비우기
PURGE RECYCLEBIN;

-- 특정 테이블만 휴지통에서 삭제
PURGE TABLE TB_ORDER;


5. 휴지통 관련 설정



-- 휴지통 활성화 여부 확인
SHOW PARAMETER recyclebin;

-- 휴지통 비활성화 (세션)
ALTER SESSION SET recyclebin = OFF;

-- 휴지통 비활성화 (시스템)
ALTER SYSTEM SET recyclebin = OFF;

-- DBA 휴지통 조회
SELECT * FROM dba_recyclebin;


6. Flashback Query (데이터 복구)



-- 특정 시점의 데이터 조회
SELECT * FROM TB_ORDER
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL 30 MINUTE);

-- SCN 기준 조회
SELECT * FROM TB_ORDER AS OF SCN 1234567;

-- 복구 쿼리
INSERT INTO TB_ORDER
SELECT * FROM TB_ORDER
AS OF TIMESTAMP TO_TIMESTAMP("2024-01-15 10:00:00", "YYYY-MM-DD HH24:MI:SS")
WHERE order_id = 1001;


7. Flashback 제한사항










상황Flashback 가능 여부
DROP TABLE (PURGE 없이)O
DROP TABLE PURGEX
TRUNCATE TABLEX (Flashback Query로 일부 가능)
DELETE 문O (Flashback Query)
테이블스페이스 삭제X


8. 복구 권한



-- 필요 권한
GRANT FLASHBACK ON 스키마.테이블 TO 사용자;
GRANT FLASHBACK ANY TABLE TO 사용자;

-- DBA가 다른 사용자 테이블 복구 시
FLASHBACK TABLE 스키마.테이블명 TO BEFORE DROP;


주의사항




  • 테이블스페이스 공간 부족 시 자동 PURGE 될 수 있음

  • SYSTEM 테이블스페이스 테이블은 휴지통 미사용

  • 복구 후 인덱스, 트리거 등 확인 필요

  • 정기 백업이 가장 안전한 복구 방법