오라클을 사용하는 어플리케이션에서 사용자에 의한 데이터가 삭제되었거나
시스템 운영자의 Migration 또는 데이터 보정작업중에 실수로 테이블에 데이터를 삭제 해버리는 경우가 발생합니다
이럴 경우, 처음에 조금 당황스러운데 오라클에 데이터를 복구하는 방법이 있습니다
물론, 데이터베이스 구성과 사용 가능한 백업에 따라서 다양하지만 일반적인 삭제된 데이터를
복구하는 방법에 대해 공유합니다
TIMESTAMP ( FLASHBACK QUERY )
Oracle에 Flashback Query 기능이 활성화 되어 있다면 ‘AS OF TIMESTAMP’ 절을 사용하여 특정 시점의 데이터를 조회할 수 있습니다
( ORACLE 9i 이상부터 지원 )
SELECT * FROM STOCK_TRADE_DAILY AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' SECOND) -- 10초전 데이터
SELECT * FROM STOCK_TRADE_DAILY AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE) -- 10분전 데이터
SELECT * FROM STOCK_TRADE_DAILY AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '1' HOUR) -- 1시간전 데이터
SELECT * FROM STOCK_TRADE_DAILY AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '1' DAY) -- 1일전 데이터
SELECT * FROM STOCK_TRADE_DAILY AS OF TIMESTAMP(TO_DATE('20230717160000', 'YYYYMMDDHH24MISS')); -- 특정시간 기준으로 데이터 조회
SELECT * FROM STOCK_TRADE_DAILY AS OF TIMESTAMP TO_TIMESTAMP('2023-07-17 16:00:00', 'YYYY-MM-DD HH24:MI:SS')
보통 그 시간대로 복구를 원하는 경우가 많으므로 UNION ALL 구문을 통해 어떤값이 변경되었는지 확인하거나
SELECT '현재 데이터' AS GUBUN, T1.* FROM STOCK_TRADE_DAILY T1
WHERE TRADE_DATE = '20230717' AND MARKET = '005930'
UNION ALL
SELECT '1시간전 데이터' AS GUBUN, T2.* FROM STOCK_TRADE_DAILY AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '1' HOUR) T2
WHERE TRADE_DATE = '20230717' AND MARKET = '005930'
INSERT문을 사용하여 삭제된 데이터를 복구하면 됩니다
INSERT INTO STOCK_TRADE_DAILY
SELECT * FROM STOCK_TRADE_DAILY AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '1' HOUR) T2
WHERE TRADE_DATE = '20230717' AND MARKET = '005930'
FLASHBACK TABLE
FLASHBACK TABLE 기능이 활성화 되어있다면, 특정 시점으로 테이블 복구가 가능합니다
이 작업은 권한과 추가 공간이 필요합니다
FLASHBACK TABLE STOCK_TRADE_BACKUP TO TIMESTAMP(SYSTIMESTAMP-INTERVAL '1' HOUR)
만약 FLASHBACK 기능이 활성화 하려면 일단 데이터베이스를 ‘ARCHIVELOG’ 모드가 활성화 되어 있어야 합니다
먼저 ARCHIVELOG 모드 활성화 여부를 확인 하는 SQL은 다음과 같습니다
SELECT LOG_MODE FROM V$DATABASE -- ARCHIVELOG or NOARCHIVELOG
FLASHBACK 기능 활성화하는 부분은 다음번에 알아보도록 하겠습니다
'너알나알 > 오라클[Oracle]' 카테고리의 다른 글
[오라클]오라클 데이터베이스 버전확인 (0) | 2024.03.20 |
---|---|
[오라클]N개의 ROW의 값을 1개의 ROW로 조회 (1) | 2024.03.18 |
[오라클]오라클을 만든 프로그래밍 언어 (0) | 2024.03.13 |
[오라클]오라클, 그리고 역사에 대해 (0) | 2024.03.13 |
[오라클]날짜 한글+영문 표기 (0) | 2024.03.13 |
댓글