ORA-01940:无法删除当前已连接的用户

来源:这里教程网 时间:2026-03-03 13:27:17 作者:

      今天在现场作业时,需要先删除用户;在执行 drop user 时提示“ORA-01940: cannot drop a user that is currently connected”,当时的环境如下: 操作系统:Windows XP 数据库:Oracle 10.2.0.1        当时时间比较着急,直接采取了釜底抽薪的办法——拔网线,这招很管用,再次执行drop user就成功了。考虑到以后不一定所有场合都允许你采取这种简单粗暴的办法,就在虚拟机上重现了这个报错,寻求一种较为温和的解决办法。        首先我打开两个虚拟机,在1号虚拟机上启动了两个实例,打开了3个连接到scott用户的窗口;在2号虚拟机上启动了一个实例,打开了一个连接到scott用户的窗口。这时我登录sys用户执行drop user操作,复现了上述报错。

点击( 此处 )折叠或打开

  1. [ oracle @ enmoedu1  ~ ] $  sqlplus  /   as  sysdba
  2. SQL * Plus :   Release  11 . 2 . . 3 . 0 Production  on  Fri Apr 17 21 : 25 : 40 2015
  3. Copyright  ( c )  1982 ,  2011 ,  Oracle .   All  rights reserved .
  4. Connected  to :
  5. Oracle  Database  11g Enterprise Edition  Release  11 . 2 . . 3 . -  Production
  6. With  the Partitioning ,  OLAP ,   Data  Mining  and   Real  Application Testing options
  7. SQL >   drop   user  scott  cascade ;
  8. drop   user  scott  cascade
  9. *
  10. ERROR at line 1 :
  11. ORA - 01940 :  cannot  drop  a  user  that  is  currently connected
  12. SQL >

首先,我们查看scott用户的连接状况;

点击( 此处 )折叠或打开

  1. SQL >   select  username , sid , serial#  from  v$ session   where  username = 'SCOTT' ;
  2. USERNAME SID SERIAL#
  3. ------------------------------ ---------- ----------
  4. SCOTT 19 355
  5. SCOTT 20 13693
  6. SCOTT 26 15
  7. SCOTT 127 7
  8. SQL >

接下来,我们kill上述连接;

点击( 此处 )折叠或打开

  1. SQL >   alter  system kill  session '19,355' ;
  2. System altered .
  3. SQL >   alter  system kill  session '20,13693' ;
  4. System altered .
  5. SQL >   alter  system kill  session '26,15' ;
  6. System altered .
  7. SQL >   alter  system kill  session '127,7' ;
  8. System altered .
  9. SQL >

再次查询scott用户的连接状况,确认所有连接被清除完毕;

点击( 此处 )折叠或打开

  1. SQL >  
  2. SQL >   select  username , sid , serial#  from  v$ session   where  username = 'SCOTT' ;
  3. USERNAME SID SERIAL#
  4. ------------------------------ ---------- ----------
  5. SCOTT 19 355
  6. SCOTT 20 13693
  7. SCOTT 26 15
  8. SCOTT 127 7
  9. SQL >

看到这儿,不要惊慌,不要以为这些连接还在;我们只要查询一下上述连接的状态就明白了。

点击( 此处 )折叠或打开

  1. SQL >  
  2. SQL >   select  saddr , sid , serial# , paddr , username , status  from  v$ session   where  username  is   not   null ;
  3. SADDR SID SERIAL# PADDR USERNAME STATUS
  4. -------- ---------- ---------- -------- ------------------------------ --------
  5. 578CC410 19 355 583AD258 SCOTT KILLED
  6. 578C9890 20 13693 583AD258 SCOTT KILLED
  7. 578B9390 26 15 583AD258 SCOTT KILLED
  8. 579DED90 120 95 5836FFB4 SYS ACTIVE
  9. 579CBD10 127 7 583AD258 SCOTT KILLED
  10. SQL >

由上述查询结果得知,scott用户的所有连接已经被kill了;现在我们执行drop user,看一下是否能够成功;

点击( 此处 )折叠或打开

  1. SQL >  
  2. SQL >   drop   user  scott  cascade ;
  3. User  dropped .
  4. SQL >

由此,ORA-01940报错得到顺利解决。大家如果以后碰到这个问题,可以按照实际环境来决定是采取“简单粗暴”的解决办法(拔网线),还是上述这种“温和”的解决办法。

相关推荐