今天有位客户在使用plsql/devleop编译存储过程时老是导致整个操作界面hang住长时间无法响应,以下是我的处理过程,简要记录之。
原因:
应用编写了一个存储过程,在执行job后,几小时内都没有数据传入,同时job执行已达17小时,正当客户kill时,发现报
ORA-27478: job "" is running
ORA-06512: at "SYS.DBMS_ISCHED", line 182
ORA-06512: at "SYS.DBMS_SCHEDULER", line 615
ORA-06512: at line 1
ORA-27366: job "" is not running
ORA-06512: at "SYS.DBMS_ISCHED", line 168
ORA-06512: at "SYS.DBMS_SCHEDULER", line 515
ORA-06512: at line 1
第一步、通过查询v$session视图确定hang住的会话相关信息
第二步、dba_jobs_running和dba_scheduler_running_jobs数据字典确定了该job调用方式为scheduler
select job_name,session_id,cpu_used from dba_scheduler_running_jobs where owner='XXX'
第三步、通过job_name停掉
首先使用 :dbms_scheduler.disable
其次使用:dbms_schedule.stop_job
最后使用:dbms_scheduler_enable
注意:前两者使用时都要加参数参数'force=>true'
在MOS中提到,有可能是网络阻塞,或者是应用瓶颈,当然也有可能是BUG
错误的使用方法:
SQL> exec DBMS_SCHEDULER.DROP_JOB( job_name => 'job1', force => TRUE );
BEGIN DBMS_SCHEDULER.DROP_JOB( job_name => 'job1', force => TRUE ); END;
*
ERROR at line 1:
ORA-27475: "DEV.JOB1" must be a job
ORA-06512: at "SYS.DBMS_ISCHED", line 178
ORA-06512: at "SYS.DBMS_SCHEDULER", line 544
ORA-06512: at line 1
SQL>select job_name from dba_scheduler_jobs where job_name ='job1';
JOB_NAME
——————————
job1
正确使用方法:
SQL>exec DBMS_SCHEDULER.CREATE_JOB (job_name=>'"job1"',job_type => 'PLSQL_BLOCK',job_action => 'begin null; end;');
PL/SQL procedure successfully completed.
SQL>select job_name from dba_scheduler_jobs where job_name ='job1';
JOB_NAME
——————————
job1
SQL>exec DBMS_SCHEDULER.drop_JOB (job_name=>'"job1"', force=>TRUE);
PL/SQL procedure successfully completed.
dbms_scheduler.disable 使用:注意根据版本添加'force=>true
SQL> execute dbms_scheduler.disable('AUTO_SPACE_ADVISOR_JOB');
SQL> execute dbms_scheduler.disable('job1, job2, sys.jobclass1');
原因:
应用编写了一个存储过程,在执行job后,几小时内都没有数据传入,同时job执行已达17小时,正当客户kill时,发现报
ORA-27478: job "" is running
ORA-06512: at "SYS.DBMS_ISCHED", line 182
ORA-06512: at "SYS.DBMS_SCHEDULER", line 615
ORA-06512: at line 1
ORA-27366: job "" is not running
ORA-06512: at "SYS.DBMS_ISCHED", line 168
ORA-06512: at "SYS.DBMS_SCHEDULER", line 515
ORA-06512: at line 1
第一步、通过查询v$session视图确定hang住的会话相关信息
第二步、dba_jobs_running和dba_scheduler_running_jobs数据字典确定了该job调用方式为scheduler
select job_name,session_id,cpu_used from dba_scheduler_running_jobs where owner='XXX'
第三步、通过job_name停掉
首先使用 :dbms_scheduler.disable
其次使用:dbms_schedule.stop_job
最后使用:dbms_scheduler_enable
注意:前两者使用时都要加参数参数'force=>true'
在MOS中提到,有可能是网络阻塞,或者是应用瓶颈,当然也有可能是BUG
|
| B - Defect | 11.2.0.2 | ||
| 2 - Severe Loss of Service | 10.2.0.4 | ||
| 80 - Development to QA/Fix Delivered Internal | 226 - Linux x86-64 | ||
| 2009-8-10 | |||
| 2015-6-23 | 3887932 | ||
| 10.2.0.4 | Generic | ||
| Oracle | 与此 Bug 相关的知识, 补丁程序和 Bug |
|
| Oracle Database Products | Oracle Database Suite | ||
| Oracle Database | 5 - Oracle Database - Enterprise Edition |
现在我们来演示下:
错误的使用方法:
SQL> exec DBMS_SCHEDULER.DROP_JOB( job_name => 'job1', force => TRUE );
BEGIN DBMS_SCHEDULER.DROP_JOB( job_name => 'job1', force => TRUE ); END;
*
ERROR at line 1:
ORA-27475: "DEV.JOB1" must be a job
ORA-06512: at "SYS.DBMS_ISCHED", line 178
ORA-06512: at "SYS.DBMS_SCHEDULER", line 544
ORA-06512: at line 1
SQL>select job_name from dba_scheduler_jobs where job_name ='job1';
JOB_NAME
——————————
job1
正确使用方法:
SQL>exec DBMS_SCHEDULER.CREATE_JOB (job_name=>'"job1"',job_type => 'PLSQL_BLOCK',job_action => 'begin null; end;');
PL/SQL procedure successfully completed.
SQL>select job_name from dba_scheduler_jobs where job_name ='job1';
JOB_NAME
——————————
job1
SQL>exec DBMS_SCHEDULER.drop_JOB (job_name=>'"job1"', force=>TRUE);
PL/SQL procedure successfully completed.
dbms_scheduler.disable 使用:注意根据版本添加'force=>true
SQL> execute dbms_scheduler.disable('AUTO_SPACE_ADVISOR_JOB');
SQL> execute dbms_scheduler.disable('job1, job2, sys.jobclass1');



转到底部
浙公网安备 33010602011771号