我的 dbms_job 已经运行了将近三十天。
总时间不断增加,但我找不到正在运行的作业的任何信息。
当我执行“select * from dba_jobs;”的 sql 时,结果显示没有作业正在运行。
我将它设置为损坏,但它不起作用。
我怎样才能安全地停止这个 dbms_job?
DBA_JOBS
列出在数据库中创建的所有作业。您可以使用DBA_JOBS_RUNNING
view 列出当前在实例中运行的所有作业。
当我执行“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');
在“select * from DBA_JOBS_RUNNNG”中签出 SID,即会话 ID 会终止该会话,并且它的更改将被回滚,因此如果批量更新完成 90%,它可能需要“更多”时间来中止而不是让它完成......