如何删除user(schema)?
如果想要快速的删除一个Schema下的所有数据库对象,您会使用什么样的手段来完成呢?
如果您是DBA,可能更倾向于先删除用户(Drop User)然后再重新创建用户。
优点:删除的彻底,不留任何痕迹(这是DBA伟大和危险的真实体现)。
缺点:要求的操作权限比较高,往往需要DBA亲力亲为;有一定误操作的风险;不便于书写到自动化脚本中,因为在当前用户有session连接的情况下是无法实现用户删除的。
如果drop user 用户名: 时出现下边的错误:
情况 1.
12:19:13 [DROP - 0 row(s), 0.000 secs] [Error Code: 1922, SQL State: 42000] ORA-01922: CASCADE must be specified to drop 'MIKE'
drop user 用户名 cascade;
注意:
drop user xx :只是删除用户
drop user xx cascade :会删除此用户名下的所有表和视图
情况 2.
SQL〉DROPUSERmike01CASCADE
ERROR:ORA-01940: cannotdropauserthatiscurrently connected
由于当前用户正连接到数据库,所以无法删除
解决办法:
1) 查询此用户的会话进程,
SQL〉SELECTSID,SERIAL#FROMV$SESSIONWHEREUSERNAME='mike01';
SID SERIAL#
---------- ----------
24 25341
86 18117
2) 结束此用户的所有会话
SQL>ALTERSYSTEM KILL SESSION'24,25341';
System altered.
SQL>ALTERSYSTEM KILL SESSION'86,18117';
System altered.
3) 删除用户
SQL〉DROPUSERUSER1CASCADE;
如果您是一名开发人员,可能会倾向于使用开发工具(如Toad、PL/SQL Developer等)点选的方式完成清理工作。
优点:要求权限不高,如果工具功能掌握熟练可以较快的完成删除任务。
缺点:无法实现自动化和批量操作的目的,人工成本太高,效率极低;存在工具软件异常假死的现象,不推荐使用。