Oracle帐户没有响应

我有一个具有user1,user2和user3帐户的Oracle实例。 昨天我能够login到所有三个帐户。 今天,我可以进入user1和user3,但user2被完全“冻结”,我不明白的某种方式。

如果我尝试使用sqlpluslogin到user2,它只是永远旋转。 它不连接,不超时,直到我按CTRL + C来杀死进程。 以user1或user3连接即时。

我想我会尝试lockinguser2,然后尝试解锁它。 查询locking用户跑了25分钟,然后我放弃了! lockinguser1然后解锁user1立即运行。

使用TOAD和连接作为DBA,我使用会话浏览器进行调查。 我find了11个连接到数据库的用户2。 其中五个似乎是我连接使用sqlplus失败的尝试。 这些连接都没有显示任何打开的游标,当前语句或任何锁。 在连接的等待选项卡10上显示“行高速cachinglocking”:

  • 等待3,000到6万之间的秒数
  • P1 = 7
  • P1文本=“cachingID”
  • P2 = 0
  • P2文本=“模式”
  • P3 = 3
  • P3文本=“请求”

其中一个联系突出,因为它似乎是非常古老的。 它显示了一个来自客户端的“SQL * Net消息”:

  • 等待秒数> 60万
  • P1 = 1413697536
  • P1文本=“驱动程序ID”
  • P2 = 1
  • P2文本=“#字节”
  • P3 = 0
  • P3 Text =“”

我无法杀死这11个会议中的任何一个。 在发出kill命令(使用TOAD,带或不带立即选项)后,它运行45-60秒,然后说“会话被标记为kill”。 但会议永远不会消失。

任何想法这意味着什么或如何我可以杀死这些会议,并恢复访问到user2帐户?

更新 :警报日志中有一些有趣的行:

2009年12月29日星期二09:37:45
警告:入站连接超时(ORA-3136)
2009年12月29日星期二10:25:45
>>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! pid=17
System State dumped to trace file [snip]\udump\ora_1988.trc
Tue Dec 29 10:54:17 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 10:55:47 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 10:56:47 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 10:57:47 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 11:12:17 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 12:06:17 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 12:26:47 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 12:27:47 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 13:46:17 2009
WARNING: inbound connection timed out (ORA-3136)
Wed Dec 30 10:02:16 2009
>>> WAITED TOO LONG FOR A ROW CACHE ENQUEUE LOCK! pid=17
System State dumped to trace file [snip]\udump\ora_1988.trc
Tue Dec 29 10:54:17 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 10:55:47 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 10:56:47 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 10:57:47 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 11:12:17 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 12:06:17 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 12:26:47 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 12:27:47 2009
WARNING: inbound connection timed out (ORA-3136)
Tue Dec 29 13:46:17 2009
WARNING: inbound connection timed out (ORA-3136)
Wed Dec 30 10:02:16 2009
>>>等待太长时间的行高速cachingENQUEUE LOCK! PID = 37
系统状态转储到跟踪文件[剪切] \ udump \ ora_2860.trc
Wed Dec 30 11:55:59 2009
orakill:试图杀死tid = 436
Wed Dec 30 11:56:04 2009
orakill:ssthreadkill(tid = 436)无法获得线程列表互斥量:err = 0

解决scheme :这似乎是一个10.2.0.3的错误,我需要重新启动实例,我没有权限做,所以我会等待几天。

尝试以下操作:

 select s.username, s.sid, p.spid from v$session s join v$process p on addr=paddr where s.username = 'USER2'; 

使用上述查询的spid值,login到服务器并从DOS命令提示符处发出以下命令:

 orakill YOURSID spid 

YOURSID是您正在处理的数据库实例的SID。

当GUI工具无法终止进程时,orakill经常起作用。 这是一个很好的概述orakill 。 注意使用orakill的理由#1 – 这也许可以解释为什么你不能使用你的GUI工具:

alter system语句不会清除存在的任何锁。 相反,会话将保持连接状态直到超时,然后会话被终止并释放锁。 orakill命令将立即杀死线程和锁。

更新:

你也可以尝试:

 select sid, serial#, program from v$session; alter system kill session '<SID>,<SERIAL#>' immediate; 

虽然我不会抱很多希望