日期:2014-05-16  浏览次数:20435 次

oracle XE ,procedure死循环导致100%CPU解决

??

???? 写了个procedure,在cursor里用loop的时候忘记写exit when了,结果用job去调度执行起来后,oracle的进程就占掉100%CPU了,shutdown了后重新startp,马上又是100%了。想用toad等工具去连都基本没反应了。没办法,只能sqlplus了,用sys用户登进去,select * from dba_jobs where broken='N';可以看到自己创建的job号21,说明这个任务没有broken,还会执行。先把它broken掉: exec dbms_job.broken(21,true); 报错:

??? *
第 1 行出现错误:
ORA-23421: 作业编号22在作业队列中不是一个作业
ORA-06512: 在 "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: 在 "SYS.DBMS_IJOB", line 529
ORA-06512: 在 "SYS.DBMS_JOB", line 245
ORA-06512: 在 line 1

怪了,明明可以看到这个任务,为什么又说不是一个作业呢?

??? 换创建任务的用户登录,执行select * from user_jobs where broken='N';仍然可以看到job21,再执行exec dbms_job.broken(21,true); 嘿嘿 ,提示“PL/SQL 过程已成功完成”。然后可以把job删掉了,exec dbms_job.remove(22); 但是发觉CPU还是100%,重启之后,正常了。哈哈~~