728x90
안녕하세요, 오늘은 오라클 9i Release 2부터 도입된 Flashback 기능에 대해 소개해드리겠습니다. Flashback 기능은 데이터베이스의 과거 데이터를 조회하고 복구할 수 있는 매우 유용한 기능입니다.
Flashback 기능 소개
Flashback 기능은 데이터베이스의 특정 시점으로 되돌아가 데이터를 조회하거나 복구할 수 있는 기능입니다. 이를 통해 실수로 삭제한 데이터를 복구하는 등의 작업이 가능합니다.
1. TIMESTAMP를 이용한 과거 데이터 조회
AS OF TIMESTAMP
구문을 사용하여 특정 시간 또는 시점의 데이터를 조회할 수 있습니다. 예를 들어, 15분 전의 테이블 데이터를 조회하는 쿼리는 다음과 같습니다:
SELECT *
FROM 테이블명 AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '15' MINUTE);
예시
30분 전의 데이터를 조회하고자 할 때는 아래와 같은 쿼리를 사용할 수 있습니다:
SELECT *
FROM COMPANY AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '30' MINUTE)
WHERE CODE = '1234';
2. 조회한 데이터를 삽입 또는 수정
과거 데이터를 조회하여 현재 테이블에 삽입하거나 수정할 수 있습니다.
데이터 삽입
조회한 데이터를 삽입할 때는 다음과 같은 쿼리를 사용합니다:
INSERT INTO 테이블명
(SELECT *
FROM 테이블명 AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '15' MINUTE));
예시
30분 전의 데이터를 삽입하는 예시는 다음과 같습니다:
INSERT INTO COMPANY
(SELECT *
FROM COMPANY AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '30' MINUTE));
데이터 수정
기존 데이터를 과거 데이터로 수정할 때는 다음과 같은 쿼리를 사용할 수 있습니다:
UPDATE 테이블명 A
SET (A컬럼, A컬럼, ...)
= (SELECT B컬럼, B컬럼, ...
FROM (테이블명 AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '15' MINUTE)) B)
WHERE A컬럼 = B컬럼;
예시
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 기능은 데이터베이스 관리에 있어 매우 강력한 도구입니다. 실수로 데이터를 삭제했을 때 유용하게 사용할 수 있으며, 특정 시점의 데이터를 복구하는 데에도 큰 도움이 됩니다. 위의 쿼리들을 활용하여 더 효율적으로 데이터베이스를 관리해보세요.
728x90
'Be Smart > SQL' 카테고리의 다른 글
[Oracle] 데이터 테이블 권한 부여 방법 (3) | 2024.10.02 |
---|---|
[Dbeaver] Oracle DB 추가 시 오류, ORA-12514 리스너에 등록 되지 않았습니다. 오류 (0) | 2024.08.05 |
[오라클] Oracle DB 트리거 생성/예시 및 활용 (0) | 2024.07.15 |
[Oracle] 오라클 DB에서 삭제한 데이터 복구 방법 (0) | 2024.07.09 |
[오라클] 오라클 트리거란? DML 트리거의 사용법과 관리 방법 (0) | 2024.07.04 |
댓글