操作系统:Windows XP
数据库:Oracle 10.2.0.1
当时时间比较着急,直接采取了釜底抽薪的办法——拔网线,这招很管用,再次执行drop user就成功了。考虑到以后不一定所有场合都允许你采取这种简单粗暴的办法,就在虚拟机上重现了这个报错,寻求一种较为温和的解决办法。
首先我打开两个虚拟机,在1号虚拟机上启动了两个实例,打开了3个连接到scott用户的窗口;在2号虚拟机上启动了一个实例,打开了一个连接到scott用户的窗口。这时我登录sys用户执行drop user操作,复现了上述报错。
点击(此处)折叠或打开
-
[oracle@enmoedu1 ~]$ sqlplus / as sysdba
-
-
SQL*Plus: Release 11.2.0.3.0 Production on Fri Apr 17 21:25:40 2015
-
-
Copyright (c) 1982, 2011, Oracle. All rights reserved.
-
-
-
Connected to:
-
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
-
With the Partitioning, OLAP, Data Mining and Real Application Testing options
-
-
SQL> drop user scott cascade;
-
drop user scott cascade
-
*
-
ERROR at line 1:
-
ORA-01940: cannot drop a user that is currently connected
-
-
- SQL>
点击(此处)折叠或打开
-
SQL> select username,sid,serial# from v$session where username='SCOTT';
-
-
USERNAME SID SERIAL#
-
------------------------------ ---------- ----------
-
SCOTT 19 355
-
SCOTT 20 13693
-
SCOTT 26 15
-
SCOTT 127 7
-
- SQL>
点击(此处)折叠或打开
-
SQL> alter system kill session'19,355';
-
-
System altered.
-
-
SQL> alter system kill session'20,13693';
-
-
System altered.
-
-
SQL> alter system kill session'26,15';
-
-
System altered.
-
-
SQL> alter system kill session'127,7';
-
-
System altered.
-
- SQL>
点击(此处)折叠或打开
-
SQL>
-
SQL> select username,sid,serial# from v$session where username='SCOTT';
-
-
USERNAME SID SERIAL#
-
------------------------------ ---------- ----------
-
SCOTT 19 355
-
SCOTT 20 13693
-
SCOTT 26 15
-
SCOTT 127 7
-
- SQL>
点击(此处)折叠或打开
-
SQL>
-
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;
-
-
SADDR SID SERIAL# PADDR USERNAME STATUS
-
-------- ---------- ---------- -------- ------------------------------ --------
-
578CC410 19 355 583AD258 SCOTT KILLED
-
578C9890 20 13693 583AD258 SCOTT KILLED
-
578B9390 26 15 583AD258 SCOTT KILLED
-
579DED90 120 95 5836FFB4 SYS ACTIVE
-
579CBD10 127 7 583AD258 SCOTT KILLED
-
- SQL>
点击(此处)折叠或打开
-
SQL>
-
SQL> drop user scott cascade;
-
-
User dropped.
-
- SQL>