Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Job стартует, но ничего не делает
|
|||
|---|---|---|---|
|
#18+
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. Как это обойти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2002, 13:06 |
|
||
|
Job стартует, но ничего не делает
|
|||
|---|---|---|---|
|
#18+
Может что-нибудь из этого: http://www.sql.ru/articles/mssql/02051702HowToRunDTSasScheduledJob.shtml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2002, 17:06 |
|
||
|
Job стартует, но ничего не делает
|
|||
|---|---|---|---|
|
#18+
Навряд ли это здесь применимо. До DTS процедура даже не доходит. Тогда вопрос можно поставить так: может ли кто-либо с большим опытом подобных разработок сказать, что он подобного никогда не видел и "так не бывает"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2002, 05:04 |
|
||
|
Job стартует, но ничего не делает
|
|||
|---|---|---|---|
|
#18+
4. Однако процедура My_Proc_1_sp не запускается (по крайней мере в постоянных таблицах изменений нет, Package Log пуст) До DTS процедура даже не доходит. Уверены ли вы, что логика вашей процедуры правильна ? Может быть существует непредусмотренная вами ситуация ? PS Может быть создать подробный лог хода выполения процедуры ? А дальше видно будет ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2002, 14:24 |
|
||
|
Job стартует, но ничего не делает
|
|||
|---|---|---|---|
|
#18+
С процедурой все ОК, я довольно искушен в их написании. Лог ведется, 'Процедура ... начала свою работу' и т.д. Думаю, дело не в ней. Правильно ли я понимаю, что 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 отработала корректно и сделала то, что требовалось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 05:31 |
|
||
|
Job стартует, но ничего не делает
|
|||
|---|---|---|---|
|
#18+
Правильно ли я понимаю, что 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-а не вернула(по своим соображениям) какой-либо код завершения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 06:52 |
|
||
|
Job стартует, но ничего не делает
|
|||
|---|---|---|---|
|
#18+
Процедура начинается так *************************************** 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 не обязан дожидаться окончания ....' я сам придумал. Это и есть суть моего изначального вопроса. Если это не так, значит или проблемы у меня в процедуре, или стоит переставить сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 07:34 |
|
||
|
Job стартует, но ничего не делает
|
|||
|---|---|---|---|
|
#18+
1. Вы уверены, что переменная @res всегда инициализируется. Потому что, если она имеет значение NULL, то это равентсво IF @res <> 0 будет вычисляться как "= 0 " 2. А где собственно код возврата вовне ? Где RETURN 0, -1 ? Или его нет только в представленном примере ? 3. Workflow Properties - Options нужно искать у Transformation Task, т.е. у стрелки соединяющей источник и приемник данных, т.е. вашу таблицу(предсталение, запрос, ...) и Excel файл. Кстати вы не уточнили версию своего сервера. Я рассказываю про SQL2000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 08:00 |
|
||
|
Job стартует, но ничего не делает
|
|||
|---|---|---|---|
|
#18+
У меня sql2000 @res инициализируется, я проверил. return нет, выход из программы по последнему end. Да он и не нужен, так как пользователь проверяет результат либо по e-mail, либо строит отчет в Crystal Reports по моему лог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2002, 08:34 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32030742&tid=1822673]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 267ms |
| total: | 408ms |

| 0 / 0 |
