Jobs

bind
Дата: 05.03.2011 09:36:31
Есть много Job-ов вида:
+
DECLARE jobno number;
BEGIN
    DBMS_JOB.SUBMIT(jobno,
    'BASE8."BASE8_SYSFUNC_PKG".JOB_PROCEDURE;',
    TO_DATE('суббота, Январь 01, 4000 12 00 00 AM', 'DAY, MONTH DD, YYYY HH:MI:SS AM'),
    'SYSDATE+3/86400');
COMMIT;
END;

Процедура в пакете BASE8_SYSFUNC_PKG:
+
PROCEDURE JOB_PROCEDURE
IS
  L_SESS BASE8."BASE8_HEXARRAY_TT";
BEGIN
  SELECT BASE8."INTTOHEX"(SID,4)
    || BASE8."INTTOHEX"(SERIAL#,4) BULK COLLECT
  INTO L_SESS
  FROM GV$SESSION
  WHERE STATUS <> 'KILLED';
  DELETE
  FROM BASE8."SYS#LOCKS"
  WHERE DBSESSIONID NOT IN
    (SELECT * FROM TABLE(CAST(L_SESS AS BASE8."BASE8_HEXARRAY_TT"))
    );
  DELETE
  FROM BASE8."X$ACTIVEUSERS"
  WHERE DBSESSIONID NOT IN
    (SELECT * FROM TABLE(CAST(L_SESS AS BASE8."BASE8_HEXARRAY_TT"))
    );
  COMMIT;
END JOB_PROCEDURE;

Тип:
+
create or replace
TYPE          "BASE8_HEXARRAY_TT" AS TABLE OF CHAR(16);

Функция:
+
CREATE OR REPLACE
  FUNCTION "INTTOHEX"(
      ITEM     INTEGER,
      ITEMSIZE INTEGER)
    RETURN VARCHAR2
  AS
  BEGIN
    RETURN LTRIM(TO_CHAR(ITEM,LPAD('X',ITEMSIZE*2,'0')));
  END INTTOHEX;
  

При любом изменении job-ов (напр. disable) выдает ошибки:
Program	Start Task: On BASE8_POPOV -- Drop Job
Program	End Task: On BASE8_POPOV -- Drop Job
DBMS	Base8_POPOV -- Failed to execute query (BEGIN
DBMS	Base8_POPOV --     DBMS_JOB.REMOVE (727);
DBMS	Base8_POPOV -- COMMIT;
DBMS	Base8_POPOV -- END;): ORA-23421: номер задаия 727 
--не соответсвует заданию в очереди заданий
DBMS	Base8_POPOV -- ORA-06512: ia  "SYS.DBMS_SYS_ERROR", line 86
DBMS	Base8_POPOV -- ORA-06512: ia  "SYS.DBMS_IJOB", line 529
DBMS	Base8_POPOV -- ORA-06512: ia  "SYS.DBMS_JOB", line 171
DBMS	Base8_POPOV -- ORA-06512: ia  line 2
и так с любым заданием.
Как их удалить?
PooH_2
Дата: 05.03.2011 09:46:00
ORA-23421: job number string is not a job in the job queue
Cause: There is no job visible to the caller with the given job number.
Action: Choose the number of a job visible to the caller.

работа со своими джобами?
PooH_2
Дата: 05.03.2011 09:49:59
для роли DBA советуют (не проверял) использовать Sys.DBMS_IJob
bind
Дата: 05.03.2011 09:51:53
PooH_2, захожу под пользователем джобов
Вячеслав Любомудров
Дата: 05.03.2011 09:53:13
PooH_2
для роли DBA советуют (не проверял) использовать Sys.DBMS_IJob
Лучше и не проверяй
PooH_2
Дата: 05.03.2011 10:11:29
а ошибка в sqlplus воспроизводится? то есть, если создать джоб и тут же его удалить - есть ошибка?
PooH_2
Дата: 05.03.2011 10:12:10
Лучше и не проверяй

Не рабоает? или криво работает?
bind
Дата: 05.03.2011 10:17:26
PooH_2
для роли DBA советуют (не проверял) использовать Sys.DBMS_IJob

Спасибо, помогло.
Удалил без видимых проблем.
зодолбинд
Дата: 05.03.2011 10:19:43
bind,

Может ну их эти джобы и воспользоваться dbms_lock. Накрайняк dbms_scheduler lightweight job
onzerotguest
Дата: 05.03.2011 11:09:04
зодолбинд
Может ну их эти джобы и воспользоваться dbms_lock. Накрайняк dbms_scheduler lightweight job


а ещё есть обычный планировщик операционной системы, например cron. И если функциональность повторного выполнения при сбое не нужна, не совсем понятно, почему предпочтения отдаются DBMS_JOB, а не cron