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. 마무리
데이터 생성 및 삭제와 같이 복구 또한 주의가 필요하고 신중해야 한다고 생각한다.
모든 데이터의 트랜잭션은 중요한 것 같다.
항상 신중하자
반응형
'Dev > DB' 카테고리의 다른 글
[ORACLE] 시퀀스(Sequence) 생성, 변경, 삭제 (0) | 2024.03.18 |
---|---|
[ORACLE] ORA-29861: domain index is marked LOADING/FAILED/UNUSABLE (0) | 2024.02.29 |
[ORACLE] ORA-12170: TNS:Connect timeout occurred (0) | 2023.08.28 |
[ORACLE] ORA-12514: TNS : 리스너가 현재 접속 기술자에 요청된 서비스를 알지 못함 (0) | 2023.08.27 |
[ORACLE] ORA-12541: TNS : 리스너가 없습니다. (2) | 2023.08.27 |