- 오라클 삭제한 데이터 복구하기 : 타임스탬프(TIMESTAMP) 사용법
DB를 잘못 수정하거나 삭제한 뒤에 commit을 한 경우, 오라클은 TIMESTAMP로 데이터를 복구할 수 있다.
→ DB 설정에 따라 시간이 오래지난 데이터는 TIMESTAMP로 복구가 불가능할 수 있음
-- 10초전 데이터 조회
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' SECOND)
WHERE 컬럼 = 'A'; -- 조건문 사용 가능
-- 10분전 데이터 조회
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE)
-- 5시간전 데이터 조회
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '5' HOUR)
-- 3일전 데이터 조회
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '3' DAY)
-- 특정시간 기준으로 데이터 조회
SELECT * FROM USER_TB AS OF TIMESTAMP(TO_DATE('20230317 11:30:00', 'YYYYMMDD HH24:MI:SS'));
UNION ALL을 사용하면 변경 전 데이터와 변경 후 데이터를 비교하기 쉬워진다.
--현재 데이터와 10분전 데이터 비교
SELECT * FROM STUDENT where NAME = '예르미'
UNION ALL
SELECT * FROM STUDENT AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) where NAME = '예르미';
아래와 같이 TIMESTAMP를 활용하여 변경된 데이터를 복구할 수 있다.
-- select insert를 이용하여 삭제된 데이터 처리
INSERT INTO STUDENT
SELECT * FROM STUDENT AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) where NAME = '예르미';
-- select update를 이용하여 변경된 데이터 처리
UPDATE STUDENT a
SET
a.GOODS_QTY = (
SELECT B.GOODS_QTY
FROM STUDENT B AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE)
where a.NAME = b.NAME and b.NAME = '예르미'
)
where NAME = '예르미';