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

ORA-00357
2026년 06월 09일 | DBMS Error 가이드

이 글에서 다루는 내용

ORA-00357 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.

ORA-00357 too many members specified for log file 는?

ORA-00357 에러는 Oracle 데이터베이스에서 리두 로그 그룹(Redo Log Group)에 멤버(Member)를 추가하거나 생성할 때, 하나의 로그 그룹에 허용된 최대 멤버 수를 초과했을 때 발생하는 에러입니다. Oracle 데이터베이스는 하나의 리두 로그 그룹에 포함될 수 있는 멤버의 수를 MAXLOGMEMBERS 파라미터로 제한하며, 이 값을 초과하는 멤버를 추가하려 할 때 이 에러가 발생합니다. 주로 데이터베이스 생성 시 설정한 MAXLOGMEMBERS 값이 너무 낮거나, 운영 중 다중화(Multiplexing) 목적으로 멤버를 추가하다가 제한에 걸리는 상황에서 자주 목격됩니다.


주요 발생 원인

1. MAXLOGMEMBERS 설정값 초과

데이터베이스 생성(CREATE DATABASE) 시 MAXLOGMEMBERS 파라미터를 낮게 설정한 경우, 리두 로그 그룹에 추가할 수 있는 멤버 수가 제한됩니다. 예를 들어 MAXLOGMEMBERS = 2로 데이터베이스를 생성했다면, 각 로그 그룹에는 최대 2개의 멤버만 추가할 수 있으며, 3번째 멤버를 추가하려는 순간 ORA-00357이 발생합니다. 이 값은 데이터베이스 생성 이후에는 직접 수정할 수 없으며, 재생성(Recreate) 또는 RESETLOGS를 통한 Control File 재생성이 필요합니다.

2. ALTER DATABASE ADD LOGFILE MEMBER 명령 오용

기존 로그 그룹에 멤버를 추가하는 ALTER DATABASE ADD LOGFILE MEMBER 명령을 실행할 때, 현재 그룹의 멤버 수와 MAXLOGMEMBERS 한도를 미리 확인하지 않으면 에러가 발생할 수 있습니다. DBA가 다중화 정책을 적용하면서 여러 그룹에 동시에 멤버를 추가하는 과정에서 특정 그룹이 이미 한계에 도달했음을 놓치는 경우가 많습니다. 특히 복수의 DBA가 관리하는 환경에서는 서로 작업 내역을 공유하지 않아 발생하는 경우도 빈번합니다.

3. 스크립트 자동화 오류 또는 데이터베이스 클론 시 설정 불일치

자동화 스크립트나 RMAN 클론, Data Guard 구성 등의 작업에서 원본 데이터베이스의 MAXLOGMEMBERS 설정이 낮은 상태로 복제되어 이후 멤버 추가 작업이 실패하는 경우가 있습니다. 스크립트 내에서 멤버 수 검증 없이 무조건 ADD LOGFILE MEMBER 명령을 실행하면 환경에 따라 에러가 발생할 수 있습니다. 이러한 경우는 운영 환경과 개발/DR 환경 간의 설정 차이에서도 비롯됩니다.


해결 방법

1단계: 현재 MAXLOGMEMBERS 및 멤버 현황 확인

먼저 현재 데이터베이스의 제한 값과 각 그룹의 멤버 수를 확인합니다.

-- 현재 MAXLOGMEMBERS 값 확인 (Control File에서 조회)
SELECT NAME, VALUE
FROM V$PARAMETER
WHERE NAME = 'maxlogmembers';

-- 리두 로그 그룹 및 멤버 현황 조회
SELECT A.GROUP#, A.MEMBERS, A.STATUS, B.MEMBER
FROM V$LOG A
JOIN V$LOGFILE B ON A.GROUP# = B.GROUP#
ORDER BY A.GROUP#, B.MEMBER;

-- MAXLOGMEMBERS 값은 V$DATABASE를 통해서도 확인 가능
SELECT LOG_MODE, CONTROLFILE_TYPE
FROM V$DATABASE;

-- 직접적인 MAXLOGMEMBERS 조회
SELECT MAXLOGMEMBERS
FROM V$DATABASE;

2단계: 현재 멤버 수가 한계에 도달했는지 확인

-- 각 그룹별 현재 멤버 수 집계
SELECT GROUP#, COUNT(*) AS CURRENT_MEMBERS
FROM V$LOGFILE
GROUP BY GROUP#
ORDER BY GROUP#;

3단계-A: MAXLOGMEMBERS를 증가시키기 위한 Control File 재생성

MAXLOGMEMBERSCREATE DATABASE 또는 Control File 재생성 시에만 변경 가능합니다. 운영 중인 데이터베이스에서는 아래와 같이 Control File을 재생성하여 값을 높일 수 있습니다.

-- 현재 Control File 생성 스크립트 추출 (MOUNT 상태 필요)
ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/tmp/ctrl_backup.sql' REUSE RESETLOGS;

-- /tmp/ctrl_backup.sql 파일을 열어 MAXLOGMEMBERS 값을 수정 후 아래 단계 수행
-- 예시: MAXLOGMEMBERS 2 -> MAXLOGMEMBERS 5 로 변경

-- DB를 NOMOUNT 상태로 재시작 후 새로운 Control File 생성
SHUTDOWN IMMEDIATE;
STARTUP NOMOUNT;

-- 수정한 스크립트를 실행 (아래는 예시 골자)
CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS
    MAXLOGFILES 16
    MAXLOGMEMBERS 5          -- 기존 2에서 5로 증가
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
    GROUP 1 '/u01/oradata/orcl/redo01a.log' SIZE 200M,
    GROUP 2 '/u01/oradata/orcl/redo02a.log' SIZE 200M,
    GROUP 3 '/u01/oradata/orcl/redo03a.log' SIZE 200M
DATAFILE
    '/u01/oradata/orcl/system01.dbf',
    '/u01/oradata/orcl/sysaux01.dbf',
    '/u01/oradata/orcl/undotbs01.dbf',
    '/u01/oradata/orcl/users01.dbf'
CHARACTER SET AL32UTF8;

-- OPEN RESETLOGS로 데이터베이스 오픈
ALTER DATABASE OPEN RESETLOGS;

3단계-B: MAXLOGMEMBERS 증가 후 멤버 추가

Control File 재생성으로 MAXLOGMEMBERS를 늘린 후, 정상적으로 멤버를 추가합니다.

-- 리두 로그 그룹 1에 멤버 추가
ALTER DATABASE ADD LOGFILE MEMBER
    '/u01/oradata/orcl/redo01b.log' TO GROUP 1;

ALTER DATABASE ADD LOGFILE MEMBER
    '/u02/oradata/orcl/redo01c.log' TO GROUP 1;

-- 추가 결과 확인
SELECT GROUP#, STATUS, MEMBER, TYPE
FROM V$LOGFILE
ORDER BY GROUP#, MEMBER;

3단계-C: 기존 그룹을 삭제하고 멤버 수를 줄이는 방법 (임시 회피)

멤버를 더 추가하기 어려운 경우, 일부 불필요한 그룹을 정리하여 전체 멤버 수를 관리합니다.

-- 특정 그룹의 멤버 삭제 (INACTIVE 상태여야 함)
ALTER DATABASE DROP LOGFILE MEMBER '/u01/oradata/orcl/redo01b_old.log';

-- 로그 그룹 자체 삭제 (INACTIVE 상태여야 함)
-- 주의: 최소 2개의 로그 그룹은 항상 유지해야 함
ALTER DATABASE DROP LOGFILE GROUP 4;

예방 방법

1. 데이터베이스 생성 시 MAXLOGMEMBERS를 넉넉하게 설정

데이터베이스를 처음 생성할 때 MAXLOGMEMBERS를 기본값(5)보다 높은 값으로 설정하는 것이 좋습니다. Oracle 권고사항은 리두 로그 다중화를 위해 최소 2~3개의 멤버를 사용하는 것이므로, MAXLOGMEMBERS = 5 이상으로 설정해두면 향후 확장에도 유연하게 대응할 수 있습니다. 아래는 데이터베이스 생성 예시입니다.

CREATE DATABASE mydb
    MAXLOGFILES 32
    MAXLOGMEMBERS 5     -- 충분한 여유값 설정
    MAXDATAFILES 200
    MAXINSTANCES 1
    MAXLOGHISTORY 1000
    ...

2. 정기적인 리두 로그 현황 모니터링 스크립트 운영

주기적으로 리두 로그 그룹과 멤버 현황을 점검하는 모니터링 스크립트를 스케줄링하여, MAXLOGMEMBERS 한도에 근접하기 전에 미리 조치를 취할 수 있도록 합니다. 아래 스크립트를 cron 또는 Oracle Scheduler에 등록하여 활용하세요.

-- 모니터링 쿼리: MAXLOGMEMBERS 대비 현재 사용률 확인
SELECT
    G.GROUP#,
    G.MEMBERS AS CURRENT_MEMBER_COUNT,
    D.MAXLOGMEMBERS AS MAX_ALLOWED,
    ROUND(G.MEMBERS / D.MAXLOGMEMBERS * 100, 1) AS USAGE_PCT,
    G.STATUS
FROM V$LOG G
CROSS JOIN (SELECT MAXLOGMEMBERS FROM V$DATABASE) D
ORDER BY G.GROUP#;

관련 에러

  • ORA-00350: 로그 그룹을 아카이브해야 한다는 에러로, 리두 로그 관리 작업 중 함께 발생할 수 있습니다.
  • ORA-00358: 지정된 멤버가 너무 많다는 에러로 ORA-00357과 유사한 맥락에서 발생합니다.
  • ORA-00312: 온라인 리두 로그 파일을 찾을 수 없을 때 발생하며, 멤버 경로 오류와 관련됩니다.
  • ORA-00359: 로그 파일 그룹이 존재하지 않을 때 발생하며, 잘못된 그룹 번호 지정 시 나타납니다.
  • ORA-01033: 초기화 또는 종료 중 발생하는 에러로, Control File 재생성 후 오픈 실패 시 연관될 수 있습니다.
DBMS 에러 코드 시리즈

주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.

본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.

댓글 남기기