你在你的os中有一個"本機安全性原則"_____>"以批次工作登入"
你設置了沒有。

解决方案 »

  1.   

    spfile(sid).ora是一个二进制文件,不允许手工修改。要想修改参数,使用alter system或alter session命令,例:
    SQL>alter system set job_queue_interval=10
      

  2.   

    我按照你的方法返回错误ora-25138 job_queue_interval初始化参数已废弃
      

  3.   

    9i以后只有job_queue_processes参数,是我写错啦!
    SQL>alter system set job_queue_processes=10 scope=spfile;
      

  4.   

    我的spfile文件里面已经有job_queue_processes=10这个参数了,别的还会是什么原因呢?
      

  5.   

    重新启动数据库失败,不知是不是指的数据库已经无法startup了,
    这种情况只有一种原因,那就是初始化参数文件spfile(sid).ora被破坏
    或添加了无效的参数。解决办法:
    c:/>sqlplus /nolog
    SQL>Conn sys/password as sysdba
    SQL>startup pfile='.../oracle/ora92/database/init(sid).ora'  
                            --利用pfile参数文件init(sid).ora启动数据库
    SQL>create spfile from pfile;    --创建新的spfile参数文件
    SQL>shutdown immediate;          --重新启动数据库
    SQL>startup
      

  6.   

    呵呵,我的意思你可能还没明白,我说的重启数据库失败是在我的spfile(sid).ora文件里添加参数job_queue_interval = 10之后,我的系统是oracle9i.象你说的那样9i的spfile(sid).ora文件只有job_queue_processes = 10这个参数的话,那作业不自动执行应该是其他的原因。
        兄台功力深厚,能不能告知是什么原因?
      

  7.   

    你手工修改了spfile(sid).ora文件并在里添加了参数job_queue_interval=10,
    启动数据库肯定失败啦!!!spfile(sid).ora是一个二进制文件,不允许手工修改。
    要想修改参数,必须在startup数据库以后,使用alter system或
    alter session命令,例:
    SQL>alter system set ...另一种方法是手工修改init(sid).ora,再
    SQL>create spfile from pfile;
    SQL>shutdown immediate;
    SQL>startup另外关于“参数job_queue_interval=10”,
    在9i中,我怎么查都没有查到,不知你从哪儿找到的。解决方法:
    你按照上面介绍的任意一种方法,修复参数文件后再启动数据库。关于作业的问题,你可以查看视图:user_jobs,all_jobs或dba_jobs,
    再查看一下相关作业的资料,认真检查一下你的时间设定。
      

  8.   

    我要问的问题就是作业的问题,时间设置是没错的,因为每过10分钟(设置的时间间隔),NEXT_DATE就改变一次,查看作业时NEXT_DATE时间是在变的,可就是不自动执行。另外手动运行这个作业是可以执行里面的SQL语句的,问题就在于他不自动运行。
        我也看了很多的资料还是找不到原因,真是郁闷啊
      

  9.   

    看看下面的测试,也许能让我们对作业有一些理解:
    SQL> select * from test;        ID NAME       T_DATE
    ---------- ---------- -----------再执行下面的PL/SQL:
    declare 
      job_id binary_integer;
    begin
      dbms_job.submit(job_id,'insert into scott.test 
       values(1,''a'',''abc'');commit;',
         trunc(sysdate,'MI'),
          'trunc(sysdate+1/1440,''MI'')',true);
    end;
    --利用作业每分钟对表进行一次插入操作。查询视图user_jobs说明作业已经成功提交,并可以执行:SQL> select job,last_sec,next_sec from user_jobs;       JOB LAST_SEC         NEXT_SEC
    ---------- ---------------- ----------------
            52 13:19:01         13:20:00
    SQL> select * from test;        ID NAME       T_DATE
    ---------- ---------- --------------------
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc过一会儿再对user_jobs视图进行一次查询:
    SQL> select job,last_sec,next_sec from user_jobs;       JOB LAST_SEC         NEXT_SEC
    ---------- ---------------- ----------------
            52 13:20:02         13:21:00SQL> select * from test;        ID NAME       T_DATE
    ---------- ---------- --------------------
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc6 rows selected
    说明作业正在成功执行。现在查询视图dba_jobs_running,
    SQL> select count(*),sysdate from dba_jobs_running;  COUNT(*) SYSDATE
    ---------- ------------------------------
             0 2004-9-16 13:22:59
    过一会儿再执行一次查询:
    SQL> select count(*),sysdate from dba_jobs_running;  COUNT(*) SYSDATE
    ---------- ------------------------------
             0 2004-9-16 13:25:10
    从Oracle的文档中查知:
    DBA_JOBS_RUNNING lists all jobs in the database that are currently running.
    但不太明白为什么会查不到正在运行的作业。不过我们再查询一次执行Insert作业的表test;
    SQL> select * from test;        ID NAME       T_DATE
    ---------- ---------- --------------------
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc
             1 a          abc18 rows selected总结:
    1、对即将执行的作业,一定要仔细验证;
    2、对作业中执行的语句,要通过其它方式进行编译,
       并确定无误后,再在作业中运行;
    3、对作业进行测试,看是否能成功运行,例:
       SQL>exec dbms_job.run(50)  --50是作业号,通过
       --SQL>select job from user_jobs;
       --能得到,这里不仅可知作业是否可以编译,而且可
       --以查看作业运行后的结果;
    3、想知道作业是否正在执行,可以通过两种方式了解:
       一种方式:查看user_jobs视图,通过时间列的变化
       判断;二种方式:查看语句的执行结果,例如前面
       直接查询表test,可知表中的记录正在增加;
    4、作业失败的可能:编译通不过;编译通过但其中的执
       行语句有错误。但都能通过以上检测方法得到验证。
      

  10.   

    2、和3、----我手动运行是成功的,里面的语句应该没有问题
     一种方式:查看user_jobs视图,通过时间列的变化
    ----我看到一直以我设置的时间间隔值在变化
    二种方式:查看语句的执行结果
    ----结果没有任何改变,每隔10分钟去查询,一直都是老样子没有执行语句  另谢谢兄台,这个问题我也觉得很怪,不知道问题出在那里
      

  11.   

    what:
    begin
    delete from zlinc.useronline where extract(minute from systimestamp - modifydate) >= 9;
    commit;
    end;
    interval: 
    sysdate + 1/(144)
      

  12.   

    以SYS用户登陆,执行:
    1、select * from v$version;
    2、show parameter job
    把结果贴出来。
      

  13.   

    alter system set job_queue_processes=10 scope=spfile;
      

  14.   

    to:aweihz 结果如下
    SQL> select * from v$version
      2  /BANNER
    ----------------------------------------------------------------
    Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
    PL/SQL Release 9.2.0.1.0 - Production
    CORE    9.2.0.1.0       Production
    TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
    NLSRTL Version 9.2.0.1.0 - ProductionSQL> show parameter jobNAME                                 TYPE        VALUE
    ------------------------------------ ----------- --------
    job_queue_processes                  integer     10to:zgh2003  
    代码就这么多呀,一个执行的语句,一个间隔的时间,别的代码没有呀。我是使用PL/SQL developer 5.1.4的,用图形工具生成,不是用命令语句生成的,所以只需要这两个部分的语句。
      

  15.   

    给你一段代码,供参考:
    创建存储过程del_table:
    create or replace procedure del_table
    is
    begin
      delete from scott.test where rownum<11;
      commit;
    end;创建作业每分钟调用一次存储过程del_talbe代码:
    declare 
      job_id binary_integer;
    begin
      dbms_job.submit(job_id,'del_table;',
         trunc(sysdate,'MI'),
          'trunc(sysdate+1/1440,''MI'')',true);
    end;
      

  16.   

    这应该是ORACLE的一个BUG,BUG号为2649244,升级到9.2.0.4应该能解决问题。试试看吧。
      

  17.   

    找到了,是因为extract(minute from systimestamp - modifydate)会出现负值,所以不满足条件>=9,所以不执行删除操作,取绝对值就行了。很奇怪为什么systimestamp - modifydate会有负值呢?而且是在10分钟之内,得出来的值有负值也有正值,那位高手能解释一下吗?