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
'Be Smart > SQL' 카테고리의 다른 글
[Oracle] 오라클 DB DELETE 후 Commit 한 데이터 복구 (0) | 2024.07.15 |
---|---|
[오라클] Oracle DB 트리거 생성/예시 및 활용 (0) | 2024.07.15 |
[오라클] 오라클 트리거란? DML 트리거의 사용법과 관리 방법 (0) | 2024.07.04 |
[오라클] PL/SQL 패키지: 이해와 활용 방법 (0) | 2024.07.03 |
[Oracle] 오라클 함수와 프로시저의 차이점 및 함수 생성과 사용 방법 (0) | 2024.07.02 |
댓글