Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Job-ы и обработка ошибок  [new]
Борис Гладких
Member

Откуда:
Сообщений: 13
Имеем job (T-SQL). Возникает такая ситуация: когда в одной из строк скрипта происходит ошибка, джоб падает, не доходя до строки с проверкой @@ERROR. Поэтому в тексте нет проверок на ошибки. Но часто возникает такая ситуация: первой строкой стоит UPDATE поля в значение 'begin', последней строкой идет UPDATE поля в 'complete', после выполнения джоба имеем 'complete' в поле, и ошибку в истории джоба. Как можно контролировать выполнение скрипта в джобе?
23 май 05, 16:53    [1565062]     Ответить | Цитировать Сообщить модератору
 Re: Job-ы и обработка ошибок  [new]
Glory
Member

Откуда:
Сообщений: 104760
Как можно контролировать выполнение скрипта в джобе?
Ну так там у каждого степа есть опция что делать при разных статусах завершения степа
23 май 05, 17:06    [1565148]     Ответить | Цитировать Сообщить модератору
 Re: Job-ы и обработка ошибок  [new]
Борис Гладких
Member

Откуда:
Сообщений: 13
Glory
Как можно контролировать выполнение скрипта в джобе?
Ну так там у каждого степа есть опция что делать при разных статусах завершения степа

А у меня всего один шаг. Да и джоб постоянно выполняющийся. Если упал - по дате можно отследить когда, и найти строку, на какой он обвалился. Только проблема как раз в том, что у проблемной строки стоит статус 'completed', а 'begin' уже на следующей...
23 май 05, 17:14    [1565188]     Ответить | Цитировать Сообщить модератору
 Re: Job-ы и обработка ошибок  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ничего не понял
Что есть "у проблемной строки стоит статус 'completed'" ?
А "'begin' уже на следующей" ?
Вы про записи в таблице или про строки в скрипте ?
23 май 05, 17:16    [1565203]     Ответить | Цитировать Сообщить модератору
 Re: Job-ы и обработка ошибок  [new]
Борис Гладких
Member

Откуда:
Сообщений: 13
Glory
Ничего не понял
Что есть "у проблемной строки стоит статус 'completed'" ?
А "'begin' уже на следующей" ?
Вы про записи в таблице или про строки в скрипте ?

Подробнее:
Есть таблица, по которой бежит джоб и обрабатывает построчно. В начале работы джоб ставит статус строки 'begin', по окончании обработки 'complete'.
Проблема:
При падении джоба у проблемной строки (1) стоит 'complete', 'begin' стоит у следующей строки (2), т.е. джоб во время обработки строки 1 нарвался на ошибку, но упал, уже начав обработку строки 2.
Вопросы:
Почему так поздно?
Как избежать такого?
23 май 05, 17:23    [1565235]     Ответить | Цитировать Сообщить модератору
 Re: Job-ы и обработка ошибок  [new]
Glory
Member

Откуда:
Сообщений: 104760
Есть таблица, по которой бежит джоб и обрабатывает построчно
Джоб по строкам бежать не может. Тем более джоб из одного шага.

Если у вас записи таблицы обрабатываются в цикле или курсоре, тогда проверяйте в какаом порядке вы обрабатываете записи. И сравнивайте его с тем порядком, который вы задаете при выборке из таблицы
23 май 05, 17:30    [1565261]     Ответить | Цитировать Сообщить модератору
 Re: Job-ы и обработка ошибок  [new]
Борис Гладких
Member

Откуда:
Сообщений: 13
Glory
Есть таблица, по которой бежит джоб и обрабатывает построчно
Джоб по строкам бежать не может. Тем более джоб из одного шага.

Если у вас записи таблицы обрабатываются в цикле или курсоре, тогда проверяйте в какаом порядке вы обрабатываете записи. И сравнивайте его с тем порядком, который вы задаете при выборке из таблицы

Еще подробнее:
Джоб вызывает процедуру, которая ищет строку, у которой статус не равен 'begin' и не равен 'complete', обрабатывает, ставя в начале работы статус 'begin', по окончании 'complete', и делает это в цикле. При падении процедуры при обработке строки у обрабатываемой строки уже стоит 'complete', а джоб останавливается тогда, когда уже обрабатывается следующая строка (т.е. у нее стоит 'begin').
23 май 05, 17:45    [1565332]     Ответить | Цитировать Сообщить модератору
 Re: Job-ы и обработка ошибок  [new]
Glory
Member

Откуда:
Сообщений: 104760
Нет понятия "следующая строка" в MSSQL.
23 май 05, 17:48    [1565352]     Ответить | Цитировать Сообщить модератору
 Re: Job-ы и обработка ошибок  [new]
MoonRabbit
Member

Откуда:
Сообщений: 752
Борис Гладких
Джоб вызывает процедуру, которая ищет строку, у которой статус не равен 'begin' и не равен 'complete', обрабатывает, ставя в начале работы статус 'begin', по окончании 'complete', и делает это в цикле. При падении процедуры при обработке строки у обрабатываемой строки уже стоит 'complete', а джоб останавливается тогда, когда уже обрабатывается следующая строка (т.е. у нее стоит 'begin').


Борис, приведите, пожалуйста пример кода, с указаниями, где по вашему падает процедура, и где останавливается джоб.
23 май 05, 17:57    [1565398]     Ответить | Цитировать Сообщить модератору
 Re: Job-ы и обработка ошибок  [new]
Борис Гладких
Member

Откуда:
Сообщений: 13
MoonRabbit
Борис Гладких
Джоб вызывает процедуру, которая ищет строку, у которой статус не равен 'begin' и не равен 'complete', обрабатывает, ставя в начале работы статус 'begin', по окончании 'complete', и делает это в цикле. При падении процедуры при обработке строки у обрабатываемой строки уже стоит 'complete', а джоб останавливается тогда, когда уже обрабатывается следующая строка (т.е. у нее стоит 'begin').


Борис, приведите, пожалуйста пример кода, с указаниями, где по вашему падает процедура, и где останавливается джоб.

start:
SET @CommandID = NULL

SELECT TOP 1 @CommandID = [CommandID]
FROM [CommandList]
WHERE [ExecStatus] IS NULL
ORDER BY [EnterDate]

IF @CommandID IS NOT NULL
BEGIN
    UPDATE [CommandList]
    SET [StartExec] = GETDATE(),
        [ExecStatus] = -1
    WHERE [CommandID] = @CommandID

    EXECUTE(@Command)

    SET @Error = @@ERROR

    IF @Error = 0
    BEGIN
        UPDATE [CommandList]
        SET [EndExec] = GETDATE(),
            [ExecStatus] = -2
        WHERE [CommandID] = @CommandID
    END
    ELSE
    BEGIN
        UPDATE [CommandList]
        SET [EndExec] = GETDATE(),
            [ExecStatus] = @Error
        WHERE [CommandID] = @CommandID
    END
END

WAITFOR DELAY '00:01:00'

GOTO start
23 май 05, 18:12    [1565459]     Ответить | Цитировать Сообщить модератору
 Re: Job-ы и обработка ошибок  [new]
AndryMoor
Member

Откуда:
Сообщений: 1
Наткнулся на это сообщение поиском, так как заимел аналогичную проблему. Опытным путём установил, что вылет из job-а происходит при следующем после ошибки EXEC(). То есть после ошибки, где @@ERROR <> 0 выполнение продолжается. А после следующего EXEC() происходит завершение job-а с job fails.
При всём этом скрипт, выполняемый, job-ом в аналайзере выполняется полностью. Ошибка происходит, но цикл не прерывается.

Не подскажете, как можно заставить агента выполнить job до конца?
4 июл 05, 16:44    [1673069]     Ответить | Цитировать Сообщить модератору
 Re: Job-ы и обработка ошибок  [new]
Борис Гладких
Member

Откуда:
Сообщений: 13
В общем-то проблема работы джобов есть. Падает позже, иногда намного, чем произошла ошибка. А чтобы выполнялось также как и в QA, смотрите @@OPTIONS. В моём частном случае меня устраивает падение, не устраивает его время.
4 авг 05, 20:56    [1765402]     Ответить | Цитировать Сообщить модератору
 Re: Job-ы и обработка ошибок  [new]
ayam
Member

Откуда: SPb
Сообщений: 133
Мы тоже наталкивались на похожую ситуацию:
по какой-то причине джоб ликвидируется (который с уничтожением при выходе),
а процесс, отцепившийся от клиента, какое-то время выполняется (несколько секунд),
пока сервер не просекает безобразие и не прибьёт его.
Такое-же бывало и с клиентским приложением.
В ситуации разобраться не смогли, только предположили,
что возникают какие-то системные ошибки, приводящие к
отсоединению клиентского приложения.
Может, кто чего знает по этому поводу?
4 авг 05, 22:24    [1765508]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить