DEV Community

umzzil nng
umzzil nng

Posted on • Originally published at oraerror.com

ORA-00250 오류 원인과 해결 방법 완벽 가이드

ORA-00250란?

ORA-00250 에러는 Oracle 데이터베이스에서 아카이버(Archiver) 프로세스가 시작되지 않은 상태에서 아카이브 관련 작업을 수행하려 할 때 발생하는 에러입니다. Oracle은 ARCHIVELOG 모드에서 온라인 리두 로그(Online Redo Log)가 꽉 차면 자동으로 ARCn 백그라운드 프로세스가 해당 로그를 아카이브 파일로 복사하는데, 이 프로세스가 정상적으로 기동되지 않았을 경우 본 에러가 발생합니다. 주로 ALTER SYSTEM ARCHIVE LOG START 명령을 실행하려 하거나, 아카이브 로그 관련 설정을 변경할 때 이미 아카이버가 중단된 상태에서 중복 중지 명령을 내리는 상황에서도 이 에러가 나타날 수 있습니다.


주요 발생 원인

1. ARCHIVELOG 모드이지만 ARCn 프로세스가 비정상 종료된 경우

Oracle 데이터베이스가 ARCHIVELOG 모드로 운영 중임에도 불구하고, 내부 오류나 OS 레벨의 자원 부족으로 인해 ARCn 백그라운드 프로세스가 강제 종료되는 경우가 있습니다. 이 상태에서 수동으로 ALTER SYSTEM ARCHIVE LOG ALL 또는 관련 명령을 실행하면 아카이버가 없다는 ORA-00250 에러가 즉시 발생합니다. Alert 로그를 확인하면 ARCn 프로세스의 종료 시점과 원인을 추적할 수 있습니다.

2. NOARCHIVELOG 모드에서 아카이브 관련 명령을 실행한 경우

데이터베이스가 NOARCHIVELOG 모드로 운영 중인데, DBA가 실수로 아카이브 로그 관련 명령(ALTER SYSTEM ARCHIVE LOG START 등)을 실행한 경우 이 에러가 발생합니다. NOARCHIVELOG 모드에서는 애초에 아카이버 프로세스 자체가 존재하지 않기 때문에 해당 명령 자체가 무의미하며, Oracle은 이를 에러로 반환합니다. 현재 아카이브 모드 확인 없이 스크립트를 일괄 실행하는 환경에서 빈번하게 발생합니다.

3. 수동으로 ALTER SYSTEM ARCHIVE LOG STOP을 실행한 후 재시작하지 않은 경우

운영 중 특수한 유지보수 목적으로 아카이버를 수동 정지(ALTER SYSTEM ARCHIVE LOG STOP)시킨 후, 작업이 완료되었음에도 재시작을 잊어버리는 경우가 있습니다. 이 상태에서 리두 로그가 꽉 차거나, 다른 아카이브 관련 명령을 실행하면 ORA-00250이 발생하며, 최악의 경우 데이터베이스 전체가 정지(hang)되는 상황으로 이어질 수 있습니다. 수동 개입이 잦은 운영 환경에서 특히 주의가 필요합니다.


해결 방법

원인 1 해결: ARCn 프로세스 비정상 종료 시 아카이버 재시작

먼저 현재 데이터베이스의 아카이브 모드와 아카이버 상태를 확인합니다.

-- 현재 아카이브 모드 확인
SELECT LOG_MODE FROM V$DATABASE;

-- 아카이버 프로세스 상태 확인
SELECT ARCHIVER FROM V$INSTANCE;

-- ARCn 프로세스 목록 확인
SELECT PNAME, PADDR FROM V$BGPROCESS
WHERE PNAME LIKE 'ARC%';
Enter fullscreen mode Exit fullscreen mode

V$INSTANCE.ARCHIVER 컬럼 값이 STOPPED로 확인되면, 아래 명령으로 아카이버를 재시작합니다.

-- SYSDBA 권한으로 접속 후 아카이버 수동 시작
CONNECT / AS SYSDBA

-- 아카이버 프로세스 시작 명령
ALTER SYSTEM ARCHIVE LOG START;

-- 명령 실행 후 상태 재확인
SELECT ARCHIVER FROM V$INSTANCE;
-- 결과: STARTED 로 변경되어야 정상
Enter fullscreen mode Exit fullscreen mode

아카이버를 시작한 이후, 미처 아카이브되지 않은 리두 로그가 있다면 아래 명령으로 강제 아카이브를 수행합니다.

-- 현재 미아카이브된 로그 그룹 확인
SELECT GROUP#, SEQUENCE#, ARCHIVED, STATUS
FROM V$LOG
ORDER BY GROUP#;

-- 전체 미아카이브 로그 강제 아카이브
ALTER SYSTEM ARCHIVE LOG ALL;

-- 특정 시퀀스 로그 강제 아카이브
ALTER SYSTEM ARCHIVE LOG SEQUENCE 125;
Enter fullscreen mode Exit fullscreen mode

원인 2 해결: NOARCHIVELOG 모드를 ARCHIVELOG 모드로 전환

현재 NOARCHIVELOG 모드인데 아카이브 기능이 필요하다면 모드 전환 작업을 수행합니다. 반드시 DB를 MOUNT 상태로 올린 후 진행해야 합니다.

-- 1단계: 현재 모드 확인
SELECT NAME, LOG_MODE FROM V$DATABASE;

-- 2단계: 전환 전 반드시 콜드 백업 수행 (예시: RMAN 사용)
-- RMAN> BACKUP DATABASE;

-- 3단계: 데이터베이스 정상 종료
SHUTDOWN IMMEDIATE;

-- 4단계: MOUNT 모드로 기동
STARTUP MOUNT;

-- 5단계: ARCHIVELOG 모드로 전환
ALTER DATABASE ARCHIVELOG;

-- 6단계: 데이터베이스 OPEN
ALTER DATABASE OPEN;

-- 7단계: 전환 결과 확인
SELECT LOG_MODE FROM V$DATABASE;
-- 결과: ARCHIVELOG

-- 8단계: 아카이브 로그 저장 경로 확인
SHOW PARAMETER LOG_ARCHIVE_DEST;

-- 아카이브 경로 설정 (필요 시)
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/archive/oradata'
SCOPE=BOTH;
Enter fullscreen mode Exit fullscreen mode

원인 3 해결: 수동 정지 후 재시작 절차

수동으로 아카이버를 정지시킨 경우, 아래 명령으로 즉시 재기동합니다.

-- 아카이버 현재 상태 확인
SELECT ARCHIVER FROM V$INSTANCE;
-- 결과: STOPPED

-- 아카이버 재시작
ALTER SYSTEM ARCHIVE LOG START;

-- 재시작 후 상태 확인
SELECT ARCHIVER FROM V$INSTANCE;
-- 결과: STARTED

-- 아카이브 목적지(Destination) 상태 확인
SELECT DEST_ID, STATUS, TARGET, ARCHIVER, DESTINATION
FROM V$ARCHIVE_DEST
WHERE STATUS != 'INACTIVE';

-- Alert 로그 위치 확인 (에러 원인 추적용)
SELECT VALUE FROM V$DIAG_INFO
WHERE NAME = 'Diag Trace';
Enter fullscreen mode Exit fullscreen mode

아카이브 관련 파라미터 전체 현황도 함께 점검합니다.

-- 아카이브 관련 파라미터 전체 확인
SELECT NAME, VALUE
FROM V$PARAMETER
WHERE NAME IN (
    'log_archive_dest_1',
    'log_archive_dest_2',
    'log_archive_format',
    'log_archive_max_processes',
    'log_archive_min_succeed_dest',
    'db_recovery_file_dest',
    'db_recovery_file_dest_size'
);

-- ARCn 최대 프로세스 수 조정 (필요 시)
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES = 4 SCOPE=BOTH;
Enter fullscreen mode Exit fullscreen mode

예방 방법

1. 아카이브 로그 상태를 주기적으로 모니터링하는 스크립트 구성

아카이버 프로세스 상태 및 아카이브 목적지의 디스크 사용률을 주기적으로 점검하는 모니터링 체계를 구축하는 것이 최선의 예방책입니다. 아래 쿼리를 Cron Job이나 OEM(Oracle Enterprise Manager) 알람과 연동하여 아카이버가 STOPPED 상태가 되면 즉시 알림을 받을 수 있도록 설정하세요.

-- 아카이버 상태 + 아카이브 목적지 사용률 통합 모니터링 쿼리
SELECT
    I.INSTANCE_NAME,
    I.ARCHIVER AS ARCHIVER_STATUS,
    D.LOG_MODE,
    ROUND(R.SPACE_USED / R.SPACE_LIMIT * 100, 2) AS FRA_USED_PCT,
    R.SPACE_LIMIT / 1024 / 1024 / 1024 AS FRA_LIMIT_GB,
    R.SPACE_USED  / 1024 / 1024 / 1024 AS FRA_USED_GB
FROM V$INSTANCE I
CROSS JOIN V$DATABASE D
LEFT JOIN V$RECOVERY_FILE_DEST R ON 1=1;

-- 최근 아카이브 생성 이력 확인 (1시간 내 생성 없으면 이상 징후)
SELECT COUNT(*) AS ARC_COUNT_1HOUR
FROM V$ARCHIVED_LOG
WHERE COMPLETION_TIME >= SYSDATE - 1/24
AND STANDBY_DEST = 'NO';
Enter fullscreen mode Exit fullscreen mode

2. LOG_ARCHIVE_MAX_PROCESSES 적정값 설정 및 FRA(Fast Recovery Area) 용량 관리

ARCn 프로세스가 갑자기 종료되는 주된 이유 중 하나는 아카이브 목적지 디스크의 공간 부족입니다. db_recovery_file_dest_size를 충분히 설정하고, 오래된 아카이브 로그는 RMAN을 통해 주기적으로 삭제하는 정책을 수립해야 합니다. 또한 log_archive_max_processes 값을 워크로드에 맞게 조정(보통 4~8)하면 리두 로그 스위치 빈도가 높은 환경에서 아카이버 과부하로 인한 비정상 종료를 방지할 수 있습니다.

-- RMAN으로 오래된 아카이브 로그 정리 (보존 정책 기반)
-- RMAN>
-- CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
-- DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

-- FRA 사용률 임계치 조회 (80% 이상이면 경고)
SELECT
    NAME,
    ROUND(SPACE_USED/SPACE_LIMIT*100,2) AS USED_PCT
FROM V$RECOVERY_FILE_DEST
WHERE ROUND(SPACE_USED/SPACE_LIMIT*100,2) >= 80;
Enter fullscreen mode Exit fullscreen mode

관련 에러

에러 코드 설명
ORA-00255 error archiving log <seq> of thread <n> — 아카이브 로그 파일 기록 중 실패. 아카이브 목적지 경로 문제나 디스크 풀(Full) 상황에서 발생하며 ORA-00250과 함께 연쇄 발생하는 경우가 많음.
ORA-00257 archiver error. Connect internal only, until freed — 아카이브 목적지 공간이 완전히 소진되어 더 이상 아카이브가 불가능한 상태. 이 에러가 발생하면 SYSDBA 접속을 제외한 모든 DB 접속이 차단되는 매우 긴급한 상황.
ORA-16014 log <n> sequence# <n> not archived, no available destinations — 유효한 아카이브 목적지가 없어서 리두 로그를 아카이브하지 못한 상태. V$ARCHIVE_DEST 상태 점검 필요.
ORA-19809 limit exceeded for recovery files — FRA(Fast Recovery Area) 할당 용량 초과로 아카이브 파일 생성 불가. db_recovery_file_dest_size 파라미터 증설 또는 불필요한 파일 정리 필요.

실무 팁: ORA-00250 에러 발생 시 가장 먼저 확인해야 할 파일은 $ORACLE_BASE/diag/rdbms/<dbname>/<SID>/trace/alert_<SID>.log 입니다. Alert 로그에는 ARCn 프로세스의 시작/중지 이력과 함께 연관된 에러 메시지가 시간 순으로 기록되어 있어 근본 원인(Root Cause) 파악에 결정적인 단서를 제공합니다.

Top comments (0)