ora-28014:cannot drop administrative users

本文介绍了解决Oracle数据库中ORA-28014错误的方法,该错误通常发生在尝试删除管理员用户时。通过设置特殊参数,可以成功执行删除操作。

一套cdb环境的12.2库,开发人员想删掉当时建的一个用户,

报错如下:ora-28014:cannot drop administrative users

查了下解决方案:

alter session set "_oracle_script"=true;

然后再执行drop user xxx cascade操作即可。

-------------------------------------------

ps:加班,不想写那么多,烦!

Oracle 数据库中,当尝试删除一个用户时,如果该用户当前正在连接到数据库,会遇到 `ORA-01940: cannot drop a user that is currently connected` 错误。此错误表明无法删除当前连接的用户,因为该用户的会话仍然活跃。 ### 解决方法 #### 方法一:终止用户会话后删除用户 要删除该用户,首先需要终止其所有活跃会话,然后执行删除操作。以下是具体步骤: 1. 查询用户当前的会话信息: ```sql SELECT sid, serial# FROM v$session WHERE username = '用户名'; ``` 替换 `'用户名'` 为目标用户的实际名称。 2. 终止用户会话: ```sql ALTER SYSTEM KILL SESSION 'sid,serial#'; ``` 使用上一步查询到的 `sid` 和 `serial#` 替换语句中的值。 3. 删除用户: ```sql DROP USER 用户名 CASCADE; ``` 此方法适用于需要保留数据库稳定性的场景,且能够明确找到并终止用户会话的情况 [^1]。 #### 方法二:重启数据库并限制用户登录 如果目标用户是关键用户或无法直接终止其会话,可以考虑在维护窗口期间重启数据库,并在重启后限制用户登录,然后删除用户。以下是具体步骤: 1. 关闭数据库: ```sql SHUTDOWN IMMEDIATE; ``` 2. 启动数据库至受限模式: ```sql STARTUP RESTRICT; ``` 3. 删除用户: ```sql DROP USER 用户名 CASCADE; ``` 4. 将数据库恢复为正常模式: ```sql ALTER SYSTEM DISABLE RESTRICTED SESSION; ``` 此方法适用于高并发环境中难以终止用户会话的情况 。 #### 方法三:使用脚本批量终止会话 如果目标用户存在多个会话,可以使用脚本批量终止会话,简化操作流程。以下是 PL/SQL 脚本示例: ```sql BEGIN FOR sess IN (SELECT sid, serial# FROM v$session WHERE username = '用户名') LOOP EXECUTE IMMEDIATE 'ALTER SYSTEM KILL SESSION ''' || sess.sid || ',' || sess.serial# || ''''; END LOOP; END; / ``` 替换 `'用户名'` 为目标用户的实际名称后运行脚本即可 。 --- ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值