powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема с SCHEDULER JOBS: Двойной запуск
7 сообщений из 7, страница 1 из 1
Проблема с SCHEDULER JOBS: Двойной запуск
    #39330177
-=SwiMMeR=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрые утро/день/вечер.

Столкнулись сегодня с такой проблемой.
Есть SCHEDULER JOB, который запускается 1 раз в сутки.
Выполняется ~1 минуту.
Сегодня он запустился дважды.
Дождался первого выполнения и запустился второй раз.
Завершился с ошибкой (логика выполнения не может быть выполнена дважды в сутки).
Стали разбираться. Не смогли.

Выдача dba_scheduler_job_run_details

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> SELECT r.log_id, r.log_date, r.status, r.error#, r.req_start_date, r.actual_start_date, r.run_duration, r.instance_id, r.session_id, r.slave_pid, r.cpu_used
  2  FROM dba_scheduler_job_run_details r
  3  WHERE job_name = '?'
  4    AND CAST( actual_start_date AS DATE ) >= TRUNC( SYSDATE ) ;
  
    LOG_ID LOG_DATE                            STATUS    ERROR# REQ_START_DATE                             ACTUAL_START_DATE                          RUN_DURATION  INSTANCE_ID SESSION_ID  SLAVE_PID CPU_USED
---------- ----------------------------------- --------- ------ ------------------------------------------ ------------------------------------------ ------------- ----------- ----------- --------- ----------------
 565717738 19-OCT-16 12.01.44,774278 AM +03:00 SUCCEEDED      0 19-OCT-16 12.00.59,427083 AM EUROPE/MOSCOW 19-OCT-16 12.00.59,994432 AM EUROPE/MOSCOW +000 00:00:45           1 8582,24363  23593386  +000 00:00:20.51
 565717946 19-OCT-16 12.01.53,744305 AM +03:00 FAILED     20858 19-OCT-16 12.00.59,999954 AM EUROPE/MOSCOW 19-OCT-16 12.01.44,777591 AM EUROPE/MOSCOW +000 00:00:09           1 18659,16401 29558504  +000 00:00:05.40
                                                                                                                                                                                           
SQL> 



Выдача dba_scheduler_jobs

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SQL> SELECT r.job_style, r.job_type, r.schedule_type, r.repeat_interval, r.job_class, r.state, r.job_priority, r.failure_count, r.retry_count, r.last_start_date, r.last_run_duration, r.next_run_date, r.logging_level, r.restartable
  2  FROM dba_scheduler_jobs r
  3  WHERE job_name = '?' ;

JOB_STYLE JOB_TYPE    SCHEDULE_TYPE REPEAT_INTERVAL                            JOB_CLASS         STATE     JOB_PRIORITY FAILURE_COUNT RETRY_COUNT LAST_START_DATE                            LAST_RUN_DURATION          NEXT_RUN_DATE                              LOGGING_LEVEL RESTARTABLE
--------- ----------- ------------- ------------------------------------------ ----------------- --------- ------------ ------------- ----------- ------------------------------------------ -------------------------- ------------------------------------------ ------------- -----------
REGULAR   PLSQL_BLOCK CALENDAR      Freq=Daily;ByHour=0;ByMinute=0;BySecond=59 DEFAULT_JOB_CLASS SCHEDULED            1             1           0 19-OCT-16 12.01.44,777536 AM EUROPE/MOSCOW +000000000 00:00:08.965482 20-OCT-16 12.00.59,782849 AM EUROPE/MOSCOW OFF           FALSE

SQL> 



Ну и традиционно ...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> SELECT banner FROM v$version ;
BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
PL/SQL Release 12.1.0.2.0 - Production
CORE	12.1.0.2.0	Production
TNS for IBM/AIX RISC System/6000: Version 12.1.0.2.0 - Production
NLSRTL Version 12.1.0.2.0 - Production

SQL> 



В чем может быть проблема? Куда копать? Как смоделировать/повторить?
CJQ-процесс (вроде) 1 штук. (CJQ0)

Стали смотреть на другие. Ситуация повторяется часто и густо с другими джобами с разными расписаниями.
Никакой системы/закономерности не нашли.

Логи шедулера есть за последние 30 дней. Проблема повторяется весь период.
Для обращения в ТП надо приложить описание моделирования ошибки.

Спасибо.
...
Рейтинг: 0 / 0
Проблема с SCHEDULER JOBS: Двойной запуск
    #39331720
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=SwiMMeR=-,

Покажи как создаешь джоб и как правишь календарь
только джоб создай новый, без импортов/апгрейдов

http://docs.oracle.com/database/121/ARPLS/d_sched.htm#ARPLS72366
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
--Doc ID 807159.1 - Sample Code 
--Doc ID 1520580.1 - Master Note: Troubleshooting Oracle Scheduler

--1) Prepare
--
-- if start_date is NULL (timezone from session TIME_ZONE|ORA_SDTZ client env|default_timezone of scheduler)
--
ALTER SESSION SET TIME_ZONE = 'EUROPE/MOSCOW';
exec DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('default_timezone','EUROPE/MOSCOW');

-- if start_date is NOT NULL (timezone from start_time)
--
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
alter session set NLS_TIMESTAMP_FORMAT='yyyy-mm-dd hh24:mi:ssxff' ;
alter session set NLS_TIMESTAMP_TZ_FORMAT='yyyy-mm-dd hh24:mi:ss TZR TZD';


drop table scott.t21_log purge;
create table scott.t21_log(x number generated as identity, y timestamp with time zone, z varchar2(64));

insert into scott.t21_log(y,z) values
( to_timestamp_tz('20161021 14:00:00 EUROPE/MOSCOW','YYYYMMDD HH24:MI:SS TZR')
 ,to_char(SYSTIMESTAMP AT TIME ZONE 'EUROPE/MOSCOW','YYYYMMDD HH24:MI:SSXFF TZR TZD')
);


--2) Check of preparing

select dbms_scheduler.stime from dual;

STIME
-------------------------------------
2016-10-21 14:09:13 EUROPE/MOSCOW MSK


select * from scott.t21_log;

    X Y                                      Z
----- -------------------------------------- -------------------------------------------
    1 2016-10-21 14:00:00 EUROPE/MOSCOW MSK  20161021 14:09:40,979096 EUROPE/MOSCOW MSK


--3)
declare
 job_does_not_exist exception;
 pragma exception_init(job_does_not_exist, -27475);
begin
 DBMS_SCHEDULER.DROP_JOB ('CALEND_ALA_TEST');
 exception when job_does_not_exist then
   dbms_output.put_line('Create job');
end;
/

ALTER SESSION SET TIME_ZONE = 'EUROPE/MOSCOW';
begin
dbms_scheduler.create_job('CALEND_ALA_TEST'
 ,'PLSQL_BLOCK'
 ,'begin insert into scott.t21_log(y,z) 
    select SYSTIMESTAMP AT TIME ZONE ''EUROPE/MOSCOW''
    ,to_char(systimestamp, ''YYYYMMDD HH24:MI:SSXFF'') from dual;commit; end;'
-- , start_date =>'2016-10-21 13:25:00 EUROPE/MOSCOW'
 ,start_date=>null
 ,enabled => true
-- ,repeat_interval => 'freq=daily;byminute=12');
-- ,repeat_interval => 'freq=hourly;byminute=5');
 ,repeat_interval => 'freq=minutely;bysecond=59');
end;
/

-- в датах никаких смещений: +4, -7 ,...
-- только временные зоны должны быть 
-- вдруг летнее время(DST) вернется
select owner
      ,start_date
      ,repeat_interval
      ,last_start_date
      ,next_run_date 
 from dba_scheduler_jobs where job_name='CALEND_ALA_TEST';

select * from scott.t21_log;

1 2016-10-21 14:00:00 EUROPE/MOSCOW MSK            20161021 14:09:40,979096 EUROPE/MOSCOW MSK
2 2016-10-21 14:39:02 EUROPE/MOSCOW MSK            20161021 14:39:02,623923
3 2016-10-21 14:40:02 EUROPE/MOSCOW MSK            20161021 14:40:02,623461
4 2016-10-21 14:41:02 EUROPE/MOSCOW MSK            20161021 14:41:02,622506
5 2016-10-21 14:42:02 EUROPE/MOSCOW MSK            20161021 14:42:02,621904
6 2016-10-21 14:43:02 EUROPE/MOSCOW MSK            20161021 14:43:02,614655

--проверить календарь 
--зациклить вычисление next_run_date
--example: http://docs.oracle.com/database/121/ARPLS/d_sched.htm#ARPLS72366
ALTER SESSION SET TIME_ZONE = 'EUROPE/MOSCOW';
DECLARE
 start_date        TIMESTAMP WITH TIME ZONE;
 return_date_after TIMESTAMP WITH TIME ZONE;
 next_run_date     TIMESTAMP WITH TIME ZONE;
-- start_date        TIMESTAMP;
-- return_date_after TIMESTAMP;
-- next_run_date     TIMESTAMP;
BEGIN
--start_date := null;
 start_date :=  to_timestamp_tz('20161021 14:00:00  EUROPE/MOSCOW MSK','YYYYMMDD HH24:MI:SS TZR TZD');
 return_date_after := start_date;
FOR i IN 1..5 LOOP
 DBMS_SCHEDULER.EVALUATE_CALENDAR_STRING(  
    'FREQ=DAILY;BYHOUR=9;BYMINUTE=30;BYDAY=MON,TUE,WED,THU,FRI',
    start_date, return_date_after, next_run_date);
-- DBMS_OUTPUT.PUT_LINE('next_run_date: ' || to_char(next_run_date AT TIME ZONE 'EUROPE/MOSCOW','YYYYMMDD HH24:MI:SSXFF TZR'));
 DBMS_OUTPUT.PUT_LINE('next_run_date: ' || next_run_date);
 return_date_after := next_run_date;
END LOOP;
END;
/

next_run_date: 2016-10-24 09:30:00 EUROPE/MOSCOW MSK
next_run_date: 2016-10-25 09:30:00 EUROPE/MOSCOW MSK
next_run_date: 2016-10-26 09:30:00 EUROPE/MOSCOW MSK
next_run_date: 2016-10-27 09:30:00 EUROPE/MOSCOW MSK
next_run_date: 2016-10-28 09:30:00 EUROPE/MOSCOW MSK

begin
 DBMS_SCHEDULER.DROP_JOB ('CALEND_ALA_TEST');
end;
/

drop table scott.t21_log purge;


...
Рейтинг: 0 / 0
Проблема с SCHEDULER JOBS: Двойной запуск
    #39334895
Фотография orTOPed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не смущает, что ACTUAL_START_DATE первого запуска плюс RUN_DURATION равно ACTUAL_START_DATE второго запуска?
...
Рейтинг: 0 / 0
Проблема с SCHEDULER JOBS: Двойной запуск
    #39334896
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А должно быть как-то по-другому?

Меня больше смущает BySecond=59 в расписании. Не то чтобы это было запрещено (или замечено в косяках), но все-таки обработка "граничных условий"...
В общем, я бы поставил что-нибудь другое
...
Рейтинг: 0 / 0
Проблема с SCHEDULER JOBS: Двойной запуск
    #39335841
Nobody1111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Глюканул скедулер. Базу давно рестартовали? Рестартануть не поможет? Или хотя бы скедулер. Все чаще и чаще баги у оракла лечатся купируются рестартом, как у винды.
...
Рейтинг: 0 / 0
Проблема с SCHEDULER JOBS: Двойной запуск
    #39402483
Eliska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласна с Любомудровым
...
Рейтинг: 0 / 0
Проблема с SCHEDULER JOBS: Двойной запуск
    #39403239
Фотография Viewer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EliskaСогласна с Любомудровым
... так и тянет спросить " На что ?" ;)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проблема с SCHEDULER JOBS: Двойной запуск
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]