工作中可能遇到这样的情况,在A用户下有一个不用的job,但是dba不知道A用户的密码,怎么删除这个job呢。
 
相信大部分人都会尝试在sys用户下用dbms_job.remove()命令去删除它,但是会报错
sys用户下
SQL> exec dbms_job.remove(70);
BEGIN dbms_job.remove(70); END;
 
*
ERROR at line 1:
ORA-23421: job number 70 is not a job in the job queue
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "SYS.DBMS_IJOB", line 680
ORA-06512: at "SYS.DBMS_JOB", line 174
ORA-06512: at line 1
 
 
还是在sys用户下,使用dbms_ijob.remove()就可以删除
SQL>  exec dbms_ijob.remove(70);
 
PL/SQL procedure successfully completed.
 
 
那么,到底dbms_job和dbms_ijob到底怎么用,彼此有什么区别呢?下面用实验证明。
 
一、sys用户使用dbms_ijob为hou用户创建job
1.查看dbms_ijob.submit的书写格式
 
sys用户下desc dbms_ijob
 
PROCEDURE SUBMIT
Argument Name               Type               In/Out Default?
------------------------------ ----------------------- ------ --------
JOB                    BINARY_INTEGER          IN
LUSER                    VARCHAR2          IN    -->     Login user when the job was submitted
PUSER                    VARCHAR2          IN    -->   User whose default privileges apply to this job
CUSER                    VARCHAR2          IN    -->   schema_user
NEXT_DATE               DATE               IN
INTERVAL               VARCHAR2          IN
BROKEN                BOOLEAN           IN
WHAT                    VARCHAR2          IN    -->procedure
NLSENV                VARCHAR2          IN
ENV                    RAW               IN
 
 
2.hou用户下创建一个简单存储过程
SQL> conn hou/  
Enter password:
Connected.
SQL>  create table test(a date);
 
Table created.
 
SQL> create or replace procedure pro_insert_date as
begin
insert into test values(sysdate);
end;
/  2    3    4    5 
 
Procedure created.
 
 
3.sys用户为hou创建5号job
SQL> conn / as sysdba
Connected.
SQL> begin
dbms_ijob.submit(5,'HOU','HOU','HOU',
to_date('2012-09-29 12:30:00','YYYY-MM-DD HH24:MI:SS'),'sysdate+1',false,'pro_insert_date;',
'NLS_LANGUAGE=''SIMPLIFIED CHINESE'' NLS_TERRITORY=''CHINA'' NLS_CURRENCY=''¥'' NLS_ISO_CURRENCY=''CHINA'' NLS_NUMERIC_CHARACTERS=''.,'' NLS_DATE_FORMAT=''yyyy-mm-dd hh24:mi:ss'' NLS_DATE_LANGUAGE=''SIMPLIFIED CHINESE'' NLS_SORT=''BINARY''',
'0102000200000000');
commit;
end;
/
匿名块已完成
 
 
或者写成
begin
dbms_ijob.submit(5,'HOU','HOU','HOU',
to_date('2012-09-29 12:30:00','YYYY-MM-DD HH24:MI:SS'),'sysdate+1',false,'pro_insert_date;',
'NLS_LANGUAGE=''SIMPLIFIED CHINESE'' NLS_TERRITORY=''CHINA'' '||
'NLS_CURRENCY=''¥'' NLS_ISO_CURRENCY=''CHINA'' '||
'NLS_NUMERIC_CHARACTERS=''.,'' '||
'NLS_DATE_FORMAT=''YYYY-MM-DD HH24:MI:SS'' '||
'NLS_DATE_LANGUAGE=''SIMPLIFIED CHINESE'' NLS_SORT=''BINARY'' ',
'0102000200000000');
commit;
end;
/
 
 
 
注意:1.dbms_ijob.submit创建job时,只能手动指定job号。
      2.书写顺序要按照上面的顺序。
      3.用户名一定要大写。
 
注意:上面两条写法是在sql developer中能够执行成功。在sqlplus下无法执行成功,由于涉及到中文货币符号,在这里也就是NLS_CURRENCY=''¥''。
想要在sqlplus下执行成功,将¥换成$即可。至于如何能够在sqlplus下使用中文货币符号,还需要再研究。
 
 
 
4.登录到hou用户查看5号job的情况
SQL> conn hou/
Enter password:
Connected.
SQL> select job,what,LOG_USER,PRIV_USER,SCHEMA_USER,to_char(last_date,'YYYY-MM-DD HH24:MI:SS'),to_char(next_date,'YYYY-MM-DD HH24:MI:SS'),interval,broken,failures from user_jobs;
 
       JOB WHAT                  LOG_USER   PRIV_USER     SCHEMA_USE TO_CHAR(LAST_DATE,' TO_CHAR(NEXT_DATE,' INTERVAL          B   FAILURES
---------- ------------------------------ ---------- ---------- ---------- ------------------- ------------------- -------------------- - ----------
     5 pro_insert_date;            HOU          HOU     HOU        2012-09-29 14:42:14 2012-09-30 14:42:14 sysdate+1          N        0
 
 
 
可以看到,sys用户通过dbms_ijob已经为hou用户创建了job。
 
 
二、执行5号job
1.在hou用户下
SQL> conn hou
Enter password:
Connected.
SQL> exec dbms_job.run(5);
 
PL/SQL procedure successfully completed.
 
2.在sys用户下执行
SQL> conn / as sysdba
Connected.
SQL> exec dbms_ijob.run(5);
 
PL/SQL procedure successfully completed.
 
 
sys通过dbms_ijob.submit为其他用户创建的job,sys和job所在的用户都可以执行。
 
 
 
三、修改job
1.hou用户修改job的执行间隔时间(interval)和下次执行时间(next_day)
SQL> exec dbms_job.interval(5,'sysdate+2');
 
PL/SQL procedure successfully completed.
 
查看job情况
SQL>  select job,what,LOG_USER,PRIV_USER,SCHEMA_USER,to_char(last_date,'YYYY-MM-DD HH24:MI:SS'),to_char(next_date,'YYYY-MM-DD HH24:MI:SS'),interval,broken,failures from user_jobs;
 
       JOB WHAT                  LOG_USER   PRIV_USER     SCHEMA_USE TO_CHAR(LAST_DATE,' TO_CHAR(NEXT_DATE,' INTERVAL          B   FAILURES
---------- ------------------------------ ---------- ---------- ---------- ------------------- ------------------- -------------------- - ----------
     5 pro_insert_date;            HOU          HOU     HOU        2012-09-29 14:45:50 2012-09-30 14:45:50 sysdate+2          N        0
 
 
修改next_day
SQL> exec dbms_job.next_date(5,sysdate+1/24);
 
PL/SQL procedure successfully completed.
 
SQL> commit;
 
Commit complete.
 
 
 
 
 
2.sys用户
SQL> exec dbms_ijob.interval(5,'sysdate+2');
 
PL/SQL procedure successfully completed.
 
SQL> commit;
 
Commit complete.
 
 
修改next_day
SQL>  exec dbms_ijob.next_date(5,sysdate+5);
 
PL/SQL procedure successfully completed.
 
SQL> commit;
 
Commit complete.
 
 
 
四.中断job
1.hou用户
SQL> exec dbms_job.broken(5,true);
 
PL/SQL procedure successfully completed.
 
SQL> commit;
 
Commit complete.
 
SQL>
SQL>  select job,what,LOG_USER,PRIV_USER,SCHEMA_USER,to_char(last_date,'YYYY-MM-DD HH24:MI:SS'),to_char(next_date,'YYYY-MM-DD HH24:MI:SS'),interval,broken,failures from user_jobs;
 
       JOB WHAT                  LOG_USER   PRIV_USER     SCHEMA_USE TO_CHAR(LAST_DATE,' TO_CHAR(NEXT_DATE,' INTERVAL          B   FAILURES
---------- ------------------------------ ---------- ---------- ---------- ------------------- ------------------- -------------------- - ----------
     5 pro_insert_date;            HOU          HOU     HOU        2012-09-29 14:45:50 4000-01-01 00:00:00 sysdate+2          Y        0
 
 
2.sys用户
SQL> exec dbms_ijob.broken(5,true);
 
PL/SQL procedure successfully completed.
 
SQL> commit;
 
Commit complete.
 
SQL> conn hou
Enter password:
Connected.
SQL>  select job,what,LOG_USER,PRIV_USER,SCHEMA_USER,to_char(last_date,'YYYY-MM-DD HH24:MI:SS'),to_char(next_date,'YYYY-MM-DD HH24:MI:SS'),interval,broken,failures from user_jobs;
 
       JOB WHAT                  LOG_USER   PRIV_USER     SCHEMA_USE TO_CHAR(LAST_DATE,' TO_CHAR(NEXT_DATE,' INTERVAL          B   FAILURES
---------- ------------------------------ ---------- ---------- ---------- ------------------- ------------------- -------------------- - ----------
     5 pro_insert_date;            HOU          HOU     HOU        2012-09-29 14:45:50 4000-01-01 00:00:00 sysdate+2          Y        0
 
 
五.删除job
1.hou用户
SQL> exec dbms_job.remove(5);
 
PL/SQL procedure successfully completed.
 
SQL> select job,what,LOG_USER,PRIV_USER,SCHEMA_USER,to_char(last_date,'YYYY-MM-DD HH24:MI:SS'),to_char(next_date,'YYYY-MM-DD HH24:MI:SS'),interval,broken,failures from user_jobs;
 
no rows selected
 
 
2.sys用户
SQL> exec dbms_ijob.remove(5);
 
PL/SQL procedure successfully completed.
 
SQL> commit;
 
Commit complete.
 
 
SQL> conn hou
Enter password:
Connected.
SQL> select job,what,LOG_USER,PRIV_USER,SCHEMA_USER,to_char(last_date,'YYYY-MM-DD HH24:MI:SS'),to_char(next_date,'YYYY-MM-DD HH24:MI:SS'),interval,broken,failures from user_jobs;
 
no rows selected
 
 
 
总结:
1.dbms_job只能在当期用户内创建job、修改和删除job,不能对其他用户的job进行操作;sys用户也无法用dbms_job管理其他用户的job。
2.dbms_ijob只能由sys用户去执行,拥有DBA权限的用户都没有权限去执行它。
3.通过dbms_ijob sys用户可以给其他用户创建job,且job在该用户下,在该用户内可以通过user_jobs视图看到。
4.通过dbms_ijob sys用户能够对其他用户中的job进行删除、修改。
5.sys用户通过dbms_ijob给X用户创建job,那么X用户对该job拥有修改和删除的权限。
 
 
dbms_ijob书写格式:
1.创建job
begin
dbms_ijob.submit(jobnu,' LUSER  ',' PUSER ',' CUSER ',
next day,'interval',false,'procedure_name;',
'NLS_LANGUAGE=''SIMPLIFIED CHINESE'' NLS_TERRITORY=''CHINA'' '||
'NLS_CURRENCY=''¥'' NLS_ISO_CURRENCY=''CHINA'' '||
'NLS_NUMERIC_CHARACTERS=''.,'' '||
'NLS_DATE_FORMAT=''YYYY-MM-DD HH24:MI:SS'' '||
'NLS_DATE_LANGUAGE=''SIMPLIFIED CHINESE'' NLS_SORT=''BINARY'' ',
'0102000200000000');
commit;
end;
/
 
2.执行job
exec dbms_ijob.run(jobnumber);
 
3.修改job的间隔时间(interval)
 exec dbms_ijob.interval(5,'sysdate+2');
 
4.修改job的下次执行时间
 exec dbms_ijob.next_date(5,sysdate+5);
 
5.中断job
exec dbms_ijob.broken(5,true);
 
6.删除job
exec dbms_ijob.remove(5); 

dbms_job和dbmsi_job的更多相关文章

  1. oracle dbms_JOB

    添加一个任务,怎么老是报错 [SQL] DECLARE job1 number; begin dbms_job.submit(job1,'RESTUDY_SCORE_IMPORT',sysdate,' ...

  2. dbms_job.submit 单次执行

    DBMS_JOB.SUBMIT用于定时任务,基本用法如下: DBMS_JOB.SUBMIT(:jobno,//job号                                      'yo ...

  3. ORACLE数据库DBMS_JOB的创建与使用

    http://my.oschina.net/u/2309120/blog/371437 创建 DBMS_JOB 使用以下语句: VARIABLE jobno number;begin DBMS_JOB ...

  4. oracle 定时任务(DBMS_JOB)

    示例如下: -- 每隔一分钟执行存储过程p1 create or replace procedure p2 as job_num number; begin dbms_job.submit(job_n ...

  5. DBMS_SCHEDULER and DBMS_JOB

    引用原文:http://foolraty.iteye.com/blog/1107803 For DBMS_JOB usage:To find out more information about th ...

  6. dbms_job涉及到的知识点

    用于安排和管理作业队列,通过使用作业,可以使ORACLE数据库定期执行特定的任务. 一.dbms_job涉及到的知识点1.创建job:variable jobno number;dbms_job.su ...

  7. dbms_job dbms_scheduler简单比较

    ---------------------------陈旧的-------------------------------------/*--------------------- 创建job --- ...

  8. 关于oracle dbms_job 定时执行的内容。

    一.设置初始化参数 job_queue_processessql> alter system set job_queue_processes=n;(n>0)job_queue_proces ...

  9. 踩坑系列の Oracle dbms_job简单使用

    二话不说先上代码 --创建存储过程 create or replace procedure job_truncateState is begin --此处就是要定时执行的sql execute imm ...

随机推荐

  1. java split函数用法(转)

    1.语法如下 String.split(sourceStr,maxSplit) String.split(sourceStr) 参数说明:sourceStr是被分割的字符串,maxSplit是最大的分 ...

  2. 常见shell操作

    一.find命令详细 find命令 -- 之查找指定时间内修改过的文件 比如我们要查找linux下指定时间内做过改动的文件,我们可以用find命令,其实find命令的功能十分强大,下面我们通过几个简单 ...

  3. UVALive 5135 Mining Your Own Business 双连通分量 2011final

    题意:n条隧道由一些点连接而成,其中每条隧道链接两个连接点.任意两个连接点之间最多只有一条隧道.任务就是在这些连接点中,安装尽量少的太平井和逃生装置,使得不管哪个连接点倒塌,工人都能从其他太平井逃脱, ...

  4. bss 概念

    BSS段 在采用段式内存管理的架构中,BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS ...

  5. 集成电路中的assert和deassert应该如何翻译?

    转载自:http://m.blog.csdn.net/blog/code_robot/37663085 我每次看到电路中的assert与deassert时,总是感觉别扭,因为词典翻译总是"断 ...

  6. 用g++ 编译 ffmpeg 编译出现 error: 'UINT64_C' was not declared in this scope 或 missing -D__STDC_CONSTANT_MACROS

    在 libavutil/common.h 下 添加如下,即可解决 #ifdef __cplusplus#define __STDC_CONSTANT_MACROS#ifdef _STDINT_H#un ...

  7. hdoj 3549 Flow Problem【网络流最大流入门】

    Flow Problem Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  8. jQuery获取鼠标移动方向

      <!doctype html>   <html>       <head>   <meta http-equiv="Content-Type&q ...

  9. PAT 07-图6 旅游规划 (25分)

    有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...

  10. Hibernate继承映射

    在面向对象的程序领域中,类与类之间是有继承关系的,例如Java世界中只需要extends关键字就可以确定这两个类的父子关系,但是在关系数据库的世界中,表与表之间没有任何关键字可以明确指明这两张表的父子 ...