2026년 06월 10일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-00359 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-00359 log group does not exist 는?
ORA-00359 에러는 Oracle 데이터베이스에서 존재하지 않는 Redo Log Group을 참조하거나 조작하려 할 때 발생하는 에러입니다. 주로 ALTER DATABASE DROP LOGFILE GROUP, ALTER DATABASE ADD LOGFILE MEMBER 등의 명령어를 실행할 때, 지정한 그룹 번호가 실제로 존재하지 않을 경우 Oracle이 이 에러를 반환합니다. 데이터베이스 복구 작업, Redo Log 재구성, 또는 스크립트를 통한 자동화 작업 중에 자주 마주치는 에러로, 신중한 확인 절차 없이 명령어를 실행할 경우 발생할 수 있습니다.
주요 발생 원인
- 존재하지 않는 Log Group 번호 지정
가장 흔한 원인은 단순히 잘못된 그룹 번호를 명령어에 입력하는 경우입니다. 예를 들어 실제로는 그룹 1, 2, 3만 존재하는데 그룹 5를 삭제하거나 멤버를 추가하려고 시도할 때 이 에러가 발생합니다. 특히 여러 데이터베이스를 관리하는 DBA가 환경을 혼동하거나, 오래된 스크립트를 재사용할 때 빈번하게 발생합니다.
- 이미 삭제된 Log Group에 대한 작업 시도
이전 작업에서 이미 특정 Redo Log Group이 삭제되었음에도 불구하고, 해당 그룹에 대한 작업을 다시 시도하는 경우입니다. 자동화된 배치 스크립트나 DBA 툴에서 상태 확인 없이 일괄 명령을 수행할 때 이런 상황이 발생할 수 있습니다. 데이터베이스 마이그레이션이나 재구성 작업 후 동기화가 제대로 이루어지지 않았을 때도 유사한 문제가 나타납니다.
- 데이터베이스 복구 후 컨트롤 파일과의 불일치
불완전한 데이터베이스 복구(Incomplete Recovery) 또는 컨트롤 파일 재생성(RESETLOGS) 이후, 컨트롤 파일에 기록된 Redo Log Group 정보와 실제 존재하는 그룹 사이에 불일치가 발생하는 경우입니다. 이 경우는 단순한 번호 오입력보다 훨씬 복잡한 상황으로, 데이터베이스의 정합성 자체에 영향을 줄 수 있어 더욱 주의가 필요합니다.
해결 방법
1단계: 현재 존재하는 Log Group 확인
명령어를 실행하기 전에 반드시 현재 데이터베이스에 실제로 어떤 Redo Log Group이 존재하는지 먼저 확인해야 합니다.
-- 현재 Redo Log Group 및 멤버 현황 조회
SELECT
l.GROUP#,
l.MEMBERS,
l.BYTES / 1024 / 1024 AS SIZE_MB,
l.STATUS,
l.ARCHIVED,
lm.MEMBER AS LOG_FILE_PATH
FROM
V$LOG l
JOIN
V$LOGFILE lm ON l.GROUP# = lm.GROUP#
ORDER BY
l.GROUP#;
-- 간단한 Log Group 목록만 확인
SELECT GROUP#, STATUS, MEMBERS, BYTES/1024/1024 AS "SIZE(MB)"
FROM V$LOG
ORDER BY GROUP#;
2단계: 잘못된 그룹 번호 수정
조회 결과를 바탕으로 실제 존재하는 그룹 번호를 확인한 후, 올바른 번호로 명령어를 재실행합니다.
-- 잘못된 예 (그룹 5가 존재하지 않을 경우 ORA-00359 발생)
-- ALTER DATABASE DROP LOGFILE GROUP 5; -- 에러 발생
-- 올바른 예 (실제 존재하는 그룹 3을 삭제)
-- 단, INACTIVE 상태인지 반드시 확인 후 실행
ALTER DATABASE DROP LOGFILE GROUP 3;
-- 새로운 Log Group 추가 (예: GROUP 4 추가)
ALTER DATABASE ADD LOGFILE GROUP 4
('/u01/oradata/orcl/redo04.log') SIZE 200M;
-- 기존 그룹에 멤버 추가 시 실제 존재하는 그룹 번호 사용
ALTER DATABASE ADD LOGFILE MEMBER
'/u01/oradata/orcl/redo01b.log' TO GROUP 1;
3단계: INACTIVE 상태 확인 후 삭제
Redo Log Group 삭제는 반드시 해당 그룹이 INACTIVE 또는 UNUSED 상태일 때만 가능합니다.
-- Log Switch를 통해 대상 그룹을 INACTIVE 상태로 전환
ALTER SYSTEM SWITCH LOGFILE;
-- 아카이브 완료 여부 확인 (아카이브 모드인 경우)
ALTER SYSTEM ARCHIVE LOG ALL;
-- 상태 재확인 후 삭제 실행
SELECT GROUP#, STATUS FROM V$LOG;
-- INACTIVE 확인 후 삭제
ALTER DATABASE DROP LOGFILE GROUP 3;
4단계: 컨트롤 파일 불일치 해결 (복구 시나리오)
복구 후 불일치가 발생한 경우, 컨트롤 파일을 재생성하거나 RMAN을 활용합니다.
-- 컨트롤 파일 내용 트레이스 파일로 덤프 (현재 상태 백업 목적)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
-- RMAN을 통한 컨트롤 파일 복원 (RMAN 환경에서 실행)
-- RESTORE CONTROLFILE FROM AUTOBACKUP;
-- RECOVER DATABASE;
-- ALTER DATABASE OPEN RESETLOGS;
예방 방법
- 작업 전 반드시 현황 조회 스크립트를 실행하는 습관화
모든 Redo Log 관련 DDL 작업(ADD, DROP, ADD MEMBER)을 실행하기 전에 V$LOG와 V$LOGFILE을 조회하여 현재 상태를 반드시 확인하는 것을 팀 내 DBA 표준 절차로 수립하세요. 특히 자동화 스크립트에는 현황 조회 후 결과를 검증하는 로직을 포함시켜, 존재하지 않는 그룹에 대한 작업이 실행되지 않도록 방어 코드를 추가하는 것이 좋습니다.
- 변경 관리(Change Management) 프로세스와 스크립트 버전 관리 철저히
데이터베이스 구성이 변경될 때마다 관련 스크립트와 문서를 즉시 업데이트하고, Git 등의 버전 관리 시스템을 통해 이력을 관리하세요. 오래된 스크립트를 그대로 재사용하는 것은 이 에러뿐만 아니라 다양한 Oracle 에러의 주요 원인이 됩니다. 정기적인 스크립트 감사(Audit)와 데이터베이스 구성 문서 최신화를 통해 환경 불일치를 사전에 예방할 수 있습니다.
관련 에러
- ORA-00350:
log file needs to be archived— Redo Log가 아카이브되지 않은 상태에서 삭제 시도 시 발생 - ORA-00360:
not a logfile member— 존재하지 않는 멤버를 삭제하려 할 때 발생하며, ORA-00359와 유사한 맥락에서 발생 - ORA-00261:
log ... of open instance ... is being archived or modified— 사용 중인 Log Group 조작 시 발생 - ORA-00362:
member is required to form a valid online log in group— 그룹의 마지막 멤버를 삭제하려 할 때 발생
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.