gpt4 book ai didi

sql-server - 为什么 SQL Server 默认 XACT_ABORT 为 OFF?可以全局设置为ON吗?

转载 作者:行者123 更新时间:2023-12-02 19:36:19 25 4
gpt4 key购买 nike

我了解SET XACT_ABORT的目的命令:

When SET XACT_ABORT is ON, if a Transact-SQL statement raises a run-time error, the entire transaction is terminated and rolled back.

When SET XACT_ABORT is OFF, in some cases only the Transact-SQL statement that raised the error is rolled back and the transaction continues processing. Depending upon the severity of the error, the entire transaction may be rolled back even when SET XACT_ABORT is OFF. OFF is the default setting.

一般来说,如果出现错误则希望继续处理事务的场景会比出现错误时希望回滚整个事务的场景多,因为我经常听到 DBA 和博客建议保留 SET XACT_ABORT ON以避免遇到不一致的交易结果。我看到我们所有的存储过程也有SET XACT_ABORT ON ,作为模板代码的一部分。

问题:

  1. 如果大多数用例需要 XACT_ABORT成为ON ,什么会导致 SQL Server 将其默认为 OFF ?会违约XACT_ABORTON是否给 SQL Server 事务处理增加了任何开销?

  2. SET XACT_ABORT命令仅影响当前 session 。我知道我可以将 SSMS 默认为 SET XACT_ABORT ON来自SSMS > Tools > Options > Query Execution > SQL Server > Advanced如该图所示: enter image description here但这仅限于通过 SSMS 运行的 SQL 语句,对于通过应用程序代码/SSIS 包调用的存储过程没有帮助。对于这些程序我仍然需要重复SET XACT_ABORT ON在每一个程序中。有什么办法XACT_ABORT可以设置为ON在数据库级别?我可以通过任何其他方式设置 XACT_ABORT全局范围内,不必每次都担心?

最佳答案

您可以将XACT_ABORT ON设置为服务器级别的全局默认连接设置,尽管该命令有点晦涩:

EXEC sys.sp_configure N'user options', N'16384'
GO
RECONFIGURE WITH OVERRIDE
GO

参见here了解详情。

还可以通过 SSMS 对象资源管理器 > 服务器属性 > 连接来设置该选项:

enter image description here

关于sql-server - 为什么 SQL Server 默认 XACT_ABORT 为 OFF?可以全局设置为ON吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43192298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com