DROP USER c##xyt CASCADE > ORA-01940: 无法删除当前连接的用户

多创建了一个用户,想要给它删除掉

一 上执行过程,确实删除成功了

sql 复制代码
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> DROP USER c##xyt CASCADE;
DROP USER c##xyt CASCADE
*
第 1 行出现错误:
ORA-01940: 无法删除当前连接的用户


SQL> select saddr,sid,serial#,paddr,username,status from v$session where username = 'c##xyt';

未选定行

SQL> ALTER USER C##XYT account LOCK;

用户已更改。

SQL> select saddr,sid,serial#,paddr,username,status from v$session where username = 'c##xyt';

未选定行

SQL> select saddr,sid,serial#,paddr,username,status from v$session where username = 'C##XYT';

SADDR                   SID    SERIAL# PADDR
---------------- ---------- ---------- ----------------
USERNAME                       STATUS
------------------------------ --------
00007FF838443EA0          3      36748 00007FF8352B70C0
C##XYT                         INACTIVE

00007FF83643B740        185      50332 00007FF8373A4D08
C##XYT                         INACTIVE

00007FF83850AD70        395      15275 00007FF8384087D0
C##XYT                         INACTIVE


SQL> alter system kill session '3,36748';

系统已更改。

SQL> alter system kill session '185,50332';

系统已更改。

SQL> alter system kill session '395,15275';

系统已更改。

SQL> DROP USER C##XYT CASCADE;

用户已删除。

SQL>

二 步骤解析

2.1 锁定账户

将要删除的用户给锁定掉

sql 复制代码
SQL> ALTER USER C##XYT account LOCK;

用户已更改。

2.2 查询待连接用户的进程号

sql 复制代码
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username = 'C##XYT';

正常来说都会有进程的,没有可能是因为

2.3 根据进程号kill掉进程

sql 复制代码
SQL> alter system kill session '3,36748';

系统已更改。

SQL> alter system kill session '185,50332';

系统已更改。

SQL> alter system kill session '395,15275';

系统已更改。

2.4 级联删除掉用户

sql 复制代码
SQL> DROP USER C##XYT CASCADE;

用户已删除。

三 注意事项

oracle似乎要考虑大小写,比方说,我上头第一次查进程号时,查不到

sql 复制代码
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username = 'c##xyt';

未选定行

SQL> select saddr,sid,serial#,paddr,username,status from v$session where username = 'C##XYT';

SADDR                   SID    SERIAL# PADDR
---------------- ---------- ---------- ----------------
USERNAME                       STATUS
------------------------------ --------
00007FF838443EA0          3      36748 00007FF8352B70C0
C##XYT                         INACTIVE

00007FF83643B740        185      50332 00007FF8373A4D08
C##XYT                         INACTIVE

00007FF83850AD70        395      15275 00007FF8384087D0
C##XYT                         INACTIVE

如果仍有不明白,可以私信讨论

这个用户没了

相关推荐
Ai 编码助手9 分钟前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
陈燚_重生之又为程序员25 分钟前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle26 分钟前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻28 分钟前
MySQL排序查询
数据库·mysql
萧鼎30 分钟前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸30 分钟前
【一些关于Python的信息和帮助】
开发语言·python
疯一样的码农31 分钟前
Python 继承、多态、封装、抽象
开发语言·python
^velpro^32 分钟前
数据库连接池的创建
java·开发语言·数据库
荒川之神37 分钟前
ORACLE _11G_R2_ASM 常用命令
数据库·oracle
秋の花40 分钟前
【JAVA基础】Java集合基础
java·开发语言·windows