首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

ORA-01940 怎么drop user

2013-04-02 
ORA-01940 如何drop user使用drop user bpmuser cascade时遇到以下问题 18:03:13[DROP - 0 row(s), 0.000

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.这被作为一次异常中断处理.

热点排行