본문 바로가기
Be Smart/SQL

[Oracle] 오라클 DB에서 삭제한 데이터 복구 방법

by 반월하 2024. 7. 9.
728x90


오라클 DB에서 삭제한 데이터 복구 방법

데이터베이스를 운영하다 보면 실수로 데이터를 삭제하는 상황이 발생할 수 있습니다. 다행히도 오라클 9i Release 2부터 제공되는 Flashback 기능을 사용하면 특정 시점으로 데이터를 되돌릴 수 있습니다. 이번 포스팅에서는 Flashback 기능을 이용해 삭제한 데이터를 복구하는 방법에 대해 알아보겠습니다.

Flashback 기능이란?

Flashback은 오라클 DB에서 제공하는 기능으로, 테이블 데이터의 과거 기록을 조회할 수 있습니다. 이를 통해 특정 시간 또는 시점으로 데이터를 되돌릴 수 있으며, 실수로 데이터를 삭제했을 때 매우 유용하게 사용됩니다.

AS OF TIMESTAMP 구문을 활용한 데이터 조회

AS OF TIMESTAMP 구문을 사용하면 특정 시점의 데이터를 조회할 수 있습니다. 예를 들어, 15분 전의 테이블 데이터를 조회하려면 다음과 같이 쿼리를 작성합니다.

SELECT *
FROM [테이블명] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '15' MINUTE);

아래 예시는 30분 전의 COMPANY 테이블 데이터를 조회하는 쿼리입니다.

SELECT *
FROM COMPANY AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '30' MINUTE)
WHERE CODE = '1234';

조회한 데이터를 삽입 또는 수정

조회한 데이터를 현재 테이블에 삽입하거나 수정할 수 있습니다.

삽입 예시:

INSERT INTO COMPANY
(SELECT *
FROM COMPANY AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '30' MINUTE));

수정 예시:

UPDATE COMPANY A
SET (A.NAME, A.ADDRESS) = 
(SELECT B.NAME, B.ADDRESS
FROM (COMPANY AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '15' MINUTE)) B)
WHERE A.CODE = B.CODE;

모든 테이블에서 데이터 찾기

특정 값을 포함하는 모든 테이블의 데이터를 찾기 위한 쿼리문은 다음과 같습니다.

SELECT 'SELECT ''' || A.TABLE_NAME || ''', '''
|| A.COLUMN_NAME || ''', COUNT(*) FROM '
|| A.TABLE_NAME || ' WHERE '
|| A.COLUMN_NAME || ' LIKE ''%값%'' UNION '
FROM USER_TAB_COLUMNS A
LEFT OUTER JOIN (SELECT TABLE_NAME FROM USER_TABLES WHERE NUM_ROWS > 0) B
ON A.TABLE_NAME = B.TABLE_NAME
WHERE A.DATA_TYPE = 'VARCHAR2';

특정 컬럼명을 가진 모든 테이블 찾기

특정 컬럼명을 가진 모든 테이블을 찾기 위한 쿼리문은 다음과 같습니다.

SELECT TABLE_NAME, COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE COLUMN_NAME LIKE '%컬럼명%';

마무리

오라클의 Flashback 기능을 활용하면 실수로 삭제한 데이터를 쉽게 복구할 수 있습니다. AS OF TIMESTAMP 구문을 사용하여 특정 시점의 데이터를 조회하고, 이를 삽입 또는 수정하여 복구 작업을 수행할 수 있습니다. 이 기능을 잘 활용하여 데이터베이스 운영 중 발생할 수 있는 실수를 최소화하시길 바랍니다.

728x90

댓글