如何停止Oracle dbms_job

mik*_*ang 6 database oracle dbms-job

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

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

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

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

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

职位信息

JSa*_*ota 7

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

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

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

SQL> select job from user_jobs;

       JOB
----------
        99
Run Code Online (Sandbox Code Playgroud)

我只使用DBMS_JOB名为 的包创建了一项作业99。其他是使用DBMS_SCHEDULER包创建的,可以使用以下命令查看:

SQL> select job_name from user_scheduler_jobs;
Run Code Online (Sandbox Code Playgroud)

根据文档 -

停止作业

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

停止工作并不容易。

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

SQL>select * from all_scheduler_jobs;
Run Code Online (Sandbox Code Playgroud)

ALL_SCHEDULER_JOBS

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


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

SQL>select job_name, session_id, running_instance, elapsed_time, cpu_used
from user_scheduler_running_jobs;
Run Code Online (Sandbox Code Playgroud)

并停止-

SQL>EXEC DBMS_SCHEDULER.STOP_JOB (job_name => 'JOB_NAME');
Run Code Online (Sandbox Code Playgroud)

  • `xxx_JOBS` 和 `xxx_SCHEDULER_JOBS` 是两个完全不同的野兽。前者已经存在多年并且已经过时,后者是继任者。 (2认同)

Fra*_*itt 2

如果不终止会话,你就运气不好了。

来自文档

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

这是您不应再使用的众多原因之一dbms_jobdbms_scheduler代替使用。