Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Cammomile,

теперь перейдите к изучению XACT_STATE
8 ноя 17, 14:17    [20936496]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Так о чем и речь
автор
hen SET XACT_ABORT is ON, if a Transact-SQL statement raises a run-time error, the entire transaction is terminated and rolled back.
Ни слова о том, что надо как-то что-то еще изучать.

Не понимаю зачем ты упорствуешь в том, что "все итак понятно", когда "итак" непонятно, и нужно изучать вопрос отдельно.
8 ноя 17, 14:19    [20936501]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Cammomile,
ну так посмотрите на результат, если ничего не хотите читать
DROP TABLE #t

CREATE TABLE #t (f1 INT NOT NULL);

SET XACT_ABORT ON
SET ANSI_WARNINGS ON
BEGIN TRY
	BEGIN TRAN
	
		INSERT INTO #t VALUES (42) 
		INSERT INTO #t (f1) VALUES ('a');
		
	COMMIT TRAN
END TRY

BEGIN CATCH 
    SELECT XACT_STATE()
END CATCH

GO

SELECT * FROM #t
8 ноя 17, 14:21    [20936511]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Откатывается в конце пакета, и это мы знаем опытным путем.

ВНИМАНИЕ ВОПРОС -- где это написано в документации?
8 ноя 17, 14:25    [20936531]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
invm
Member

Откуда: Москва
Сообщений: 9349
Владислав Колосов
Собственно, дело не в идее, а в архитектуре обработки ошибок и получения их стека. Если триггер во внешней транзакции, то откатывать должен внешний обработчик ошибки
И чем роллбэк в триггере мешает реализовать подобное?
Владислав Колосов
если не в транзакции, то откат произойдет автоматически. Т.е. сам откат в триггере избыточен.
Не путайте raiserror и throw.

Наконец вопрос, который я вам задавал неоднократно, но ответа так и не было - как бедному разработчику триггера гарантировать, что ошибочные данные не попадут в БД?
8 ноя 17, 14:26    [20936538]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1369
Cammomile,

так а что вы хотели получить если указали принудительную обработку исключений блоком try/catch?

у вас транзакция ушла в нефиксированное состояние, сами разруливайте по xact_state()

BEGIN CATCH
    IF XACT_STATE() = -1 ROLLBACK
    SELECT * FROM #t /*Охты что это?! Экзакт Аборт не работает! */
    SELECT @@trancount
END CATCH
8 ноя 17, 14:26    [20936541]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Cammomile
Откатывается в конце пакета, и это мы знаем опытным путем.

ВНИМАНИЕ ВОПРОС -- где это написано в документации?

Specifies whether SQL Server automatically rolls back the current transaction when a Transact-SQL statement raises a run-time error.
8 ноя 17, 14:27    [20936544]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
felix_ff, что я хотел получить? Вообще я бы хотел, чтоб пользователи форумов наконец научились вести беседы, держа в голове контекст. А то отвечают на 1 предложение, остальные из головы вылетели. Как золотые рыбки, ей-богу.
8 ноя 17, 14:33    [20936564]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Cammomile
Откатывается в конце пакета, и это мы знаем опытным путем.

ВНИМАНИЕ ВОПРОС -- где это написано в документации?

Using TRY...CATCH in Transact-SQL

автор
Uncommittable Transactions
Inside a TRY…CATCH construct, transactions can enter a state in which the transaction remains open but cannot be committed.
The transaction cannot perform any action that would generate a write to the transaction log,
such as modifying data or trying to roll back to a savepoint.
However, in this state, the locks acquired by the transaction are maintained, and the connection is also kept open.
The effects of the transaction are not reversed until a ROLLBACK statement is issued,
or until the batch ends and the transaction is automatically rolled back by the Database Engine.

If no error message was sent when the transaction entered an uncommittable state,
when the batch finishes, an error message will be sent to the client application that indicates an uncommittable transaction was detected and rolled back.

A transaction enters an uncommittable state inside a TRY block when an error occurs that would otherwise have ended the transaction.
For example, most errors from a data definition language (DDL) statement (such as CREATE TABLE),
or most errors that occur when SET XACT_ABORT is set to ON,
terminate the transaction outside a TRY block but make a transaction uncommittable inside a TRY block.
The code in a CATCH block should test for the state of a transaction by using the XACT_STATE function.
XACT_STATE returns a -1 if the session has an uncommittable transaction.
The CATCH block must not perform any actions that would generate writes to the log if XACT_STATE returns a -1.
The following code example generates an error from a DDL statement
and uses XACT_STATE to test the state of a transaction in order to take the most appropriate action.
8 ноя 17, 14:34    [20936566]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Yasha123,

мне всегда нравится ваш шрифт :)
8 ноя 17, 14:39    [20936586]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1369
Yasha123

еще надо было выделить для товарища жирненьким, что бы лучше читалось.

A transaction enters an uncommittable state inside a TRY block when an error occurs that would otherwise have ended the transaction.
For example, most errors from a data definition language (DDL) statement (such as CREATE TABLE),
or most errors that occur when SET XACT_ABORT is set to ON,
terminate the transaction outside a TRY block but make a transaction uncommittable inside a TRY block.
8 ноя 17, 14:42    [20936604]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
А вы, ребят, не очень быстрые.

Мой тезис : "По тексту xact_abort" совершенно неясно детальное поведение сервера. Нужно дополнительно изучать материалы".

Более того, по документации "TRY-CATH" на подчеркиваю docs.microsoft.com, тоже не до конца понятно. И только статья на technet.microcoft.com дает нам вменяемый ответ.

Ваши ссылки только подтверждают мой тезис, но при этом вы тут спорите со мной, будто я не прав.
8 ноя 17, 14:51    [20936650]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Cammomile
А вы, ребят, не очень быстрые.

Мой тезис : "По тексту xact_abort" совершенно неясно детальное поведение сервера. Нужно дополнительно изучать материалы".

Более того, по документации "TRY-CATH" на подчеркиваю docs.microsoft.com, тоже не до конца понятно. И только статья на technet.microcoft.com дает нам вменяемый ответ.

Ваши ссылки только подтверждают мой тезис, но при этом вы тут спорите со мной, будто я не прав.

о , у нас есть чукача-писатель, теперь добавился "чукча-не читатель"
8 ноя 17, 14:55    [20936674]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Cammomile,

ну и чего вам не хватает в
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/try-catch-transact-sql
или это не в загаловке написано?

автор
If an error generated in a TRY block causes the state of the current transaction to be invalidated, the transaction is classified as an uncommittable transaction. An error that ordinarily ends a transaction outside a TRY block causes a transaction to enter an uncommittable state when the error occurs inside a TRY block. An uncommittable transaction can only perform read operations or a ROLLBACK TRANSACTION. The transaction cannot execute any Transact-SQL statements that would generate a write operation or a COMMIT TRANSACTION. The XACT_STATE function returns a value of -1 if a transaction has been classified as an uncommittable transaction. When a batch finishes, the Database Engine rolls back any active uncommittable transactions. If no error message was sent when the transaction entered an uncommittable state, when the batch finishes, an error message will be sent to the client application. This indicates that an uncommittable transaction was detected and rolled back.
8 ноя 17, 14:56    [20936680]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
мой ответный тезис:
когда кто-то читает только первое попавшееся
и не прилагает никаких усилий по поиску "очевидного невероятного",
его участь неизбежна: "это мы знаем опытным путем".

ну а кто вместо благодарности за проделанный за него поиск еще и с претензиями выступает,
в след. раз останется, с чем пришел.

ну или альтернативно попереливает на 5+ страниц из пустого в порожнее
в конструктивном диалоге с нашим непонятно почему заглохшим сегодня экспертом
8 ноя 17, 14:59    [20936693]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1369
Cammomile

Более того, по документации "TRY-CATH" на подчеркиваю docs.microsoft.com, тоже не до конца понятно.


что там вам непонятно, документация по блоку try/catch везде одна.
хотите ссылку на docs.microsoft.com?

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/try-catch-transact-sql

тоже самое только в смятку:
An error that ordinarily ends a transaction outside a TRY block causes a transaction to enter an uncommittable state when the error occurs inside a TRY block


То поведение - которое вы нас так старательно пытаетесь убедить что "не описано", нормально описано, просто надо внимательней читать. и не выискивать его описания в документации к XACT_ABORT если применяете TRY/CATCH
8 ноя 17, 15:03    [20936700]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1369
Yasha123,

+

с нашим непонятно почему заглохшим сегодня экспертом

видимо он лог пошел наращивать
8 ноя 17, 15:05    [20936708]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
felix_ff
Yasha123,

+

с нашим непонятно почему заглохшим сегодня экспертом

видимо он лог пошел наращивать


+
да не, он до сих пор в поисках флага 666
ему ж так и не дали ответа по этому поводу,
в смысле вот тут конечно совет был дан 20931100
но попробуй-ка включи то, чего и в помине у него нет
8 ноя 17, 15:12    [20936741]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
felix_ff,
+

У меня лог наращивается командой, текст которой для выполнения формируется dynamic sql. А там внутри try-catch. Вот сижу и читаю эту ветку, много думаю и анализирую - нужно ли делать "SET XACT_ABORT ON", а то даже флаг 666 не поможет. А Вы как думаете, какой-нибудь trace flag может менять поведение XACT_STATE(), а то вдруг я его включил для инстанса - и забыл по-стариковски.
8 ноя 17, 15:18    [20936761]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Yasha123,

+

Вы меня очень этим флагом заинтриговали. Отправил письмо Рохану Кумару, попросил его прокоментировать, почему из сборок убрали флаг 666, попросил включить в релиз новой версии MSSQL for Linux. Посмотрим, что он ответит.
8 ноя 17, 15:24    [20936785]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Andy_OLAP
У меня лог наращивается командой, текст которой для выполнения формируется dynamic sql. А там внутри try-catch. Вот сижу и читаю эту ветку, много думаю и анализирую - нужно ли делать "SET XACT_ABORT ON", а то даже флаг 666 не поможет. А Вы как думаете, какой-нибудь trace flag может менять поведение XACT_STATE(), а то вдруг я его включил для инстанса - и забыл по-стариковски.

Картинка с другого сайта.

а давайте-ка проголосуем, у него и правда большие проблемы с головой
или это обычный тролль, который внезапно начал переигрывать?
что-то подозреваю очередной развод, а ведь как все забавно начиналось
8 ноя 17, 15:24    [20936786]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Andy_OLAP
Вы меня очень этим флагом заинтриговали. Отправил письмо Рохану Кумару, попросил его прокоментировать, почему из сборок убрали флаг 666, попросил включить в релиз новой версии MSSQL for Linux. Посмотрим, что он ответит.

а, ну так щас и проверим на вшивость троллизм.
копию письма картинкой в студию.
адрес отправителя можете замазать,
это нам фиолетово.
ПЛИЗ!!!
8 ноя 17, 15:27    [20936800]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1369
Andy_OLAP,

+

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

А касательно xact_abort - что боитесь что в какой то момент вместо отката наоборот подтверждать будет?
8 ноя 17, 15:35    [20936849]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Yasha123
ПЛИЗ!!!

+

Ой-вей, я таки совсем не понимаю, зачем Вам все это нужно. Ведь кошерно было бы оформить это все отдельной темой в этом форуме.
Ну если Вы так настаиваете.


К сообщению приложен файл. Размер - 64Kb
8 ноя 17, 15:48    [20936917]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте смешивание xact_abort , try и tran в одной процедуре  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Andy_OLAP
Yasha123
ПЛИЗ!!!

+

Ой-вей, я таки совсем не понимаю, зачем Вам все это нужно. Ведь кошерно было бы оформить это все отдельной темой в этом форуме.
Ну если Вы так настаиваете.


+

так мы же ставки сделали.
на оба варианта.
мне уже давно говорят, Andy_OLAP - тролль.
но я-то не верю,
и у меня вполне даже конкретное альтернативное объяснение происходящего.
Картинка с другого сайта.

вы, главное, ждите ответ.
не может же он именно вам не ответить.
но если все же так произойдет,
то это только потому, что свои секреты MS просто так не раздает.
особенно в случае сильно опасных флагов.

кстати, можно написать Paul White-у.
он обожает всяческие флаги тестировать.
и он точно знает обо всех тонкостях включения флага 666.
просто надо к нему правильный подход подобрать, понимаете?
чтобы он реально поверил, что вам доподлинно известно об этом флаге.
8 ноя 17, 16:49    [20937258]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить