2026년 09월 12일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-12526 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-12526 TNS: listener: all appropriate instances are in restricted mode 는?
ORA-12526 에러는 클라이언트가 Oracle 데이터베이스에 접속을 시도할 때, 해당 요청을 처리할 수 있는 모든 인스턴스가 제한 모드(Restricted Mode) 로 운영 중일 때 발생합니다. 제한 모드란 DBA 권한을 가진 특정 사용자만 접속할 수 있도록 데이터베이스를 제한적으로 운영하는 상태를 의미합니다. 일반 애플리케이션 사용자나 일반 계정은 이 상태에서 접속이 완전히 차단되므로, 운영 중인 시스템에서 갑자기 이 에러가 발생하면 서비스 장애로 이어질 수 있습니다.
주요 발생 원인
1. 데이터베이스가 RESTRICTED SESSION 모드로 기동된 경우
운영자가 유지보수나 긴급 점검을 위해 데이터베이스를 STARTUP RESTRICT 명령으로 기동하거나, 운영 중에 ALTER SYSTEM ENABLE RESTRICTED SESSION 명령을 실행한 경우 발생합니다. 이 상태에서는 RESTRICTED SESSION 시스템 권한을 가진 DBA 계정만 접속 가능하며, 일반 사용자 계정은 ORA-12526 에러를 만나게 됩니다. 특히 자동화된 배포 스크립트나 유지보수 작업 후 제한 모드 해제를 잊어버린 경우가 실무에서 가장 빈번하게 발생합니다.
2. RAC(Real Application Clusters) 환경에서 일부 인스턴스가 제한 모드인 경우
RAC 환경에서는 여러 인스턴스 중 하나라도 정상 모드로 운영 중이면 일반 접속이 가능하지만, 모든 인스턴스가 제한 모드에 있으면 ORA-12526이 발생합니다. 개별 인스턴스를 점검하거나 패치 적용 중에 인스턴스별로 제한 모드를 활성화하다 보면 의도치 않게 모든 인스턴스가 제한 모드에 빠질 수 있습니다. RAC 운영 환경에서는 리스너가 각 인스턴스의 상태를 주기적으로 체크하기 때문에, 이 상태가 감지되면 즉시 신규 접속이 차단됩니다.
3. 데이터베이스 유지보수 작업 후 모드 해제 미흡
데이터 마이그레이션, 대용량 배치 작업, 스키마 변경 작업 등을 위해 임시로 제한 모드를 활성화한 뒤, 작업 완료 후 이를 해제하는 절차를 누락한 경우입니다. 자동화 스크립트에 DISABLE RESTRICTED SESSION 명령이 빠져 있거나, 작업 중 예외가 발생하여 해제 단계가 실행되지 않은 채로 세션이 종료되는 경우 서비스 접속 장애가 발생합니다. 이는 야간 배치 작업이나 정기 점검 후 아침 업무 시작 시점에 장애로 이어지는 경우가 많아 특히 주의가 필요합니다.
해결 방법
1단계: 현재 데이터베이스 제한 모드 여부 확인
우선 데이터베이스가 실제로 제한 모드인지 확인합니다. SYSDBA 권한으로 접속하여 아래 쿼리를 실행하세요.
-- 제한 모드 여부 확인
SELECT INSTANCE_NAME, STATUS, LOGINS, DATABASE_STATUS
FROM V$INSTANCE;
-- LOGINS 컬럼 값이 'RESTRICTED'이면 제한 모드 상태
-- LOGINS 컬럼 값이 'ALLOWED'이면 정상 상태
-- 추가로 데이터베이스 상태 전반 확인
SELECT NAME, OPEN_MODE, RESTRICTED
FROM V$DATABASE;
-- RESTRICTED 컬럼이 'YES'이면 제한 모드
2단계: 제한 모드 해제 (가장 일반적인 해결책)
제한 모드가 확인되면 아래 명령으로 즉시 해제할 수 있습니다. 이 명령은 데이터베이스를 재시작하지 않고 즉시 적용됩니다.
-- SYSDBA 권한으로 접속 후 실행
ALTER SYSTEM DISABLE RESTRICTED SESSION;
-- 적용 확인
SELECT INSTANCE_NAME, LOGINS
FROM V$INSTANCE;
-- LOGINS가 'ALLOWED'로 변경되었는지 확인
3단계: RAC 환경에서의 해결
RAC 환경이라면 각 인스턴스별로 제한 모드를 개별적으로 확인하고 해제해야 합니다.
-- 각 RAC 인스턴스의 상태 확인
SELECT INST_ID, INSTANCE_NAME, STATUS, LOGINS
FROM GV$INSTANCE
ORDER BY INST_ID;
-- 특정 인스턴스의 제한 모드 해제 (해당 인스턴스에 접속하여 실행)
ALTER SYSTEM DISABLE RESTRICTED SESSION;
-- 전체 클러스터 레벨에서 일괄 해제하려면 각 노드에서 개별 실행 필요
4단계: STARTUP RESTRICT 상태에서의 처리
만약 데이터베이스 자체가 RESTRICT 옵션으로 기동된 경우, 정상 재기동이 필요합니다.
-- 현재 접속된 세션 확인 (DBA 세션만 존재해야 안전하게 재기동 가능)
SELECT USERNAME, SID, SERIAL#, STATUS, MACHINE
FROM V$SESSION
WHERE TYPE = 'USER'
ORDER BY LOGON_TIME;
-- 정상 모드로 재기동 (서비스 영향 최소화를 위해 신중히 실행)
SHUTDOWN IMMEDIATE;
STARTUP; -- RESTRICT 없이 기동
-- 또는 재기동 없이 제한 모드만 해제
ALTER SYSTEM DISABLE RESTRICTED SESSION;
5단계: 리스너 및 서비스 상태 확인
-- 리스너에 등록된 서비스 상태 확인 (OS 레벨에서 실행)
-- lsnrctl status
-- 데이터베이스 서비스 상태 확인
SELECT NAME, NETWORK_NAME, CREATION_DATE, GOAL, DML_ALLOWED
FROM V$SERVICES;
-- 현재 활성 서비스 확인
SELECT NAME, BLOCKED
FROM V$SERVICES
WHERE BLOCKED = 'YES';
예방 방법
1. 제한 모드 해제를 포함한 유지보수 스크립트 표준화
유지보수 작업 스크립트를 작성할 때는 반드시 BEGIN ... EXCEPTION ... END 블록 또는 쉘 스크립트의 trap 명령을 활용하여 작업 중 오류가 발생하더라도 마지막에 반드시 제한 모드가 해제되도록 설계해야 합니다. 아래는 실무에서 사용할 수 있는 표준 템플릿 예시입니다.
-- 유지보수 작업 표준 스크립트 예시
BEGIN
-- 1. 제한 모드 활성화
EXECUTE IMMEDIATE 'ALTER SYSTEM ENABLE RESTRICTED SESSION';
-- 2. 실제 유지보수 작업 수행
-- (여기에 실제 작업 내용 삽입)
-- 3. 작업 완료 후 반드시 제한 모드 해제
EXECUTE IMMEDIATE 'ALTER SYSTEM DISABLE RESTRICTED SESSION';
DBMS_OUTPUT.PUT_LINE('유지보수 작업 완료 및 제한 모드 해제 성공');
EXCEPTION
WHEN OTHERS THEN
-- 오류 발생 시에도 반드시 제한 모드 해제
EXECUTE IMMEDIATE 'ALTER SYSTEM DISABLE RESTRICTED SESSION';
DBMS_OUTPUT.PUT_LINE('오류 발생: ' || SQLERRM);
DBMS_OUTPUT.PUT_LINE('제한 모드 해제 완료');
RAISE;
END;
/
2. 모니터링 알람 설정으로 제한 모드 즉시 감지
엔터프라이즈 운영 환경에서는 OEM(Oracle Enterprise Manager) 또는 커스텀 모니터링 스크립트를 활용하여 데이터베이스가 제한 모드로 전환될 경우 즉시 알람이 발송되도록 설정해야 합니다. 아래 쿼리를 모니터링 에이전트에 등록하여 주기적으로 실행하면 제한 모드 상태를 실시간으로 감지할 수 있습니다.
-- 모니터링용 쿼리 (cron 또는 OEM Job으로 주기 실행 권장)
SELECT
INSTANCE_NAME,
HOST_NAME,
LOGINS,
STARTUP_TIME,
SYSDATE AS CHECK_TIME,
CASE
WHEN LOGINS = 'RESTRICTED' THEN '⚠️ 경고: 제한 모드 활성화됨'
ELSE '✅ 정상'
END AS STATUS_MSG
FROM V$INSTANCE;
-- 제한 모드일 경우 알람 발송 로직과 연계 (결과값이 'RESTRICTED'이면 알람)
관련 에러
- ORA-12525:
TNS: listener has not received client's request in time allowed— 리스너가 클라이언트 요청을 지정 시간 내에 받지 못한 경우로, 네트워크 타임아웃 문제와 관련됩니다. - ORA-12527:
TNS: listener: all appropriate instances are in restricted mode or blocking new connections— ORA-12526의 확장 버전으로, 인스턴스가 신규 접속을 차단하는 상태까지 포함합니다. - ORA-12528:
TNS: listener: all appropriate instances are blocking new connections— 데이터베이스가 QUIESCE 상태이거나 신규 접속 자체를 차단하는 경우로, 인스턴스 상태 점검이 필요합니다. - ORA-01035:
ORACLE only available to users with RESTRICTED SESSION privilege— 데이터베이스에 접속은 성공했으나 제한 모드에서 권한이 없는 경우 발생하며, ORA-12526과 밀접하게 연관됩니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.