ORACLE TIMESTAMP 복구 기능 정리
IT 계통에서 일을 하시는 분들은 실수로도 혹은 요청으로든 등록된 데이터를 삭제한 후 복구 해야 하는 경우가 간혹 발생합니다.
저도 오랜만에 클라이언트의 업무 미숙으로 잘못 요청된 내용때문에 삭제한 데이터들을 복구 해야한다는 연락을 받게 됐습니다.
ORACLE 을 사용하고 있기에 'TIMESTAMP 를 이용해서 복구해 주면 되겠구나' 라는 생각을 했지만.. 이게 또 대충 어떤 방식인지는 알지만 정작 사용하려고 하니, 기억이 가물가물해서 또 다시 인터넷을 검색하는 저의 모습을 보면서 차라리 블로그에 정리해서 인터넷 검색하지말고 참고하고, 저 같이 사용 방법은 알지만 문법등이 기억 안나시는 분들을 위해 간단하게 TIMESTAMP를 정리해 공유해 보기로 했습니다. (ㅎ_ㅎ)!
우선 TIMESTAMP 기능은
ORACLE 9i 이상부터 지원 합니다.
9i가 나온게 지금부터 10년 이상은 지나서 ORACLE 사용하는 프로젝트들은 거의 9i 버전 이상은 사용하고 있을테니 버전은 문제 없을것으로 생각됩니다.
단지, TIMESTAMP가 무적은 아니라 삭제된 모든 데이터를 조회하지는 못합니다.
ORACLE DB에 설정된 시간에 따라서 삭제된 시간이 지난 데이터는 조회가 되지않아 복구가 불가능합니다.
즉, 삭제된 데이터의 골드 타임이 존재 하는데요. 각 사이트별 골드 타임은 시간 나실때 한번 확인해 보시는것도 나쁘지 않을것 같습니다.
자, 이제 TIMESTAMP 사용법을 간단하게 정리해 보도록 하겠습니다.
TIMESTAMP 시간 단위는 SECOND, MINUT, HOUR, DAY 사용할 수 있습니다.
기준은 현 시점이고 구성하는 단위와 기간을 설정하여 그 시점까지의 데이터가 확인 가능합니다.
물론, 삭제된 데이터는 물론이고 기존에 있던 데이터들이 다 조회 되니 특정 조건을 걸어서 확인 하시는걸 추천드립니다.
예를 들면
10초전 데이터 조회
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL 10 SECOND)
10분전 데이터 조회
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL 10 MINUTE)
1시간전 데이터 조회
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL 1 HOUR)
1일전 데이터 조회
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL 1 DAY)
눈을 보호하기 위해 각각의 조회 쿼리에 조건을 걸어서 사용해 보아요~
WHERE 컬럼 = '조건내용';
보통은 삭제 쿼리를 돌릴정도면 조건문을 꼭! 꼭! 넣기 때문에 TIMESTAMP로 복구 진행할때 삭제 시점과 삭제 조건 키 데이터만 알면 문제 없이 처리되지만
간혹!? 삭제한 내용이 뭔지를 모르는 분들이 존재하기도 합니다.
막, 입사한 신입분들인 경우, 가끔 벌어지기에.. 삭제 시점! 그때와 지금의 데이터를 비교하여 볼수 있는 방법도 TIMESTAMP 에서는 제공 합니다. 이래서 ORACLE이 그리도 비싼가 봅니다.
그 방법은 TIMESTAMP에서 과거 시점 데이터와 현재 시점 데이터를 비교해서 볼수 있도록 UNION ALL 로 묶어서 보는 방법인데 내용을 보자면
TIMESTAMP로 현재 데이터와 10분전 데이터 비교
SELECT * FROM 테이블 WHERE 컬럼 = '조건내용'
UNION ALL
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL 10 MINUTE) WHERE 컬럼 = '조건내용';
드디어, 삭제된 데이터를 확인해서 어떤게 지워졌는지 확인 했습니다. 그럼 다시금 데이터를 원상태로 돌려놔야 할텐데요.
설마.. 삭제된 데이터를 캡쳐 떠서 수공업으로 한땀 한땀 집어 넣기에는 시간이 아깝지 않겠습니까?
그래서 부가적으로 TIMESTAMP SELECT INSERT, TIMESTAMP SELECT UPDATE 를 이용하는 방법도 작성해 보겠습니다.
물론.. 저도 할때 마다 기억이 잘 나지 않기는 합니다.;;
10분전 데이터 조회 TIMESTAMP SELECT INSERT 방식
INSERT INTO 테이블
SELECT * FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL 10 MINUTE) WHERE 컬럼 = 조건내용;
10분전 데이터 조회 TIMESTAMP SELECT UPDATE 방식
UPDATE 테이블 A
SET A.변경내용컬럼 = (SELECT B.변경내용컬럼 FROM 테이블 B AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL 10 MINUTE) WHERE A.조건내용컬럼= B.조건내용컬럼
AND B.조건내용컬럼 = '조건내용')
WHERE A.조건내용컬럼 = '조건내용';
앞으로도 이것저것 잘 잊어버리는 기억력 때문에 시작한 블로그지만.. 하나 하나 좋은 정보를 정리해서 필요한 여러 사람과 함게 기억하고 알아가는 기회가 되도록 노력하겠습니다.
'굿Tip존' 카테고리의 다른 글
조선 시대 왕릉과 그 주인 (0) | 2022.09.06 |
---|---|
비타민 E 효능 효과 (0) | 2021.07.27 |
착오송금 반환지원 제도 알아보기!! (0) | 2021.06.19 |
강아지 카밍 시그널 (0) | 2021.02.02 |
아스피린 효능과 부작용 (0) | 2021.01.26 |