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

来源:互联网 发布:绝食瘦下来知乎 编辑:程序博客网 时间:2024/05/22 05:33

在进行导入导出时,出现了相关问题,导致导入的表有缺失,需要重新导过。重新导过的话需要先删除当前用户下的所有表,在我之前的博客里讲到过一种方法,就是先删除用户(级联),然后在重新创建用户,表空间还是用一样的。

但是删除用户的时候报如下错误。

SQL> drop user rjdj cascade;drop user rjdj cascade*ERROR at line 1:ORA-01940: cannot drop a user that is currently connected

字面翻译是该用户有连接,不能删除,我把我自己连接的Oracle Develop客户端断开了连接,再次执行,还是报相同的错误,因为除了我们自己连接,还有其他远程客户端连接。该如何解决该问题,成功删除该用户呢?

先查询RJDJ用户的连接状况。

SQL>  select username,sid,serial# from v$session where username='RJDJ';USERNAME                              SID    SERIAL#------------------------------ ---------- ----------RJDJ                                  429          7RJDJ                                  499          9RJDJ                                  570          9RJDJ                                  641          9RJDJ                                  712          9RJDJ                                  783          9RJDJ                                  854          9RJDJ                                  925          9RJDJ                                  996          9RJDJ                                 1067          910 rows selected.

然后把相关的session连接删掉。

alter system kill session'429,7';alter system kill session'499,9';alter system kill session'570,9';alter system kill session'641,9';alter system kill session'712,9';alter system kill session'783,9';alter system kill session'854,9';alter system kill session'925,9';alter system kill session'996,9';alter system kill session'1067,9';

再次查询RJDJ的连接信息

SQL>  select username,sid,serial# from v$session where username='RJDJ';USERNAME                              SID    SERIAL#------------------------------ ---------- ----------RJDJ                                  429          7RJDJ                                  499          9RJDJ                                  570          9RJDJ                                  641          9RJDJ                                  712          9RJDJ                                  783          9RJDJ                                  854          9RJDJ                                  925          9RJDJ                                  996          9RJDJ                                 1067          910 rows selected.

奇怪了,怎么没有变化,不急,不要以为这些连接还在,我们只要查询一下上述连接的状态就明白了。

SQL> select username,sid,serial#,status from v$session where username='RJDJ';USERNAME                              SID    SERIAL# STATUS------------------------------ ---------- ---------- --------RJDJ                                  429          7 KILLEDRJDJ                                  499          9 KILLEDRJDJ                                  570          9 KILLEDRJDJ                                  641          9 KILLEDRJDJ                                  712          9 KILLEDRJDJ                                  783          9 KILLEDRJDJ                                  854          9 KILLEDRJDJ                                  925          9 KILLEDRJDJ                                  996          9 KILLEDRJDJ                                 1067          9 KILLED10 rows selected.

明白了没,这样再次执行删除RJDJ用户就可以删除成功了!

SQL> drop user rjdj cascade;User dropped.
原创粉丝点击