4

我的 dbms_job 已经运行了将近三十天。

总时间不断增加,但我找不到正在运行的作业的任何信息。

当我执行“select * from dba_jobs;”的 sql 时,结果显示没有作业正在运行。

我将它设置为损坏,但它不起作用。

我怎样才能安全地停止这个 dbms_job?

工作信息

4

3 回答 3

4

DBA_JOBS列出在数据库中创建的所有作业。您可以使用DBA_JOBS_RUNNINGview 列出当前在实例中运行的所有作业。

当我执行“select * from dba_jobs;”的 sql 时,结果显示没有作业正在运行。

这显示了使用DBMS_JOBS包创建的所有作业。该作业可能是使用DBMS_SCHEDULER包创建的。

SQL> select job from user_jobs;

       JOB
----------
        99

我只使用DBMS_JOB名为99. 其他是使用DBMS_SCHEDULER包创建的,可以使用以下命令查看:

SQL> select job_name from user_scheduler_jobs;

根据文档-

停止作业

请注意,一旦作业启动并运行,就没有简单的方法来停止作业。

停止工作并不容易。

不知道您使用的是哪个版本的 Oracle 数据库。但从 Oracle 10g 开始,您可以使用以下查询列出计划的作业。

SQL>select * from all_scheduler_jobs;

ALL_SCHEDULER_JOBS

ALL_SCHEDULER_JOBS 显示有关当前用户可访问的调度程序作业的信息。更多的...


使用以下查询查找当前正在运行的作业。

SQL>select job_name, session_id, running_instance, elapsed_time, cpu_used
from user_scheduler_running_jobs;

并停下来——

SQL>EXEC DBMS_SCHEDULER.STOP_JOB (job_name => 'JOB_NAME');
于 2016-12-06T07:44:09.987 回答
1

没有杀死会话,你就不走运了。

文档

请注意,一旦作业启动并运行,就没有简单的方法来停止作业。

这是您不应再使用的众多原因之一dbms_job。改为使用dbms_scheduler

于 2016-12-06T07:29:48.123 回答
0

在“select * from DBA_JOBS_RUNNNG”中签出 SID,即会话 ID 会终止该会话,并且它的更改将被回滚,因此如果批量更新完成 90%,它可能需要“更多”时间来中止而不是让它完成......

于 2020-01-16T06:21:28.810 回答