Oracle Database 운영 중 가장 치명적인 상황 중 하나는 “테이블 손상 또는 테이블 삭제 오류” 임. 실수로 DROP TABLE 또는 DELETE 명령을 실행하고 COMMIT 까지 수행한 경우, 해당 테이블과 그 데이터는 즉시 논리적으로 사라지고 애플리케이션 장애로 이어짐. 특히 실시간 서비스에서 장애 복구 목표치(RTO: Recovery Time Objective)가 10분 이하라는 SLA 요구가 있을 때, 복구 실패는 곧 비즈니스 손실로 직결됨. DBA는 이런 문제를 해결하기 위해 Flashback, RMAN 또는 로그 기반 복구 기술을 이용해야 하는데, 각기 장단점과 제한 조건이 존재함. 현실적으로 Flashback 기능이 활성화되지 않은 상태라면 대응 가능 시간이 수분에서 Undo Retention 시간(예: 3,600초 = 60분) 범위로 제한되며, 이를 넘으면 Flashback으로 회복이 불가능할 수 있습니다.

또한 RMAN 기반 테이블 레벨 복구(Table Recovery)는 RMAN 백업과 아카이브 로그가 준비되어 있어야 가능함. 예를 들어 테이블 또는 파티션을 특정 시점으로 복원하는 데 필요한 전체 백업은 SYSTEM, SYSAUX, UNDO 및 해당 테이블스페이스의 최신 백업이 필요함. 만약 백업 정책이 부실하다면 복구 실패가 빈번히 발생함.
심층 분석: 복구 메커니즘 이해
Oracle은 다양한 복구 메커니즘을 제공하며, 이들 각각은 데이터 손실 상황과 시스템 구성에 따라 다르게 작동함.
- Flashback Table/Flashback Drop: Oracle의 Flashback 기술은 UNDO 및 Flash Recovery Area(FRA)에 저장된 정보를 활용하여 과거 시점 상태로 되돌림. DROP TABLE 직후 테이블이 휴지통에 존재할 때
FLASHBACK TABLE 테이블명 TO BEFORE DROP으로 즉시 복구할 수 있음. - Flashback Query: 삭제된 데이터의 특정 시점 상태를
AS OF TIMESTAMP구문으로 조회 가능하나, 이것은 복구가 아니라 조회임. - RMAN Table Recovery: RMAN(Recovery Manager)을 통해 전체 DB를 복원하지 않고 특정 테이블을 특정 시점 또는 SCN(System Change Number)으로 복구함. 이 기능은 보조(Auxiliary) 인스턴스를 사용하여 수행되며, 복구 시 복구 시간 범위 설정이 가능함.
- 로그 기반 분석(LogMiner): LogMiner 유틸리티는 redo 로그를 분석하여 어떤 트랜잭션이 어떤 변경을 야기했는지 식별함. 이를 통해 삭제 위치 및 시점을 파악할 수 있으며, 복구 전략 결정에 도움을 줌.
Flashback 기반 복구는 빠르나 UNDO 보존 시간(예: DEFAULT UNDO_RETENTION = 3,600초) 내에만 가능하며, 이 시간 이후에는 RMAN 백업을 활용한 발생 시점 복구(Point-in-Time Recovery)를 수행해야 함.
해결 솔루션 & 데이터: 복구 방법 비교
| 복구 방법 | 적용 상황 | 최대 복구 시간 범위 | 소요 리소스 |
|---|---|---|---|
| Flashback Drop | DROP TABLE 직후 | UNDO 저장 범위 (예: ≤ 60분) | 낮음 |
| Flashback Table | DELETE/UPDATE 오류 | UNDO 저장 범위 | 낮음 |
| RMAN 테이블 레벨 복구 | UNDO 소멸 또는 중대한 손상 | 백업·아카이브 로그 범위 | 중간 |
| Full Point-in-Time Recovery | 대규모 손상/전체 테이블스페이스 손상 | 전체 백업 범위 | 높음 |
- Flashback 활성화 확인:
SELECT flashback_on FROM v$database;로 Flashback 기능 활성 상태 확인. - 삭제된 테이블 확인:
SELECT * FROM recyclebin;으로 휴지통에 있는 DROP된 테이블을 식별. - Flashback Drop 적용: 테이블이 휴지통에 존재할 경우
FLASHBACK TABLE 테이블명 TO BEFORE DROP;로 즉시 복원. - UNDO 기반 Flashback Table: 삭제 시점이 UNDO 보존 시간 내라면
FLASHBACK TABLE 테이블명 TO TIMESTAMP (SYSTIMESTAMP - INTERVAL 'N' MINUTE);로 특정 시점 복원. - RMAN Table Recovery: 위 옵션들이 불가능한 경우, RMAN 보조 인스턴스를 사용해 BACKUP + REDO 로그 기반으로 테이블을 올바른 시점으로 복구.
전문가 조언 & 팩트체크: 실전 복구 주의사항
- Flashback 기능은 UNDO Tablespace와 아카이브 로그에 의존하므로, UNDO_RETENTION 값을 충분히 크게 설정(예: ≥ 86,400초 = 24시간)하여 복구 가능 시간을 연장하는 것이 권장됨; 단 저장소 용량 영향 고려.
- Flashback 기능이 비활성 상태라면 즉시 활성화 및 테스트 환경에서 시나리오를 미리 연습함; 활성화는 복구 성공률을 크게 높임.
- RMAN 기반 테이블 복구는 전체 백업과 아카이브 로그가 없으면 불가능함; 백업 정책 수립 시 반드시 테이블 수준 복구 테스트를 포함해야 함.
- Flashback Drop은 휴지통이 비어있는 경우 복구가 불가능하며, PURGE 또는 Flash Recovery Area 공간 부족 시 로그가 제거될 수 있음.
- LogMiner 활용 시점 분석을 통해 정확한 SCN을 파악하면 복구 시간을 효율적으로 줄일 수 있음.
테이블 복구시에는 주의할 사항이 많다. 참고하시기 바랍니다.