powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Job стартует, но ничего не делает
9 сообщений из 9, страница 1 из 1
Job стартует, но ничего не делает
    #32030526
pogues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MSSQL 2000
Есть JOB, type = 'Transact SQL Script', Command = 'EXEC My_Proc_1_sp'
My_Proc_1_sp достаточно сложна: запускает DTS Package, пишет лог выполнения в постоянные таблицы в БД, т.е. если уж сработала, то сразу видно (либо по таблицам, либо по Package Log)
JOB стартует в ручном режиме, работает секунды 3, но периодически происходит следующее:
1. JOB стартовал
2. Необычно долго висит (минута, две)
3. Завершается со статусом Succesfull
4. Однако процедура My_Proc_1_sp не запускается (по крайней мере в постоянных таблицах изменений нет, Package Log пуст)
5. Если еще раз запустить JOB, то он отработает нормально.

Такое происходит довольно часто, на двух серверах, закономерности не обнаружено.
Могу только сказать, что очень часто это происходит после пересоздания My_Proc_1_sp (она создается без RECOMPILE)

Какую либо еще информацию сообщить не могу, так как теряюсь в догадках, в какой области может быть причина.
Вопрос:
1. Что это может быть?
2. Как это обойти?
...
Рейтинг: 0 / 0
Job стартует, но ничего не делает
    #32030590
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может что-нибудь из этого: http://www.sql.ru/articles/mssql/02051702HowToRunDTSasScheduledJob.shtml
...
Рейтинг: 0 / 0
Job стартует, но ничего не делает
    #32030602
Автор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Навряд ли это здесь применимо. До DTS процедура даже не доходит.
Тогда вопрос можно поставить так: может ли кто-либо с большим опытом подобных разработок сказать, что он подобного никогда не видел и "так не бывает"?
...
Рейтинг: 0 / 0
Job стартует, но ничего не делает
    #32030668
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4. Однако процедура My_Proc_1_sp не запускается (по крайней мере в постоянных таблицах изменений нет, Package Log пуст)

До DTS процедура даже не доходит.

Уверены ли вы, что логика вашей процедуры правильна ? Может быть существует непредусмотренная вами ситуация ?

PS
Может быть создать подробный лог хода выполения процедуры ? А дальше видно будет ...
...
Рейтинг: 0 / 0
Job стартует, но ничего не делает
    #32030715
Автор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С процедурой все ОК, я довольно искушен в их написании. Лог ведется, 'Процедура ... начала свою работу' и т.д.
Думаю, дело не в ней.
Правильно ли я понимаю, что JOB вообще не обязана дожидаться окончания своего задания?
Она помещает его в очередь и может отрапортовать о своем успешном завершении, даже если процесс еще не окончен?
Простой пример:
JOB создана путем sheduling DTS Package, который тупо переносит данные из Excel файла в постоянную таблицу БД, например MY_TABLE.
0. MSSQL 2000, SP2, Office 2000
1. Создаем Excel файл с 35,000 записей.
2. Запускаем JOB
3. JOB оканчивается успешно.
4. В таблице MY_TABLE оказывается перенесенной только часть записей, по моему всегда одинаковое, 29,000 (select count(*) from MY_TABLE NOLOCK)
5. На таблице блокировка
6. На Excel файле Share violation при попытке открыть
7. На сервере висит процесс (sp_who2), который и лочит MY_TABLE
8. Убивание процесса и перезагрузка сервисов SQL блокировку с файла не снимает.

Таким образом JOB завершилась успешно, не дожидаясь завершения своей задачи.

Вопрос: как все это работает? можно ли гарантировано узнать, что JOB отработала корректно и сделала то, что требовалось?
...
Рейтинг: 0 / 0
Job стартует, но ничего не делает
    #32030742
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно ли я понимаю, что JOB вообще не обязана дожидаться окончания своего задания?
Откуда у вас такие данные ? Книга, ссылка ?

Лог ведется, 'Процедура ... начала свою работу' и т.д.
Думаю, дело не в ней.
Другими словами процедура таки "пишет лог выполнения в постоянные таблицы в БД", т.е. в логе выполнения видно, что происходит INSERT, но записей в таблице нет ?

3. JOB оканчивается успешно.
4. В таблице MY_TABLE оказывается перенесенной только часть записей, по моему всегда одинаковое, 29,000 (select count(*) from MY_TABLE NOLOCK)
5. На таблице блокировка
6. На Excel файле Share violation при попытке открыть
7. На сервере висит процесс (sp_who2), который и лочит MY_TABLE
8. Убивание процесса и перезагрузка сервисов SQL блокировку с файла не снимает.

Есть такая особенность у DTS-ов при работе с внешинми файлами(правда у меня возникала при циклической обработке файлов). Нужно в Workflow Properties - Options установить Close connection on completion и Fail package on step failure. Можете также "попробовать" опции из группы Transaction (Join/Commit/Rollback)

Таким образом JOB завершилась успешно, не дожидаясь завершения своей задачи.
Статус завершения Job Step-а есть то, что вернулось из "содержимого" Step-а.

IMHO такое невозможно, что происходит переход к следующему Step-у раньше, чем "задача" предыдущего Step-а не вернула(по своим соображениям) какой-либо код завершения
...
Рейтинг: 0 / 0
Job стартует, но ничего не делает
    #32030757
pogues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Процедура начинается так
***************************************
CREATE TABLE #dir(filename1 varchar(255), used int NULL)
IF @@error <> 0 BEGIN SELECT @res = @ERR_SYSTEM_FATAL_UNKNOWN GOTO EXIT_PROC END
CREATE INDEX RL_step2_run_sp_dir_ind0 ON #dir(filename1)
IF @@error <> 0 BEGIN SELECT @res = @ERR_SYSTEM_FATAL_UNKNOWN GOTO EXIT_PROC END
CREATE TABLE #dir2(filename1 varchar(255), used int NULL)
IF @@error <> 0 BEGIN SELECT @res = @ERR_SYSTEM_FATAL_UNKNOWN GOTO EXIT_PROC END
EXEC appdate_sp @tooday OUTPUT -- appdate_sp Не работает с БД, просто выполняет арифмитеческие действия (текущая дата в определенном формате)
IF @@error <> 0 BEGIN SELECT @res = @ERR_SYSTEM_FATAL_UNKNOWN GOTO EXIT_PROC END
/*Очистка постоянных таблиц, которые используются в пределах одного запуска процедуры*/
DELETE FROM RL_step2_log
IF @@error <> 0 BEGIN SELECT @res = @ERR_SYSTEM_FATAL_UNKNOWN GOTO EXIT_PROC END
DELETE FROM RL_step2_params
IF @@error <> 0 BEGIN SELECT @res = @ERR_SYSTEM_FATAL_UNKNOWN GOTO EXIT_PROC END
DELETE FROM RL_glarctrx_temp
IF @@error <> 0 BEGIN SELECT @res = @ERR_SYSTEM_FATAL_UNKNOWN GOTO EXIT_PROC END
DELETE FROM RL_glarctrxdet_temp
IF @@error <> 0 BEGIN SELECT @res = @ERR_SYSTEM_FATAL_UNKNOWN GOTO EXIT_PROC END
/*Собственно начинаем работу*/
INSERT RL_step2_log(error_flag, event_msg, event_status) VALUES(0, 'Информация - Процедура RL_step2_run_sp начала работу', 'Подготовка к импорту')
IF @@error <> 0 BEGIN SELECT @res = @ERR_SYSTEM_FATAL_UNKNOWN GOTO EXIT_PROC END
------ Дальше куча всяких операторов.....

EXIT_PROC:

IF @res <> 0 BEGIN
INSERT RL_step2_log(error_flag, event_msg,event_status) SELECT 1, '......................', ''

************************************************

Таким образом, если RL_step2_log не содержит свежих записей, то это означает, что процедура не выполнялась.
Я согласен, что это не совсем корректно следует из приведенных данных, и как поеду к клиенту, проведу дополнительные исследования - вставлю запись в лог в самом начале работы процедуры, посмотрю с Profiler, запускается ли она вообще.
Но мне кажется, что все именно так, как я представляю.

Про особености 'DTS-ов при работе с внешинми файлами' спасибо. Только я не нашел Workflow Properties - Options.
Вижу Fail Package On First Error и CloseConnection в Disconected Edit. Это они?

Но не транзакциями, ни Fail Package On First Error я пользоваться не хочу. При возникновении ошибки по Workflow пишется сообщение в мой лог на сервере, который потом доступен пользователю через отчет. Если использовать транзакции, то в логе ничего не сохранится.

А про то, что 'JOB не обязан дожидаться окончания ....' я сам придумал. Это и есть суть моего изначального вопроса. Если это не так, значит или проблемы у меня в процедуре, или стоит переставить сервер.
...
Рейтинг: 0 / 0
Job стартует, но ничего не делает
    #32030762
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Вы уверены, что переменная @res всегда инициализируется. Потому что, если она имеет значение NULL, то это равентсво IF @res <> 0 будет вычисляться как "= 0 "

2. А где собственно код возврата вовне ? Где RETURN 0, -1 ? Или его нет только в представленном примере ?

3. Workflow Properties - Options нужно искать у Transformation Task, т.е. у стрелки соединяющей источник и приемник данных, т.е. вашу таблицу(предсталение, запрос, ...) и Excel файл.
Кстати вы не уточнили версию своего сервера. Я рассказываю про SQL2000
...
Рейтинг: 0 / 0
Job стартует, но ничего не делает
    #32030776
pogues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня sql2000
@res инициализируется, я проверил.
return нет, выход из программы по последнему end.
Да он и не нужен, так как пользователь проверяет результат либо по e-mail, либо строит отчет в Crystal Reports по моему лог.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Job стартует, но ничего не делает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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