Почему SQL Server по умолчанию XACT_ABORT имеет значение OFF? Можно ли включить глобально?
Я понимаю цель команды SET XACT_ABORT:
Когда SET XACT_ABORT установлен в ON, если инструкция Transact-SQL вызывает ошибку во время выполнения, вся транзакция завершается и откатывается.
Когда SET XACT_ABORT имеет значение OFF, в некоторых случаях выполняется только откат оператора Transact-SQL, вызвавший ошибку, и транзакция продолжает обрабатываться. В зависимости от серьезности ошибки можно выполнить откат всей транзакции, даже если для SET XACT_ABORT установлено значение OFF. ВЫКЛ - настройка по умолчанию.
В общем, сценарии, в которых можно продолжить обработку транзакции, если ошибка будет превосходить нумерацию, в сценариях, в которых можно откатить всю транзакцию в случае ошибки, потому что я часто слышу, как администраторы и блоги рекомендуют сохранить SET XACT_ABORT ON
чтобы избежать появления противоречивых результатов транзакции. Я видел все наши хранимые процедуры также SET XACT_ABORT ON
, как часть шаблонного кода.
Quesions:
Если большинство случаев использования требуют
XACT_ABORT
бытьON
что привело бы SQL Server по умолчанию кOFF
? Будет дефолтXACT_ABORT
вON
добавили какие-либо накладные расходы на обработку транзакций SQL Server?SET XACT_ABORT
Команда влияет только на текущие сеансы. Я знаю, что могу сделать SSMS по умолчаниюSET XACT_ABORT ON
отSSMS > Tools > Options > Query Execution > SQL Server > Advanced
как показано на этом изображении:Но это ограничено только для операторов SQL, выполняемых через SSMS, и не помогает с хранимыми процедурами, вызываемыми через пакеты кода приложения /SSIS. Для этих процедур я все еще должен повторить
SET XACT_ABORT ON
в каждой процедуре. Там в любом случаеXACT_ABORT
можно установить наON
на уровне базы данных? Любые другие способы, которыми я могу установитьXACT_ABORT
глобально и не нужно беспокоиться об этом каждый раз?
1 ответ
Вы можете установить XACT_ABORT ON
как глобальная настройка соединения по умолчанию на уровне сервера, хотя команда немного неясна:
EXEC sys.sp_configure N'user options', N'16384'
GO
RECONFIGURE WITH OVERRIDE
GO
Смотрите здесь для деталей.
Опцию также можно установить через Обозреватель объектов SSMS> Свойства сервера> Подключения: