오라클 9i Release 2부터 Flashback이라는 기능이 생겼는데, 일종의 과거데이터라고 생각하면 된다.
테이블 데이터의 과거기록을 조회할 수 있는 기능으로
데이터를 실수로 삭제할 경우 특정시간 또는 시점으로 되돌릴 수 있는 기능이다.
AS OF TIMESTAMP 구문을 사용하여 삭제 전의 데이터를 조회하여 복구할 수 있다.
1. TIMESTAMP 조회
SELECT *
FROM [테이블명] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '15' MINUTE) //15분 전 테이블데이터 조회
ex)
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)) //15분 전 데이터
ex)
INSERT INTO COMPANY
(SELECT *
FROM COMPANY AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL'30'MINUTE)) //30분 전 데이터
//수정
UPDATE [테이블명 A]
SET ([A컬럼], [A컬럼], ... )
= (SELECT [B컬럼], [B컬럼], ...
FROM ([테이블명] AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL'15'MINUTE)) B)
WHERE [A컬럼] = [B컬럼]
ex)
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';
ALL_TAB_COLUMS - 모든 테이블에서 원하는 컬럼명 찾기
SELECT TABLE_NAME, COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE COLUMN_NAME LIKE '%컬렁명%'
'DevOps' 카테고리의 다른 글
[Redis] 레디스 주요 명령어 모음 (0) | 2023.07.05 |
---|---|
[Docker] Windows에 Docker Desktop설치하기 (0) | 2023.06.07 |
[Oracle] 오라클DB 테이블 스페이스 관련 명령어 (0) | 2022.08.19 |
[Linux] 프로세스 관련 명령어 (0) | 2022.07.28 |
[Linux] 환경변수 관련 명령어 (0) | 2022.07.18 |