zoukankan      html  css  js  c++  java
  • ORA-01940:无法删除当前已连接的用户

    当时时间比较着急,直接采取了釜底抽薪的办法——拔网线,这招很管用,再次执行drop user就成功了。考虑到以后不一定所有场合都允许你采取这种简单粗暴的办法,就在虚拟机上重现了这个报错,寻求一种较为温和的解决办法。
           首先我打开两个虚拟机,在1号虚拟机上启动了两个实例,打开了3个连接到scott用户的窗口;在2号虚拟机上启动了一个实例,打开了一个连接到scott用户的窗口。这时我登录sys用户执行drop user操作,复现了上述报错。

    点击(此处)折叠或打开

    1. [oracle@enmoedu1 ~]$ sqlplus / as sysdba
    2. SQL*Plus: Release 11.2.0.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.0.3.0 - 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报错得到顺利解决。大家如果以后碰到这个问题,可以按照实际环境来决定是采取“简单粗暴”的解决办法(拔网线),还是上述这种“温和”的解决办法。

  • 相关阅读:
    Contest (树状数组求逆序对)
    树状数组
    unity3D 笔记 (NENE QUEST 制作中用到的函数)
    Ubuntu 安装gnome桌面及vnc远程连接
    Pillow图像处理
    室内场景数据集
    PyTorch踩坑笔记
    进一步了解pip
    一些概念
    损失函数及评价指标
  • 原文地址:https://www.cnblogs.com/jxldjsn/p/7890029.html
Copyright © 2011-2022 走看看