各位好,我最近的一个项目用的oracle10g数据库,但是EM中的顶级SQL中总是有一条SQL 占用很大资源,KILL掉后又马上出来,请大家帮忙看看。以下就是这个SQL,是SYSMAN用户下执行的SELECT CURRENT_STATUS FROM MGMT_CURRENT_AVAILABILITY WHERE TARGET_GUID IN (SELECT TARGET_GUID FROM MGMT_TARGETS WHERE EMD_URL = :B1 ) ORDER BY TARGET_GUID FOR UPDATE忘记说了:网上查了半天也没个结果,有人说做一个exec dbms_stats.gather_schema_stats('SYSMAN') 就好了,但是我做了还是出现这个SQL,求高手!!!!!

解决方案 »

  1.   

    为什么后面要带个for update呢,,加个nowait试试?SELECT CURRENT_STATUS FROM MGMT_CURRENT_AVAILABILITY WHERE TARGET_GUID IN (SELECT TARGET_GUID FROM MGMT_TARGETS WHERE EMD_URL = :B1 ) ORDER BY TARGET_GUID FOR UPDATE nowait
      

  2.   

    在使用for update时候最好上nowait
    当有LOCK冲突时会提示错误并结束而不是在那里等待(比如:要查的行已经被其它事务锁了,当前的锁事务与之冲突,加上nowait,当前的事务会结束会提示错误并立即结束 STATEMENT而不再等待).
    如果加了for update后 该语句用来锁定特定的行(如果有where子句,就是满足where条件的那些行)。当这些行被锁定后,其他会话可以选择这些行,但不能更改或删除这些行,直到该语句的事务被commit语句或rollback语句结束为止。
      

  3.   

    可能是我没有表述清楚,我的使用的是一个独立创建的A用户,SYSMAN这个用户根本就没有用过,但是不知道为什么总出现,还有我用SYS用户将所有JOB都停了,但是这个还在执行,晕死了!
    SELECT CURRENT_STATUS FROM MGMT_CURRENT_AVAILABILITY WHERE TARGET_GUID IN (SELECT TARGET_GUID FROM MGMT_TARGETS WHERE EMD_URL = :B1 ) ORDER BY TARGET_GUID FOR UPDATE 
      

  4.   

    这问题你的找ORACLE厂商,建议你重新安装数据库
      

  5.   

    按照oracle的意思,oem是费不了多少的资源。如果不用可以停止掉
    emctl stop dbconsole