728x90
Oracle FlashBack
오라클의 Flashback Query 기능에서 사용하는 과거 데이터는 UNDO 영역에 저장되어 있다.
- UNDO 영역이란?
오라클 데이터베이스는 모든 트랜잭션에 대해 변경 이전의 데이터(원래 값을) UNDO 세그먼트에 저장한다. 트랜잭션이 완료되면 해당 데이터는 일정 시간 동안 UNDO 테이블스페이스에 남아 있게 된다.
- 트랜잭션 롤백 (Rollback) : 트랜잭션을 취소할 때
- 일관된 읽기(Consistent Read) : 다른 세션이 트랜잭션을 실행 중일 때, 해당 트랜잭션이 완료되지 않은 데이터를 다른 사용자에게는 보여주지 않고 이전 상태의 데이터를 제공
- Flashback Query : 과거 시점으로 돌아가 데이터를 조회할 때
UNDO 테이블스페이스 설정 및 상태 확인
-- TABLESPACE_NAME : 테이블스페이스의 이름
-- STATUS : 테이블스페이스의 현재 상태 : ONLINE(테이블스페이스가 사용 가능한 상태), OFFLINE(불가능한 상태), READ ONLY(읽기 전용 상태)
-- CONTENTS : 테이블스페이스에 저장된 데이터의 유형 : PERMANENT(영구 데이터를 저장), TEMPORARY(임시 데이터를 저장), UNDO(UNDO 데이터를 저장)
SELECT TABLESPACE_NAME, STATUS, CONTENTS, RETENTION
FROM DBA_TABLESPACES
WHERE CONTENTS = 'UNDO';
-- undo_management : AUTO -> 자동으로 UNDO 테이블스페이스를 관리
-- undo_tablespace : UNDOTBS1 -> UNDO 데이터가 저장되는 테이블스페이스의 이름
-- undo_retention : 900 -> UNDO 데이터가 보존되는 최소 시간을 초 단위로 설정하는 파라미터 (현재는 900초)
SELECT NAME, VALUE
FROM V$PARAMETER
WHERE NAME LIKE 'undo%';
- Flashback Query
-- 특정 시점의 데이터 상태를 조회
SELECT *
FROM TABLE_NAME AS OF TIMESTAMP(TO_DATE('2024-11-11 13:30:00', 'YYYY-MM-DD HH24:MI:SS')) -- 특정 날짜와 시간의 데이터를 조회
-- FROM TABLE_NAME AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '30' MINUTE) -- 현재 시간에서 30분 전 시점의 데이터를 조회 (SECOND, MINUTE, HOUR, DAY 사용 가능)
-- 조건을 설정하여 원하는 데이터만 조회 가능
-- WHERE 1=1
-- AND YEAR = '2024'
- Flashback Table
-- 테이블의 데이터를 과거의 특정 시점으로 복구 (현재에서 30분 전 시점의 데이터로 복구)
FLASHBACK TABLE TABLE_NAME TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '30' MINUTE);
-- [ORA-08189] : 행 이동이 사용으로 설정되지 않았으므로 테이블을 플래시백할 수 없음
-- 플래시백 테이블 기능을 사용하려면 행 이동을 활성화해야 한다.
-- 행이동 : 테이블의 행이 변경되었을 때 다른 블록으로 이동할 수 있도록 허용하는 설정
-- 테이블의 행이 변경될 가능성이 있음을 허용하기 때문에, 데이터가 특정 블록에서 다른 블록으로 이동할 수 있다.
-- 데이터 무결성에 영향을 주지는 않지만, 데이터의 물리적 위치가 변경될 수 있음을 인지해야 한다.
ALTER TABLE TABLE_NAME ENABLE ROW MOVEMENT;
-- 행 이동 비활성화
ALTER TABLE TABLE_NAME DISABLE ROW MOVEMENT;
- Flashback Drop
-- 실수로 삭제된 테이블을 복구
-- Oracle은 테이블이 삭제될 때 Recycle Bin에 테이블의 메타데이터와 데이터를 유지하므로 플래시백 드롭 명령을 통해 이를 복구할 수 있다.
FLASHBACK TABLE TABLE_NAME TO BEFORE DROP;
- Flashback Database
데이터베이스 전체를 특정 시점으로 되돌리는 기능으로, 주로 데이터 손상이나 대규모의 잘못된 트랜잭션이 발생했을 때 사용
단순 SQL 쿼리로 수행되지 않으며, 데이터베이스 복구 작업의 일환으로 SQL*Plus나 RMAN(Recovery Manager) 명령어를 통해 수행
아카이브로그, RMAN 등 알아야 할 부분이 더 많아 여기서 다룰 내용은 아니다.
728x90
반응형
'DB' 카테고리의 다른 글
| [Oracle] UNDO 테이블스페이스 조회, 생성, 삭제, 변경 (0) | 2025.01.08 |
|---|---|
| [Oracle] sql 파일, 스크립트 자동 실행 (sqlplus) (0) | 2024.10.04 |
| [Oracle] Oracle Database 21c 윈도우 설치 및 계정 생성, 권한 부여 (0) | 2024.10.04 |