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

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

这个用户没了

相关推荐
mudtools14 分钟前
.NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)
c#·.net
得物技术2 小时前
MySQL单表为何别超2000万行?揭秘B+树与16KB页的生死博弈|得物技术
数据库·后端·mysql
侃侃_天下5 小时前
最终的信号类
开发语言·c++·算法
可涵不会debug6 小时前
【IoTDB】时序数据库选型指南:工业大数据场景下的技术突围
数据库·时序数据库
ByteBlossom6 小时前
MySQL 面试场景题之如何处理 BLOB 和CLOB 数据类型?
数据库·mysql·面试
麦兜*6 小时前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
Slaughter信仰6 小时前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第十章知识点问答(10题)
java·jvm·数据库
麦兜*6 小时前
MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
java·数据库·spring boot·物联网·mongodb·spring
echoarts6 小时前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust