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

Откуда:
Сообщений: 3767
скажем для ведения лога аудита?
мне вот видится, что проще сделать отдельную базу для этого
19 мар 14, 06:25    [15750271]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Tаrantino
скажем для ведения лога аудита?
мне вот видится, что проще сделать отдельную базу для этого
Увы, нельзя, даже с отдельной базой.
Не откатывается запись в таблицы-переменные, если это поможет.
19 мар 14, 08:08    [15750379]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
вынести логирование за транзакцию
DECLARE @ERRORMESSAGE VARCHAR(1000)
BEGIN TRAN
BEGIN TRY
	BLA_BLA 
	COMMIT TRAN
END TRY
BEGIN CATCH
	SET @ERRORMESSAGE = ERROR_MESSAGE()
	IF @@TRANCOUNT>0  ROLLBACK TRAN
	INSERT INTO LOG VALUES(@ERRORMESSAGE)
END CATCH	
19 мар 14, 08:22    [15750408]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35367
Блог
может это поможет
http://technet.microsoft.com/ru-ru/library/ms188378.aspx
19 мар 14, 08:33    [15750433]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
сейв не поможет
а линкед на себя же - поможет
19 мар 14, 10:13    [15750853]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
Crimean
а линкед на себя же - поможет
+1
Главное - не забыть выключить "remote proc transaction promotion".
19 мар 14, 11:11    [15751241]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
Tаrantino
Member

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

т.е. сделать Linked Server на самого себя?
20 мар 14, 10:45    [15757499]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
mike909
Member

Откуда:
Сообщений: 662
Tаrantino,

А вот еще вариант: про Service Broker. какие задачи решаются? см. пункт III
20 мар 14, 10:53    [15757563]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
mike909
Tаrantino,

А вот еще вариант: про Service Broker. какие задачи решаются? см. пункт III
Здесь это не подойдет, т.к. брокер тоже транзакционен. Если вы сделали SEND в транзакции, то пока коммит не произойдет, сообщение никуда не отправится.
20 мар 14, 10:58    [15757584]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
mike909
Member

Откуда:
Сообщений: 662
Ennor Tiegael
mike909
Tаrantino,

А вот еще вариант: про Service Broker. какие задачи решаются? см. пункт III
Здесь это не подойдет, т.к. брокер тоже транзакционен. Если вы сделали SEND в транзакции, то пока коммит не произойдет, сообщение никуда не отправится.

Какой такой SEND !!!
См. пункт III :
exec sp_trace_generateevent [82-91: User Configurable (0-9)]
20 мар 14, 11:01    [15757599]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
mike909
exec sp_trace_generateevent [82-91: User Configurable (0-9)]
Вот такие пере-админы и нужны, чтобы иметь в голове всю картину целиком!
Спасибо вам.

Хотя, по мне, в чём хороши автономные транзакции через Linked, что легко вписываются.
EXEC           dbo.spMyProc @Param
EXEC Auto.[DB].dbo.spMyProc @Param
Но с базой да, неудобно. Тогда уже синонимы.

Хак от mike909 мне по душе тем, что ожидаемо эффективнее Linked-а.
Но не имеет кода возврата, и ограничен по размеру данных (одна страница).
Так что полностью от Linked-а не избавится.
21 мар 14, 01:46    [15763560]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
Crimean
Member

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

exec @procname, однако. и это, внезапно, даже не динамика. остается только имя аудит-сервера засунуть куда-нить в параметры, а базу мы и так знаем как db_name(). вроде бы все.
ну и, да, пока оно не настроено - трактуем это как невозможность аудита со всеми вытекающими
21 мар 14, 12:51    [15765608]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Crimean,
Угу, часто, те процедуры, которые должны быть автономками, сами себе обеспечивают вызов через линкед (сами себя вызывают с доп параметром).
И это не распространяется по базе.
21 мар 14, 13:53    [15766268]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
Валдай
Member

Откуда:
Сообщений: 113
LexusR
вынести логирование за транзакцию
DECLARE @ERRORMESSAGE VARCHAR(1000)
BEGIN TRAN
BEGIN TRY
	BLA_BLA 
	COMMIT TRAN
END TRY
BEGIN CATCH
	SET @ERRORMESSAGE = ERROR_MESSAGE()
	IF @@TRANCOUNT>0  ROLLBACK TRAN
	INSERT INTO LOG VALUES(@ERRORMESSAGE)
END CATCH	

права? :)
13 янв 15, 17:54    [17112516]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать часть транзакции без откатной?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Tаrantino,

выносите логирование за откат, пишите правильный обработчик ошибки, проталкивающий ошибку в глобальные обработчики или просто наверх. Это классика, между прочим для любых систем программирования.
14 янв 15, 11:09    [17115199]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить