편집 요약 없음 |
|||
| (같은 사용자의 중간 판 3개는 보이지 않습니다) | |||
| 19번째 줄: | 19번째 줄: | ||
---- | ---- | ||
=== 복구 가능한 시간을 확인 하는법 === | === 복구 가능한 시간을 확인 하는법 === | ||
# UNDO_RETENTION 파라미터 확인 (1차 판단 기준) | :::# UNDO_RETENTION 파라미터 확인 (1차 판단 기준) | ||
<source lang=sql> | ::::<source lang=sql> | ||
-- 현재 설정된 목표 보존 시간(초) 확인 | -- 현재 설정된 목표 보존 시간(초) 확인 | ||
SHOW PARAMETER UNDO_RETENTION; | SHOW PARAMETER UNDO_RETENTION; | ||
| 29번째 줄: | 29번째 줄: | ||
-- 예: 900 (초) = 15분 | -- 예: 900 (초) = 15분 | ||
</source> | </source> | ||
:* 중요: 이 값은 "목표(target)"일 뿐, 보장(guarantee)이 아닙니다. 실제로는 UNDO 테이블스페이스 공간이 부족하면 이 값보다 짧게 유지될 수 있습니다. | :::* 중요: 이 값은 "목표(target)"일 뿐, 보장(guarantee)이 아닙니다. 실제로는 UNDO 테이블스페이스 공간이 부족하면 이 값보다 짧게 유지될 수 있습니다. | ||
---- | |||
=== Guarantee 여부 확인 (매우 중요) === | |||
:::<source lang=sql> | |||
SELECT tablespace_name, retention, contents, status | |||
FROM dba_tablespaces | |||
WHERE tablespace_name = ( | |||
SELECT UPPER(value) FROM v$parameter WHERE name = 'undo_tablespace' | |||
); | |||
</source> | |||
:::*RETENTION 컬럼 값: | |||
- GUARANTEE → UNDO_RETENTION 시간을 반드시 보장 (DML 실패 위험 감수) | |||
- NOGUARANTEE → 공간 부족 시 오래된 UNDO 우선 재사용 (기본값) | |||
-- GUARANTEE로 변경 (운영 영향 주의: 공간부족 시 트랜잭션 실패 가능) | |||
ALTER TABLESPACE undotbs1 RETENTION GUARANTEE; | |||
=== 실제 확보된 UNDO 보존 이력 확인 (핵심) === | |||
파라미터 설정값이 아니라 실제로 시스템이 유지해온 이력을 확인하는 것이 훨씬 정확합니다. | |||
<source lang=sql> | |||
-- ============================================ | |||
-- V$UNDOSTAT: 10분 단위로 실제 통계 기록 (최대 4일치 보관) | |||
-- ============================================ | |||
SELECT | |||
TO_CHAR(begin_time, 'YYYY-MM-DD HH24:MI:SS') AS begin_time, | |||
TO_CHAR(end_time, 'YYYY-MM-DD HH24:MI:SS') AS end_time, | |||
undoblks, | |||
txncount, | |||
maxquerylen, -- 이 구간 중 실행된 최장 쿼리 길이(초) | |||
maxqueryid, | |||
tuned_undoretention -- 시스템이 실제로 튜닝한 보존시간(초) | |||
FROM v$undostat | |||
ORDER BY end_time DESC; | |||
</source> | |||
=== 실질적으로 가장 중요한 지표: 전체 데이터의 최고(最古) 시점 === | |||
<source lang=sql> | |||
-- v$undostat에 기록된 가장 오래된 시점 = 통계상 조회 가능한 하한선의 근사치 | |||
SELECT MIN(begin_time) AS oldest_stat_time, | |||
SYSDATE - MIN(begin_time) AS "간격(일 단위 소수)", | |||
(SYSDATE - MIN(begin_time)) * 24 AS "약 몇 시간 전까지" | |||
FROM v$undostat; | |||
</source> | |||
* 주의: 이건 "통계가 기록된 범위"일 뿐이며, 실제 UNDO 데이터가 남아있는지는 별도 확인이 필요합니다 (아래 4번 참고). | |||
2026년 9월 8일 (화) 11:21 기준 최신판
FLASHBACK
플래쉬백 개요
플래쉬백 항목별 원리
Flashback 기술별 근본 원리 차이 ├── Flashback Query / Flashback Table │ └── UNDO 세그먼트 기반 → UNDO_RETENTION + UNDO 공간에 의존 │ ├── Flashback Drop (Recycle Bin) │ └── 시간 무관, 공간 압박 시 자동 purge → "몇 시간"이라는 개념 자체가 없음 │ ├── Flashback Database │ └── Flashback Log 기반 (별도 로그) → DB_FLASHBACK_RETENTION_TARGET │ └── Flashback Data Archive (FDA) └── 별도 아카이브 테이블스페이스 → 설정한 정책대로 (년 단위도 가능)
복구 가능한 시간을 확인 하는법
- UNDO_RETENTION 파라미터 확인 (1차 판단 기준)
-- 현재 설정된 목표 보존 시간(초) 확인 SHOW PARAMETER UNDO_RETENTION; SELECT name, value FROM v$parameter WHERE name = 'undo_retention'; -- 예: 900 (초) = 15분
- 중요: 이 값은 "목표(target)"일 뿐, 보장(guarantee)이 아닙니다. 실제로는 UNDO 테이블스페이스 공간이 부족하면 이 값보다 짧게 유지될 수 있습니다.
Guarantee 여부 확인 (매우 중요)
SELECT tablespace_name, retention, contents, status FROM dba_tablespaces WHERE tablespace_name = ( SELECT UPPER(value) FROM v$parameter WHERE name = 'undo_tablespace' );
- RETENTION 컬럼 값:
- GUARANTEE → UNDO_RETENTION 시간을 반드시 보장 (DML 실패 위험 감수) - NOGUARANTEE → 공간 부족 시 오래된 UNDO 우선 재사용 (기본값)
-- GUARANTEE로 변경 (운영 영향 주의: 공간부족 시 트랜잭션 실패 가능) ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;
실제 확보된 UNDO 보존 이력 확인 (핵심)
파라미터 설정값이 아니라 실제로 시스템이 유지해온 이력을 확인하는 것이 훨씬 정확합니다.
-- ============================================
-- V$UNDOSTAT: 10분 단위로 실제 통계 기록 (최대 4일치 보관)
-- ============================================
SELECT
TO_CHAR(begin_time, 'YYYY-MM-DD HH24:MI:SS') AS begin_time,
TO_CHAR(end_time, 'YYYY-MM-DD HH24:MI:SS') AS end_time,
undoblks,
txncount,
maxquerylen, -- 이 구간 중 실행된 최장 쿼리 길이(초)
maxqueryid,
tuned_undoretention -- 시스템이 실제로 튜닝한 보존시간(초)
FROM v$undostat
ORDER BY end_time DESC;
실질적으로 가장 중요한 지표: 전체 데이터의 최고(最古) 시점
-- v$undostat에 기록된 가장 오래된 시점 = 통계상 조회 가능한 하한선의 근사치
SELECT MIN(begin_time) AS oldest_stat_time,
SYSDATE - MIN(begin_time) AS "간격(일 단위 소수)",
(SYSDATE - MIN(begin_time)) * 24 AS "약 몇 시간 전까지"
FROM v$undostat;
- 주의: 이건 "통계가 기록된 범위"일 뿐이며, 실제 UNDO 데이터가 남아있는지는 별도 확인이 필요합니다 (아래 4번 참고).