Database 사용하다가 실수로 Update 나 Delete를 잘못할수도 있다.
Commit을 하였어도 어느 정도의 시간내에서는 시간을 거슬러서 그 시점에서의 Data 상태를 볼수가 있다.
※ 어느 정도의 시간이란 운영중인 DB의 트랜잭션양에 영향을 받기 때문에 그 정도를 가늠하기는 어렵다.
-- 해당 데이터의 10초전 상태를 조회 SELECT * FROM [table_name] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' SECOND) WHERE [column_name] = '_______' |
AS OF TIMESTAMP 문의 위치는 FROM [table_name] 과 WHERE 사이에 위치한다.
-- 해당 데이터의 10분전 상태를 조회 SELECT * FROM [table_name] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE) WHERE [column_name] = '_______' |
-- 해당 데이터의 1시간전 상태를 조회 SELECT * FROM [table_name] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' HOUR) WHERE [column_name] = '_______' |
-- 해당 데이터의 1일전 상태를 조회 SELECT * FROM [table_name] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' DAY) WHERE [column_name] = '_______' |
또 다른 사용방법은 원하는 시간으로 바로 설정하여 조회할 수 있다.
-- 지정한 시간 시점에서의 데이터 상태를 조회 SELECT * FROM [table_name] AS OF TIMESTAMP TO_TIMESTAMP('2016-11-25 10:39:58', 'YYYY-MM-DD HH24:MI:SS') WHERE [column_name] = '_______' |
* 위의 기본문법으로 아래와 같이 응용을 해볼수도 있다.
- 동일한 데이터를 시간차를 두고 비교를 하는 형식으로도 써보았다.
두 시간 사이의 데이터 비교도 유용하게 써먹어 본적이 있다.
SELECT .... AS OF TIMESTAMP TO_TIMESTAMP('2016-11-25 10:55:58', 'YYYY-MM-DD HH24:MI:SS') WHER.... Union All SELECT .... AS OF TIMESTAMP TO_TIMESTAMP('2016-11-25 11:05:10', 'YYYY-MM-DD HH24:MI:SS') WHER.... |
- 조회된 데이터를 근거로 현재의 데이터를 다시 Update하거나,
삭제된 경우라면
INSERT INTO [table_name] SELECT * FROM [table_name] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' SECOND) WHERE [column_name] = '_______' |
이런 형식으로 데이터를 복구할 수 있다.
'Oracle' 카테고리의 다른 글
[Oracle] 앞,뒤 행의 값을 알아볼 수 있는 분석 함수 Lag와 Lead (0) | 2017.06.23 |
---|---|
Oracle v$session 에 IP 정보 표시하기 (0) | 2016.12.29 |
[Oracle]merge문을 이용하여 WINDOW FUNCTION 에서 나온 자료를 Update 데이터로 반영하기 (0) | 2014.12.24 |
Pivot in Oracle(11g) (0) | 2014.12.16 |
Read Only Table(11g) (0) | 2014.12.16 |