728x90
반응형

ORACLE DB에서 Timestamp를 이용하여 특정 시간이나 일 전의 데이터를 복구하는 방법이다.

해당 기능은 데이터 손상이나 실수로 삭제된 데이터 복구할 때 빠르게 활용 가능하다.

 

1. Timestamp 사용법

ORACLE에서는 Timestamp 데이터 형식을 사용하여 정확한 시간을 나타낼 수 있다.

Timestamp 형식은 'YYYY-MM-DD HH24:MI:SS.FF'와 같은 형태로 표현된다.

 

 

2. 특정 시간의 데이터 복구

--날짜를 이용한 Timestamp

--2024년 1월 17일 09시 데이터 조회
SELECT *
	FROM table_name
	AS OF TIMESTAMP (TO_DATE('2024-01-17 09:00:00', 'YYYY-MM-DD HH24:MI:SS'))
	WHERE ~~~
;

--2024년 1월 17일 09시 삭제된 데이터 복구
INSERT INTO table_name
(
	SELECT *
		FROM table_name
		AS OF TIMESTAMP (TO_DATE('2024-01-17 09:00:00', 'YYYY-MM-DD HH24:MI:SS'))
		WHERE ~~~
)
;

--2024년 1월 17일 09시 변경된 데이터 복구
UPDATE table_name A 
SET A.col_name = 
(
	SELECT col_name
		FROM table_name
		AS OF TIMESTAMP (TO_DATE('2024-01-17 09:00:00', 'YYYY-MM-DD HH24:MI:SS'))
		WHERE col_name = A.col_name
        AND ~~~~
)
;

 

 

 

3. 일 전 데이터의 복구

--현재 시간 이용한 timestamp (단위: SECOND, MINUTE, HOUR, DAY)

--10분 전 데이터 조회
SELECT *
	FROM TABLE_NAME AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE);

--1일 전 데이터 조회
SELECT *
	FROM TABLE_NAME AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' DAY);

---------------------------------------------------------------------

--10분 전 삭제된 데이터 복구
INSERT INTO TABLE_NAME
(
	SELECT *
  		FROM TABLE_NAME AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE)
  		WHERE ~~
)

--1일 전 삭제된 데이터 복구
INSERT INTO TABLE_NAME
(
	SELECT *
  		FROM TABLE_NAME AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' DAY)
  		WHERE ~~
)

---------------------------------------------------------------------
--10분 전 변경된 데이터 복구
UPDATE table_name A 
SET A.col_name = 
(
	SELECT col_name
		FROM table_name
		AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE)
		WHERE col_name = A.col_name
        AND ~~~~
)
;

--1일 전 변경된 데이터 복구
UPDATE table_name A 
SET A.col_name = 
(
	SELECT col_name
		FROM table_name
		AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' DAY)
		WHERE col_name = A.col_name
        AND ~~~~
)
;

 

 

4. 예시

예를 들어, 'table_A' 테이블에서 2024년 1월 10일부터 1월 15일까지의 데이터를 복구하고 싶다면 다음과 같은 쿼리를 사용할 수 있다.

SELECT *
	FROM TABLE_NAME
	WHERE COL_NAME 
		BETWEEN TO_TIMESTAMP('2024-01-10 00:00:00', 'YYYY-MM-DD HH24:MI:SS') 
		AND TO_TIMESTAMP('2024-01-15 23:59:59', 'YYYY-MM-DD HH24:MI:SS');

 

 

5. 마무리

데이터 생성 및 삭제와 같이 복구 또한 주의가 필요하고 신중해야 한다고 생각한다.

모든 데이터의 트랜잭션은 중요한 것 같다.

항상 신중하자


 

728x90
반응형