반응형
TIMESTAMP를 활용하여 특정 시간대의 데이터로 테이블 데이터를 복구하는 방법에 대해 정리해보았다.
사용 조건
oracle 9i 이상부터 지원
DB의 설정에 따라서 시간이 오래지난 데이터는 TIMESTAMP로 복구가 불가능
사용 방법
단위는 초, 분, 시간, 날짜 로 지정해서 사용 가능
SYSTIMESTAMP 에서 설정한 시간을 입력하여 데이터를 보여주는 원리
-- 10초전 데이터 조회
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' SECOND)
WHERE 컬럼 = 'A'; -- 필요에 따라서 조건문
-- 10분전 데이터 조회
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE)
-- 3시간전 데이터 조회
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '3' HOUR)
-- 1일전 데이터 조회
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '1' DAY)
-- 특정시간 기준으로 데이터 조회
SELECT * FROM USER_TB AS OF TIMESTAMP(TO_DATE('20200605000000', 'YYYYMMDDHH24MISS'));
수정된 값, 현재와 비교
어떤 데이터가 변경이 되었는지 확인할 경우, 아래와 같이 비교하시면서 보면 확인하기가 편함.
현재 데이터와 비교할 데이터를 UNION ALL로 묶어서 확인 가능
-- GOODS_NM 이 선풍기인 데이터를 현재 데이터와 10분전 데이터 비교
SELECT * FROM TEMP_1018 where GOODS_NM = '선풍기'
UNION ALL
SELECT * FROM TEMP_1018 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) where GOODS_NM = '선풍기';
-- 10분전에는 GOODS_QTY 가 77개 인것을 확인
특정 시간대의 데이터로 INSERT | UPDATE
-- select insert 를 이용하여 삭제된 데이터 처리
INSERT INTO TEMP_1018
SELECT * FROM TEMP_1018 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) where GOODS_NM = '선풍기';
-- select update 를 이용하여 변경된 데이터 처리
UPDATE TEMP_1018 a
SET
a.GOODS_QTY = (SELECT B.GOODS_QTY FROM TEMP_1018 B AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) where a.GOODS_NM = b.GOODS_NM and b.GOODS_NM = '선풍기')
WHERE a.GOODS_NM ='선풍기'
해당 게시글은 아래 링크의 블로그 포스팅을 참고하였다.
반응형
'DBMS' 카테고리의 다른 글
[JOIN] JOIN문 (0) | 2025.01.09 |
---|---|
[TIBERO] TBstudio 설치하기 :TBadmin (0) | 2022.09.16 |
[ORACLE/TIBERO] 함수 (0) | 2022.08.18 |
[DBeaver] Tibero 연결 (0) | 2022.07.05 |
[MySQL] 설치 & 이관작업 (0) | 2022.02.03 |