본문 바로가기
Data & Programming/Oracle

[오라클-오류] ORA-01940: cannot drop a user that is currently connected (현재 접속되어 있는 사용자는 삭제할 수 없습니다)

by 눈부셔™ 2023. 8. 19.
728x90

[Oracle-오류] ORA-01940: cannot drop a user that is currently connected (현재 접속되어 있는 사용자는 삭제할 수 없습니다)

ORA-01940은 오라클 데이터베이스에서 사용자를 삭제하려고 할 때 발생하는 오류입니다. 

이 오류는 "현재 접속되어 있는 사용자는 삭제할 수 없습니다"라는 메시지와 함께 발생합니다.

 

ORA-01940

오류원인

ORA-01940 오류의 원인은 해당 사용자가 여전히 데이터베이스에 연결되어 있기 때문입니다. 

따라서, 해당 사용자의 세션을 종료하거나 해당 사용자가 로그아웃한 후에 사용자를 삭제해야 합니다.

 

 

해결방법

해결 방법으로는 다음과 같은 방법들이 있습니다:

1. 해당 사용자의 세션을 찾아서 종료하기

  • v$session 뷰를 사용하여 해당 사용자의 세션을 찾을 수 있습니다. 다음과 같은 쿼리를 사용하여 세션을 찾을 수 있습니다.
1
2
3
4
SELECT sid, serial#, status, spid
FROM v$session s, v$process p
WHERE s.username = '사용자명'
AND p.addr (+= s.paddr;
cs
    • 위의 쿼리에서 사용자명 부분에 실제로 삭제하려는 사용자의 이름을 입력해야 합니다. 또한, v$session 뷰에서는 사용자 이름이 대문자로 표시되므로 대문자로 입력해야 합니다.
    • 위의 쿼리를 실행한 후에 나오는 결과에서 sid와 serial# 값을 확인한 후, 다음과 같은 쿼리를 사용하여 세션을 종료할 수 있습니다.
1
ALTER SYSTEM KILL SESSION 'sid, serial#';
cs


2. 데이터베이스를 재시작하기

  • 데이터베이스를 재시작하면 모든 세션이 종료되므로, 이 방법으로도 ORA-01940 오류를 해결할 수 있습니다.
  • 다음과 같은 순서로 데이터베이스를 재시작할 수 있습니다.

        - sysdba로 로그인합니다.

1
sqlplus / as sysdba
cs

        - 데이터베이스를 종료합니다.

1
SHUTDOWN IMMEDIATE;
cs

        - 데이터베이스를 다시 시작합니다.

1
STARTUP;
cs


위의 방법 중 하나를 사용하여 ORA-01940 오류를 해결한 후에, 다음과 같은 쿼리를 사용하여 사용자를 삭제할 수 있습니다.

1
DROP USER 사용자명 CASCADE;
cs

 

예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- 세션 찾기
SELECT sid, serial#, status, spid
FROM v$session s, v$process p
WHERE s.username = 'TEST'
AND p.addr (+= s.paddr;
 
-- 세션 종료하기 (sid와 serial# 값은 실제 값으로 변경)
ALTER SYSTEM KILL SESSION 'sid, serial#';
 
-- 데이터베이스 재시작하기 (sysdba로 로그인 필요)
SHUTDOWN IMMEDIATE;
STARTUP;
 
-- 사용자 삭제하기
DROP USER TEST CASCADE;
cs

 

결론적으로, ORA-01940 오류는 현재 접속되어 있는 사용자를 삭제하려고 할 때 발생하는 오류입니다. 

이 오류를 해결하기 위해서는 해당 사용자의 세션을 종료하거나 데이터베이스를 재시작한 후에 사용자를 삭제해야 합니다.

 

 

#ORACLE  #오라클  #오라클 오류코드  #ORA-01940  #세션종료  #사용자삭제  #SQL  #데이터베이스 재시작

728x90