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

ORA-01074
2026년 07월 02일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-01074 cannot shut down ORACLE; please log off first 는?

ORA-01074 에러는 Oracle 데이터베이스를 종료(Shutdown)하려고 할 때, 현재 세션이 제대로 로그아웃되지 않은 상태에서 SHUTDOWN 명령을 수행할 경우 발생합니다. 쉽게 말해, DBA가 데이터베이스를 내리려는 시도를 하고 있는데 현재 접속된 세션 자체가 정리되지 않아 Oracle이 종료를 거부하는 상황입니다. 주로 SQL*Plus나 다른 클라이언트 툴에서 SYSDBA 권한으로 접속한 상태에서 올바른 절차 없이 SHUTDOWN 명령을 실행할 때 자주 목격됩니다.


주요 발생 원인

  • 현재 세션에서 로그오프 없이 SHUTDOWN 명령 실행

가장 빈번한 원인입니다. SQL*Plus 또는 다른 클라이언트 툴에서 CONNECT / AS SYSDBA로 접속한 직후, 별도의 로그오프 처리 없이 곧바로 SHUTDOWN IMMEDIATE 혹은 SHUTDOWN ABORT 명령을 입력하는 경우입니다. Oracle은 현재 세션이 활성 상태임을 감지하고 먼저 로그오프할 것을 요구합니다. 특히 스크립트 자동화 과정에서 세션 관리 로직이 빠진 경우 이 에러가 자주 발생합니다.

  • 중첩된 세션 또는 복수 세션에서의 SHUTDOWN 시도

하나의 터미널 또는 스크립트에서 이미 다른 세션이 활성화되어 있는 상태에서 추가로 SHUTDOWN을 시도하는 경우입니다. 예를 들어 운영 중인 배치 프로세스나 모니터링 스크립트가 백그라운드에서 SYSDBA 세션을 유지하고 있을 때 발생할 수 있습니다. 이런 경우에는 단순히 로그오프 후 재시도하는 것만으로는 해결이 안 되고, 모든 활성 세션을 확인하고 정리해야 합니다.

  • Oracle Management Agent 또는 외부 툴에 의한 세션 점유

Oracle Enterprise Manager, Cloud Control Agent, 또는 서드파티 모니터링 툴(예: Toad, SQL Developer 등)이 백그라운드에서 지속적인 접속을 유지하는 경우입니다. 이러한 툴들은 자동으로 세션을 재연결하거나 유지하도록 설계되어 있어, DBA가 수동으로 SHUTDOWN을 시도할 때 이미 점유된 세션이 문제를 일으킵니다. 특히 Grid Control이나 OEM Agent가 실행 중인 환경에서 자주 목격됩니다.


해결 방법

해결책 1: 현재 세션 로그오프 후 재접속하여 SHUTDOWN 수행

가장 기본적인 해결 방법입니다. 현재 세션에서 로그오프한 뒤, 다시 SYSDBA로 접속하여 SHUTDOWN 명령을 실행합니다.

-- Step 1: 현재 세션에서 로그오프
DISCONNECT;

-- Step 2: SYSDBA로 재접속
CONNECT / AS SYSDBA

-- Step 3: 데이터베이스 종료
SHUTDOWN IMMEDIATE;

또는 SQL*Plus를 완전히 종료하고 새로운 세션을 열어서 시도하는 방법도 유효합니다.

-- SQL*Plus 종료
EXIT;

-- 새 터미널에서 재접속 후 종료
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;

해결책 2: 활성 세션 확인 및 강제 종료 후 SHUTDOWN

복수의 세션이 존재하거나 백그라운드 세션이 의심될 경우, 먼저 활성 세션을 조회하고 필요 시 강제로 종료합니다.

-- 현재 활성 세션 전체 조회
SELECT sid, serial#, username, status, program, machine
FROM v$session
WHERE type = 'USER'
ORDER BY status, username;

-- 특정 세션 강제 종료 (SID와 SERIAL# 확인 후)
ALTER SYSTEM KILL SESSION '23,1245' IMMEDIATE;

-- 모든 비 SYSDBA 세션을 한 번에 종료하는 스크립트
BEGIN
  FOR r IN (
    SELECT sid, serial#
    FROM v$session
    WHERE username IS NOT NULL
      AND username != 'SYS'
      AND type = 'USER'
  ) LOOP
    EXECUTE IMMEDIATE 
      'ALTER SYSTEM KILL SESSION ''' || r.sid || ',' || r.serial# || ''' IMMEDIATE';
  END LOOP;
END;
/

-- 이후 SHUTDOWN 수행
SHUTDOWN IMMEDIATE;

해결책 3: OEM Agent 또는 외부 툴 세션 처리

Oracle Management Agent 등 외부 툴이 세션을 점유하고 있는 경우, 해당 Agent를 먼저 중지시킵니다.

# Oracle Management Agent 중지 (OS 레벨)
$AGENT_HOME/bin/emctl stop agent

# Grid Control 환경에서 dbconsole 중지
$ORACLE_HOME/bin/emctl stop dbconsole

이후 SQL*Plus에서 SHUTDOWN을 수행합니다.

-- Agent 중지 후 SHUTDOWN 수행
CONNECT / AS SYSDBA
SHUTDOWN IMMEDIATE;

해결책 4: SHUTDOWN ABORT 사용 (최후의 수단)

일반적인 방법으로 해결이 안 될 경우, SHUTDOWN ABORT를 사용할 수 있습니다. 단, 이 명령은 데이터 정합성에 영향을 줄 수 있으므로 반드시 마지막 수단으로만 사용해야 하며, 이후 기동 시 자동으로 Instance Recovery가 수행됩니다.

-- SHUTDOWN ABORT 수행 (비권장, 최후 수단)
SHUTDOWN ABORT;

-- 재기동 시 자동 복구 확인
STARTUP;

-- 기동 후 데이터 정합성 확인
SELECT status FROM v$instance;
SELECT open_mode FROM v$database;

예방 방법

  • 표준 SHUTDOWN 절차를 스크립트화하여 자동화

수동으로 데이터베이스를 종료할 때 발생하는 실수를 줄이기 위해, SHUTDOWN 전에 반드시 현재 세션을 로그오프하고 활성 세션을 확인하는 표준 절차를 스크립트로 만들어 관리합니다. 아래와 같은 셸 스크립트를 활용하면 실무에서 바로 적용할 수 있습니다.

#!/bin/bash
# Oracle DB 안전 종료 스크립트
export ORACLE_SID=ORCL
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1

sqlplus -S / as sysdba <<EOF
-- 활성 세션 수 확인
SELECT COUNT(*) AS active_sessions 
FROM v$session 
WHERE type = 'USER' AND status = 'ACTIVE';

-- 안전하게 종료
SHUTDOWN IMMEDIATE;
EXIT;
EOF
  • Oracle 접속 툴의 자동 재접속(Auto-Reconnect) 기능 비활성화

Toad, SQL Developer, DBeaver 등 GUI 툴의 자동 재접속 옵션을 비활성화하고, OEM Agent는 SHUTDOWN 전에 반드시 수동으로 중지하는 운영 정책을 수립합니다. 또한 OS 계정 단위로 Oracle 접속 세션 수를 Profile을 통해 제한하면, 예기치 않은 세션 증가를 사전에 방지할 수 있습니다.

-- 특정 사용자 프로파일에서 세션 수 제한
CREATE PROFILE limited_session LIMIT
  SESSIONS_PER_USER 3
  IDLE_TIME 30
  CONNECT_TIME 480;

ALTER USER app_user PROFILE limited_session;

-- 현재 프로파일 설정 확인
SELECT username, profile 
FROM dba_users 
WHERE username = 'APP_USER';

SELECT resource_name, limit 
FROM dba_profiles 
WHERE profile = 'LIMITED_SESSION';

관련 에러

  • ORA-01075: you are currently logged on — 현재 세션이 이미 로그온 상태임을 알리는 에러로, ORA-01074와 연관성이 높습니다.
  • ORA-01092: ORACLE instance terminated. Disconnection forced — SHUTDOWN ABORT 이후 강제 접속 해제 시 발생하는 에러입니다.
  • ORA-00600: Internal error — SHUTDOWN ABORT 이후 불완전한 Instance Recovery 시 드물게 발생할 수 있습니다.
  • ORA-01034: ORACLE not available — 데이터베이스가 완전히 종료된 상태에서 접속을 시도할 때 발생하며, 정상적인 SHUTDOWN 이후 확인용으로 자주 접하는 에러입니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기