各位如何在Oracle数据库下建立作业,把具体的操作步骤详细的列出!谢谢,着急!!!!!

解决方案 »

  1.   

    sqlplus>var :jobno number;
    sqlplus>dbms_job.submit(:jobno, 'your_procedure;', TRUNC(SYSDATE, 'DD'), 'TRUNC(SYSDATE+1,''DD'')');
    详细:http://edu.codepub.com/2009/0603/5401.php
      

  2.   

    SVRMGR> select * from dba_jobs;初始化相关参数job_queue_processes
    alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000 ;job_queue_interval = 10 //调度作业刷新频率秒为单位
    DBA_JOBS describes all jobs in the database. 
    USER_JOBS describes all jobs owned by the current user1 select job,what,to_char(last_date,'yyyy-mm-dd HH24:mi:ss'),to_char(next_date,'yyyy-mm-dd HH24:m),interval from dba_jobs where job in (325,295)
    2 select job,what,last_date,next_date,interval from dba_jobs where job in (1,3);
    查询job的情况。
    show paramter background_dump_dest.
    看alter.log 和trace
    SVRMGR> select * from dba_jobs;初始化相关参数job_queue_processes
    alter system set job_queue_processes=39 scope=spfile;//最大值不能超过1000job_queue_interval = 10 //调度作业刷新频率秒为单位
    DBA_JOBS describes all jobs in the database. 
    USER_JOBS describes all jobs owned by the current user1 select job,what,to_char(last_date,'yyyy-mm-dd HH24:mi:ss'),to_char(next_date,'yyyy-mm-dd HH24:m),interval from dba_jobs where job in (325,295)
    2 select job,what,last_date,next_date,interval from dba_jobs where job in (1,3);
    查询job的情况。
    show paramter background_dump_dest.
    看alter.log 和trace
    请问我如何停止一个JOB
    SQL> exec dbms_job.broken(1,true)PL/SQL 过程已成功完成。
    SQL>commit //必须提交否则无效启动作业
    SQL> exec dbms_job.broken(1,false)PL/SQL 过程已成功完成。停其他用户的job
    SQL>exec sys.dbms_ijob.broken(98,true);
    SQL>commit;
    ============================exec dbms_job.broken(:job) 停止
    exec dbms_job.broken(186,true) //标记位broken
    exec dbms_job.broken(186,false)//标记为非broken
    exec dbms_job.broken(186,false,next_day(sysdate,'monday')) //标记为非broken,指定执行时间
    exec dbms_job.remove(:job);删除
    exec dbms_job.remove(186);
    commit;把一个broken job重新运行
    三、查看相关job信息
    1、相关视图
    dba_jobs
    all_jobs
    user_jobs
    dba_jobs_running 包含正在运行job相关信息
    创建JOB
    variable jobno number;
    begin
    dbms_job.submit(:jobno, 'statspack.snap;', trunc(sysdate+1/24,'HH'), 'trunc(SYSDATE+1/24,''HH'')', TRUE, :instno);
    commit;
    end;
    print jobno例如,我们已经建立了一个存储过程,其名称为my_job,在sql/plus中以scott用户身份登录,执行如下命令: 
    sql> variable n number; 
    sql> begin 
    dbms_job.submit(:n‘my_job;’,sysdate, 
    ‘sysdate+1/360’); 
    commit; 
    end;
    Sql> print :n;系统提示执行成功。 
    Sql> print :n; 
    系统打印此任务的编号,例如结果为300。
    简单例子
    一个简单例子:创建测试表
    SQL> create table TEST(a date);表已创建。创建一个自定义过程
    SQL> create or replace procedure MYPROC as
    2 begin
    3 insert into TEST values(sysdate);
    4 end;
    5 /过程已创建。创建JOB
    SQL> variable job1 number;
    SQL> 
    SQL> begin
    2 dbms_job.submit(:job1,'MYPROC;',sysdate,'sysdate+1/1440');  --每天1440分钟,即一分钟运行test过程一次
    3 end;
    4 /PL/SQL 过程已成功完成。运行JOB
    SQL> begin
    2 dbms_job.run(:job1);
    3 end;
    4 /PL/SQL 过程已成功完成。SQL> select to_char(a,'yyyy/mm/dd hh24:mi:ss') 时间 from TEST;时间
    -------------------
    2001/01/07 23:51:21
    2001/01/07 23:52:22
    2001/01/07 23:53:24删除JOB
    SQL> begin
    2 dbms_job.remove(:job1);
    3 end;
    4 /PL/SQL 过程已成功完成。=======================================
    a、利用dbms_job.run()立即执行该job
       sql>begin
       sql>dbms_job.run(:jobno) 该jobno为submit过程提交时返回的job number
       sql>end;
       sql>/
    b、利用dbms_job.broken()重新将broken标记为false
       sql>begin
       sql>dbms_job.broken (:job,false,next_date)
       sql>end;
       sql>/
    ========================================
    SQL> create table a(a date);
    Table created创建一个过程
    SQL> create or replace procedure test as
    2 begin
    3 insert into a values(sysdate);
    4 end;
    5 /
    Procedure created提交作业
    SQL> declare
    2 job1 number;   //定义一个数字型变量
    3 begin
    4 dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440'); //按分钟算一天1440分钟
    5 end;
    6 /
    PL/SQL procedure successfully completed
    job1
    ---------
    4
    SQL> commit;
    Commit complete运行作业
    SQL> begin
    2 dbms_job.run(4);
    3 end;
    4 /
    PL/SQL procedure successfully completed删除作业
    SQL> begin
    2 dbms_job.remove(4);
    3 end;
    4 /
    PL/SQL procedure successfully completed
    SQL> commit;
    Commit complete
    job change//修改作业
    execute dbms_job.change(186,null,null,'sysdate+3');
    execute dbms_job.change(186,'scott.test(update)');
    DBA_JOBS
    ===========================================
    字段(列)          类型                 描述 
    JOB                NUMBER          任务的唯一标示号 
    LOG_USER           VARCHAR2(30)    提交任务的用户 
    PRIV_USER          VARCHAR2(30)    赋予任务权限的用户 
    SCHEMA_USER        VARCHAR2(30)    对任务作语法分析的用户模式 
    LAST_DATE          DATE            最后一次成功运行任务的时间 
    LAST_SEC           VARCHAR2(8)     如HH24:MM:SS格式的last_date日期的小时,分钟和秒 
    THIS_DATE     DATE            正在运行任务的开始时间,如果没有运行任务则为null 
    THIS_SEC     VARCHAR2(8)     如HH24:MM:SS格式的this_date日期的小时,分钟和秒 
    NEXT_DATE          DATE            下一次定时运行任务的时间 
    NEXT_SEC           VARCHAR2(8)     如HH24:MM:SS格式的next_date日期的小时,分钟和秒 
    TOTAL_TIME         NUMBER          该任务运行所需要的总时间,单位为秒 
    BROKEN             VARCHAR2(1)     标志参数,Y标示任务中断,以后不会运行 
    INTERVAL           VARCHAR2(200)   用于计算下一运行时间的表达式 
    FAILURES    NUMBER     任务运行连续没有成功的次数 
    WHAT               VARCHAR2(2000) 执行任务的PL/SQL块 
    CURRENT_SESSION_LABEL RAW          MLSLABEL 该任务的信任Oracle会话符 
    CLEARANCE_HI      RAW MLSLABEL     该任务可信任的Oracle最大间隙 
    CLEARANCE_LO      RAW              MLSLABEL 该任务可信任的Oracle最小间隙 
    NLS_ENV           VARCHAR2(2000)   任务运行的NLS会话设置 
    MISC_ENV          RAW(32)          任务运行的其他一些会话参数描述                    INTERVAL参数值 
    每天午夜12点            'TRUNC(SYSDATE + 1)' 
    每天早上8点30分         'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' 
    每星期二中午12点         'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24' 
    每个月第一天的午夜12点    'TRUNC(LAST_DAY(SYSDATE ) + 1)' 
    每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24' 
    每星期六和日早上6点10分    'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'
      

  3.   

    10g以后都用dbms_schedule_job了(凭记忆写的, 不知道拼错否)