我有一条查询语句:select count(*) from (select id,pid,proName from 工程表)
我执行这条语句时,ORACLE处于执行中,无法停止下来,更查不出结果,即便是关闭oracle服务也关不了,导致我的ORACLE处于高速运行停不下来,CPU使用率一直达到50%,只能重启计算机。
而我朋友的机器上执行这句话时却能执行成功,可以查出结果,这是为什么呢?高手帮忙解释一下,俺菜鸟,需要告诉帮助

解决方案 »

  1.   

    查询死锁:
    select object_name,
           machine,
           s.sid,
           p.spid,
           s.osuser,
           s.program,
           s.STATUS,
           s.ACTION,
           p.SERIAL#,
           l.SESSION_ID
      from v$locked_object l, dba_objects o, v$session s, v$process p
     where l.object_id  =  o.object_id
       and l.session_id = s.sid
       and s.paddr = p.addr;
    杀进程:
    alter system kill(l.SESSION_ID,p.SERIAL#)
      

  2.   

    查询死锁的sql楼上已经有了 直接执行就行
    查出来结果后 把session_id和SERIAL#放进去
    alter system kill session 'session_id,SERIAL#' 还有 想从根本上解决问题 就要从你的sql入手
    select count(*) from (select id,pid,proName from 工程表)
    写成select count(*),id,pid,proName from 工程表 这样会好些
    实在不行 你就select count(*) from 工程表 看看数据量
      

  3.   

    使用   ALTER SYSTEM KILL SESSION '10,20'; 
          ALTER SYSTEM KILL SESSION '12,44'; 
    也删不掉会话,程序不停的在那查询,更重要的是为什么它会死锁呢,为什么我朋友用他的机器查没有死锁,而且还能查出结果呢
      

  4.   

    你的这个查询 怎么会死锁了 在ORACLE 里面。 是不是 其他的什么 进程占据了资源
      

  5.   

    当表或数据被某些application锁住占用的时候,会出现这样的情况的
      

  6.   

    你确定查处来的sid和serial#是你当前会话的id?
    kill session的时候有什么问题,报什么错?
    试试alter system kill session '10,24' immediate
      

  7.   

    oracle的写不阻塞读,当然读更不会阻塞读了。
    所以读不存在死锁。
    可能是数据资源争用造成查询缓慢。
      

  8.   

    SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,
    l.OS_USER_NAME,l.PROCESS FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID
    用这条语句可以定位到时那个用户在服务端占用资源,导致数据库思索