ORACLE系统中停止运行JOB的步骤与实例解析

需积分: 1 1 下载量 200 浏览量 更新于2024-09-12 收藏 43KB DOC 举报
在Oracle数据库管理中,停止一个运行中的job是一个常见的任务,特别是在处理突发状况或需要立即中断长时间运行的作业时。本文将详细介绍如何在Oracle环境中有效地停止一个job,包括查询job信息、确定会话、以及使用正确的命令来终止作业。 首先,了解与job管理相关的关键表和视图至关重要。`dba_jobs`表存储了所有用户的job信息,`all_jobs`是全局范围内的job列表,而`user_jobs`则只包含当前登录用户的job。当你需要实时监控正在运行的job时,`dba_jobs_running`视图非常有用,它提供了关于当前活动job的SID(会话标识符)和序列号(Serial#)等信息。 在实际操作中,确保使用具有足够权限的sys用户登录数据库,因为`dba_jobs_running`和一些内部系统表(如`v$process`和`v$session`)仅对sys用户可见。同时,在操作系统层面,建议使用Oracle用户登录,以保持一致性。 问题的背景是由于网络状况不稳定,导致无法正常完成一个超长时间的SQL插入操作,因此选择使用job来执行。然而,当发现问题后,为了防止进一步的数据错误和系统资源冲突,需要立即停止job。 要停止一个job,首先需要通过查询`dba_jobs_running`来获取正在执行的job的SID和序列号。例如,SQL语句`SELECT SID, JOB FROM DBA_JOBS_RUNNING;`将返回当前活动job的会话ID和job编号。在本例中,查询结果可能如下: ``` SID JOB -------------------- 12116 16117 ``` 接着,使用这些信息来找到对应会话,比如查询`V$SESSION`,如`SELECT SID, SERIAL# FROM V$SESSION WHERE SID = '12';`。在这里,我们发现会话ID为12的进程拥有序列号4。 一旦确定了会话信息,就可以使用`ALTER SYSTEM KILL SESSION`命令强制终止会话,如`ALTER SYSTEM KILL SESSION '12', 4;`。这将停止指定会话的所有活动,包括运行的job。 如果希望只是让job进入broken(暂停)状态,而不是完全终止,可以使用`DBMS_JOB.BROKEN`函数。例如,对于job编号116和117,分别执行`EXEC DBMS_JOB.BROKEN(116, TRUE);`和`EXEC DBMS_JOB.BROKEN(117, TRUE);`,这样job就不会再继续执行,但其数据仍保存在数据库中。 总结来说,停止Oracle job涉及查询相关表,定位会话信息,然后使用合适的命令或函数来终止作业。在实际操作时,务必确保权限正确,且理解每个步骤的作用,以避免潜在的问题和数据丢失。