读书人

ORA-01940 怎么drop user

发布时间: 2013-04-02 12:35:26 作者: rapoo

ORA-01940 如何drop user
使用drop user bpmuser cascade时遇到以下问题

18:03:13 [DROP - 0 row(s), 0.000 secs] [Error Code: 1940, SQL State: 42000] ORA-01940: cannot drop a user that is currently connected
... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec [0 successful, 0 warnings, 1 errors]

查看session中是否存在BPMUSER, 注意这里区分大小写, 小写查不出来!!!
select * from v$session where username='BPMUSER'
select sid,serial# from v$session where username='BPMUSER'

方法一. 如果在远程客户端, 可以用alter system kill session [sid],[serial#];

比如,

SQL> select p.addr from v$process p where pid <> 1  2  minus  3  select s.paddr from v$session s;ADDR--------542B70E8542B7498





Ok,现在我们获得了进程地址,就可以在v$process中找到spid,然后可以使用Kill或者orakill在系统级来杀掉这些进程.

实际上,我猜测:

当在Oracle中kill session以后, Oracle只是简单的把相关session的paddr 指向同一个虚拟地址.

此时v$process和v$session失去关联,进程就此中断.

然后Oracle就等待PMON去清除这些Session.所以通常等待一个被标记为Killed的Session退出需要花费很长的时间.

如果此时被Kill的process,重新尝试执行任务,那么马上会收到进程中断的提示,process退出,此时Oracle会立即启动PMON
来清除该session.这被作为一次异常中断处理.

读书人网 >操作系统

热点推荐