ORA-19804: cannot reclaim N bytes disk space from M bytes limit (M바이트 한도에서 N바이트 디스크 공간을 회수할 수 없음)
Oracle의미
Oracle이 새 파일(아카이브 로그, 백업, flashback 로그)을 위해 Fast Recovery Area(FRA)에 공간을 만들려 했지만, DB_RECOVERY_FILE_DEST_SIZE로 정의된 논리적 한도에 도달해 필요한 공간을 회수할 수 없었다.
원인
FRA 크기(DB_RECOVERY_FILE_DEST_SIZE)는 물리 디스크와 무관한 상한이며, 아카이브 로그, RMAN 백업 또는 flashback 로그가 이를 채웠다. 근본 원인은 보통 아카이브 로그를 정기적으로 백업·삭제하지 않았거나 불필요한 백업을 정리하지 않은 것이다.
해결 방법
FRA 사용량 확인: SELECT * FROM v$recovery_area_usage; 및 SELECT * FROM v$recovery_file_dest; 아카이브 로그를 FRA 외부 대상에 백업하고 삭제하거나(RMAN: BACKUP ARCHIVELOG ALL FORMAT '/backup/arc_%U' DELETE INPUT;), 더 이상 필요 없는 백업을 정리한다(RMAN: DELETE OBSOLETE;). Data Guard 환경에서는 standby에 아직 적용되지 않은 아카이브 로그를 삭제하지 않는다. 영구 조치로 디스크 공간이 있으면 DB_RECOVERY_FILE_DEST_SIZE를 늘린다. Flashback Database가 필요 없다면 비활성화를 고려한다.
같은 데이터베이스의 다른 항목
- ORA-07445exception encountered: core dump
- ORA-01102cannot mount database in EXCLUSIVE mode
- ORA-29913error in executing ODCIEXTTABLEOPEN callout (ODCIEXTTABLEOPEN callout 실행 오류)
- ORA-00494enqueue held for too long by 'inst N, osid M' (enqueue가 너무 오래 보유됨)
- ORA-04021timeout occurred while waiting to lock object (객체 락 대기 중 타임아웃 발생)
- ORA-04061existing state of package/procedure has been invalidated (패키지/프로시저의 기존 상태가 무효화됨)
- ORA-01466unable to read data - table definition has changed (데이터를 읽을 수 없음 - 테이블 정의 변경됨)