Oracle ORA-00289 오류: 원인 및 해결책 완전 가이드
Source: Dev.to
ORA-00289: 아카이브 로그 대상 – 원인, 해결 방법 및 예방
ORA-00289는 Oracle에서 아카이브 로그 대상이 제안되었거나 문제가 있음을 알리는 정보/경고 메시지입니다. 보통 ORA-00255 또는 ORA-00257과 같은 다른 아카이버 관련 오류와 함께 나타나며, Archiver 프로세스(ARCn)가 설정된 대상에 아카이브 로그를 기록할 수 없음을 의미합니다. 이 문제가 해결되지 않으면 전체 데이터베이스가 멈출 수 있어 ARCHIVELOG 모드 데이터베이스에서 가장 운영상 중요한 오류 중 하나가 됩니다.
가장 흔한 원인
아카이브 로그를 보관하는 파일 시스템에 공간이 부족하면 ARCn 프로세스가 새로운 아카이브 로그를 기록하지 못하고, 결국 모든 redo 로그 전환을 차단해 데이터베이스가 정지합니다.
-- 아카이브 로그 대상 상태 확인
SELECT DEST_ID, STATUS, TARGET, DESTINATION, ERROR
FROM V$ARCHIVE_DEST
WHERE STATUS != 'INACTIVE';
-- FRA 사용량 확인
SELECT SPACE_LIMIT / 1024 / 1024 / 1024 AS LIMIT_GB,
SPACE_USED / 1024 / 1024 / 1024 AS USED_GB,
SPACE_RECLAIMABLE / 1024 / 1024 / 1024 AS RECLAIMABLE_GB
FROM V$RECOVERY_FILE_DEST;
-- FRA 크기 즉시 확대
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 200G SCOPE=BOTH;
LOG_ARCHIVE_DEST_n에 지정된 경로가 존재하지 않거나 잘못된 경우
서버 마이그레이션이나 마운트 포인트 변경 후 경로가 사라지면 Archiver가 조용히 실패하고 ORA-00289를 발생시킵니다.
-- 현재 아카이브 대상 파라미터 확인
SHOW PARAMETER LOG_ARCHIVE_DEST;
-- 대상 경로 수정
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/oradata/archive' SCOPE=BOTH;
-- 또는 FRA를 대상에 사용
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' SCOPE=BOTH;
-- 아카이버 프로세스 상태 확인
SELECT * FROM V$ARCHIVE_PROCESSES;
OS 사용자 권한 문제
Oracle OS 사용자가 아카이브 대상 디렉터리에 쓰기 권한이 없으면 Archiver가 새 아카이브 로그 파일을 만들 수 없습니다. 보안 정책 변경이나 OS 패치 후에 흔히 발생합니다.
-- 권한 수정 후 현재 로그를 강제로 아카이브해 테스트
ALTER SYSTEM ARCHIVE LOG CURRENT;
-- 아카이브 로그 목록 확인
ARCHIVE LOG LIST;
-- 아카이브 로그가 정상적으로 생성되는지 확인
SELECT SEQUENCE#, NAME, FIRST_TIME, NEXT_TIME, DELETED
FROM V$ARCHIVED_LOG
WHERE FIRST_TIME >= SYSDATE - 1/24
ORDER BY SEQUENCE# DESC;
-- OS 수준 수정 (root 권한으로 실행)
chown oracle:dba /oradata/archive
chmod 755 /oradata/archive
긴급 조치: 임시 위치로 아카이브 대상 전환
데이터베이스가 정지 상태이고 즉시 완화가 필요할 때:
-- 임시 위치로 전환 (메모리 전용)
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/tmp/archive_emergency' SCOPE=MEMORY;
-- 근본 원인 해결 후 원래 대상 복구
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/oradata/archive' SCOPE=BOTH;
오래된 아카이브 로그 정리 (백업 존재 확인 후)
-- RMAN을 이용해 오래된 로그 삭제
-- RMAN> DELETE NOPROMPT ARCHIVELOG ALL BACKED UP 1 TIMES TO DISK;
-- RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
시간당 생성되는 아카이브 로그 양 확인
SELECT TO_CHAR(TRUNC(FIRST_TIME, 'HH'), 'YYYY-MM-DD HH24') AS HOUR,
COUNT(*) AS LOG_COUNT,
ROUND(SUM(BLOCKS * BLOCK_SIZE) / 1024 / 1024, 2) AS TOTAL_MB
FROM V$ARCHIVED_LOG
WHERE FIRST_TIME >= SYSDATE - 1
AND DELETED = 'NO'
GROUP BY TRUNC(FIRST_TIME, 'HH')
ORDER BY 1 DESC;
예방 및 모니터링 권고사항
-
디스크 사용량을 사전 예방적으로 모니터링하고 자동 정리
OS 수준 모니터링(크론 작업 또는 OEM 알림)을 설정해 아카이브 로그 디스크 사용량이 75%를 초과하면 경고를 발생시키세요. RMAN 보존 정책을 연계해 성공적인 백업 후 자동으로 오래된 아카이브 로그를 삭제하도록 합니다. -
FRA와 중복 대상 활용
Flash Recovery Area를 구성하고 최소 두 개 이상의 아카이브 대상을 설정해 단일 장애 지점을 없애세요. FRA 크기는 최소 7일치 아카이브 로그와 전체 백업 세트를 저장할 수 있을 만큼 충분히 크게 잡아야 합니다.
-- 권장 이중 대상 설정
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '/fra/oradata' SCOPE=BOTH;
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 500G SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 =
'LOCATION=USE_DB_RECOVERY_FILE_DEST MANDATORY' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 =
'LOCATION=/backup/archive OPTIONAL REOPEN=300' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_MIN_SUCCEED_DEST = 1 SCOPE=BOTH;
오류 코드 및 설명
| 오류 코드 | 설명 |
|---|---|
| ORA-00255 | Archiver가 로그를 아카이브하지 못함 – 거의 항상 ORA-00289와 함께 발생 |
| ORA-00257 | Archiver 오류; 해결될 때까지 내부 연결만 허용 |
| ORA-19809 | FRA 공간 제한 초과; DB_RECOVERY_FILE_DEST_SIZE 증가 필요 |
| ORA-16014 | 로그를 아카이브할 수 없음; 사용 가능한 대상이 없음 |
📖 더 자세한 가이드를 원하시면?
oraerror.com — 상세 분석, 추가 SQL 예제, 예방 팁을 포함하고 있습니다.