ITPub博客

首页 > 数据库 > Oracle > ORA-01940:无法删除当前已连接的用户

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

Oracle 作者:Orace技术交流 时间:2019-04-18 14:32:19 0 删除 编辑

      今天在现场作业时,需要先删除用户;在执行 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报错得到顺利解决。大家如果以后碰到这个问题,可以按照实际环境来决定是采取“简单粗暴”的解决办法(拔网线),还是上述这种“温和”的解决办法。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69916968/viewspace-2641789/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle基础面试题
请登录后发表评论 登录
全部评论

注册时间:2019-04-18

  • 博文量
    12
  • 访问量
    15896