반응형
오라클에서 데이터를 삭제/수정했을 경우, 이전 데이터 조회
현재 시간은 SYSDATE, 하루전은 SYSDATE-1
한시간전 데이터
SELECT * FROM TABLE_NAME
AS OF TIMESTAMP(SYSDATE-(1/24)); -- 한시간전 데이터 조회
10분 전 데이터
SELECT * FROM TABLE_NAME
AS OF TIMESTAMP(SYSDATE-(1/24)/6); -- 10분 전 데이터 조회
1분 전 데이터
SELECT * FROM TABLE_NAME
AS OF TIMESTAMP(SYSDATE-(1/24)/60); -- 1분 전 데이터 조회
특정 날짜/시간 조회
SELECT * FROM TABLE_NAME
AS OF TIMESTAMP(TO_DATE('20190906140000', 'YYYYMMDDHH24MISS')); -- 2019년 9월 6일 2시 데이터 조회
실습 - 운영 혹은 개발 환경에서 특정 테이블의 특정 조건 값을 잘못 삭제 했을 경우 플래시백 쿼리를 이용하여 살려보자
테이블명 : TB_CODE
테이블 생성 스크립트
-- Create table
create table TB_CODE
(
grp_cd varchar2(18 CHAR),
code varchar2(18 CHAR),
code_name varchar2(18 CHAR)
)
;
테이블에 데이터 생성
INSERT INTO TB_CODE (GRP_CD, CODE, CODE_NAME) VALUES ('CD01', 'A', '코드A');
INSERT INTO TB_CODE (GRP_CD, CODE, CODE_NAME) VALUES ('CD01', 'B', '코드B');
INSERT INTO TB_CODE (GRP_CD, CODE, CODE_NAME) VALUES ('CD01', 'C', '코드C');
INSERT INTO TB_CODE (GRP_CD, CODE, CODE_NAME) VALUES ('NAT', 'KR', '한국');
INSERT INTO TB_CODE (GRP_CD, CODE, CODE_NAME) VALUES ('NAT', 'CN', '중국');
INSERT INTO TB_CODE (GRP_CD, CODE, CODE_NAME) VALUES ('NAT', 'JP', '일본');
COMMIT;
실수로 GRP_CD가 NAT인 코드를 삭제 하고 COMMIT 함.
DELETE FROM TB_CODE CD
WHERE CD.GRP_CD = 'NAT';
COMMIT;
조회해보면 GRP_CD가 'NAT'인 데이터는 삭제되었고, 이미 COMMIT 까지 한 상태라 되돌릴 수 없을때 플래시백 쿼리를 이용하여 조회할 수 있고, 조회한 데이터를 TB_CODE 테이블에 입력.
-- TB_CODE 에 GRP_CD='NAT' 인 데이터가 삭제되었음.
SELECT * FROM TB_CODE;
-- 플래시백 쿼리로 조회 시 삭제된 'NAT' 데이터가 조회됨. (여기서는 1분전으로 함)
SELECT * FROM TB_CODE AS OF TIMESTAMP(SYSDATE-(1/24)/60) WHERE GRP_CD = 'NAT';
-- 조회하여 입력
INSERT INTO TB_CODE
SELECT * FROM TB_CODE AS OF TIMESTAMP(SYSDATE-(1/24/60))
WHERE GRP_CD = 'NAT';
-- 데이터를 확인 후 COMMIT;
SELECT * FROM TB_CODE WHERE GRP_CD = 'NAT';
COMMIT;
반응형
'개발 > database' 카테고리의 다른 글
[oracle] 오라클 한글 3byte를 2byte로 변경하여 byte 자르기 (0) | 2021.01.17 |
---|---|
[mssql] 오라클 사용자를 위한 MSSQL 함수 (0) | 2021.01.17 |
[oracle] 오라클 plsql loop sample (0) | 2021.01.17 |
[oracle] 오라클 날짜, 숫자를 원하는 포맷 문자열로 변환 to_char (0) | 2021.01.17 |
[oracle] 오라클 merge into (0) | 2021.01.17 |
댓글