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

Откуда:
Сообщений: 64
Добрый день!
Подскажите, скорее всего сталкивались.

Есть job в Агенте (SQL2008 Standart) , в котором последовательно выполняются процедуры.
В случае ошибки в запросе, транзакция откатывается, но Агент продолжает выполнять след. шаги.
Каким образом модно настроить Агент, чтобы в случае ошибки след шаг не выполнялся?

Пример из запроса:
BEGIN TRANSACTION;
BEGIN TRY
exec(@sql_str)
COMMIT TRANSACTION;
END TRY

BEGIN CATCH
SELECT
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;
ROLLBACK TRANSACTION; -- Откат merge
END CATCH

--*************************************************************************************
END
6 мар 15, 11:36    [17351491]     Ответить | Цитировать Сообщить модератору
 Re: Агент - отслеживание ошибок  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
условие перехода из шага в шаг в джобе
6 мар 15, 11:37    [17351501]     Ответить | Цитировать Сообщить модератору
 Re: Агент - отслеживание ошибок  [new]
Glory
Member

Откуда:
Сообщений: 104760
Katerinka111
Каким образом модно настроить Агент, чтобы в случае ошибки след шаг не выполнялся?

Изучить внимательно все элементы графического дизайнера шага джоба. Особенно закладки Advanced

Сообщение было отредактировано: 6 мар 15, 11:41
6 мар 15, 11:39    [17351520]     Ответить | Цитировать Сообщить модератору
 Re: Агент - отслеживание ошибок  [new]
invm
Member

Откуда: Москва
Сообщений: 9400
Katerinka111
Каким образом модно настроить Агент, чтобы в случае ошибки след шаг не выполнялся?
Для начала перестать подавлять безусловно все ошибки, а то агент так о них ничего и не узнает.
6 мар 15, 11:46    [17351569]     Ответить | Цитировать Сообщить модератору
 Re: Агент - отслеживание ошибок  [new]
Katerinka111
Member

Откуда:
Сообщений: 64
Maxx,

При успехе - Перейти к следующему шагу.
При ошибке - Завершить задание с ошибкой
6 мар 15, 11:57    [17351646]     Ответить | Цитировать Сообщить модератору
 Re: Агент - отслеживание ошибок  [new]
Glory
Member

Откуда:
Сообщений: 104760
Katerinka111
При успехе - Перейти к следующему шагу.
При ошибке - Завершить задание с ошибкой

Значит, когда ваш шаг _завершится ошибкой_, то и весь джоб завершится ошибкой
6 мар 15, 12:00    [17351664]     Ответить | Цитировать Сообщить модератору
 Re: Агент - отслеживание ошибок  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Katerinka111
Maxx,

При успехе - Перейти к следующему шагу.
При ошибке - Завершить задание с ошибкой

invm
Для начала перестать подавлять безусловно все ошибки, а то агент так о них ничего и не узнает.
6 мар 15, 12:01    [17351667]     Ответить | Цитировать Сообщить модератору
 Re: Агент - отслеживание ошибок  [new]
Katerinka111
Member

Откуда:
Сообщений: 64
Glory,

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

Да, видимо надо переписать процедуру....
6 мар 15, 12:05    [17351703]     Ответить | Цитировать Сообщить модератору
 Re: Агент - отслеживание ошибок  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Katerinka111,

добавить в кетч райсеррор
6 мар 15, 12:07    [17351723]     Ответить | Цитировать Сообщить модератору
 Re: Агент - отслеживание ошибок  [new]
Glory
Member

Откуда:
Сообщений: 104760
Katerinka111
Нет, не завершится, транзакция откатится, а след шаг будет выполняться в том то и дело.

Не придумывайте. Покажите лог выполнения джоба, где при _провалившемся_ шаге игнорируется обработка перехода.
6 мар 15, 12:09    [17351748]     Ответить | Цитировать Сообщить модератору
 Re: Агент - отслеживание ошибок  [new]
Katerinka111
Member

Откуда:
Сообщений: 64
Maxx,
Большое Спасибо, переписала блок TRY CATHC. Ошибка ловится и агент не выполняет след. шаги))))

BEGIN TRANSACTION;
BEGIN TRY

exec(@sql_str)

COMMIT TRANSACTION;
END TRY

BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
DECLARE @ERROR_NUMBER INT;
DECLARE @ERROR_PROCEDURE INT;
DECLARE @ERROR_LINE INT;

SELECT
@ERROR_NUMBER=ERROR_NUMBER()
,@ErrorSeverity=ERROR_SEVERITY()
,@ErrorState=ERROR_STATE()
,@ERROR_NUMBER=ERROR_PROCEDURE()
,@ERROR_LINE =ERROR_LINE()
,@ErrorMessage=ERROR_MESSAGE() ;
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
ROLLBACK TRANSACTION; -- Откат merge

END CATCH
6 мар 15, 13:07    [17352162]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить