更改为 ARITHABORT ON 的风险

kru*_*ubo 12 sql-server-2005 vendor-support configuration materialized-view

我正在与一家供应商合作,他们提供核心应用程序,只要我不修改核心应用程序,我就可以构建自己的扩展。它内置于连接到 SQL Server 2005 数据库的 ColdFusion 中。

我构建的一些报告依赖于使用从核心表计算的函数的视图,并且随着表变大,报告变得非常缓慢。为了加快报告速度,我想使用索引视图。但是在我的测试环境中创建索引视图后,核心应用程序无法再插入到核心表中(它返回了使用索引视图时ARITHABORT需要的错误消息ON)。

因此,似乎为了使用索引视图,SET ARITHABORT ON每当插入/更新核心表时,我都需要拥有核心应用程序。我在我的测试环境中运行了这个:

ALTER DATABASE MyDatabase SET ARITHABORT ON;
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常。但是我的供应商说,由于应用程序有数千个查询,因此此设置可能会破坏其中一个查询,如果我们将来遇到一些意外的数据库问题,他们会坚持要我恢复默认设置。

是否有实际的查询会被打破SET ARITHABORT ON?有什么情况最好保留它OFF吗?

TL;DR 为了让我的新索引视图工作,我需要ARITHABORT ON为整个数据库设置,但我的供应商警告说,这将由我自己承担风险。真的有风险吗?

Mik*_*lsh 9

所以SET ARITHABORT ON 基本上说“如果发生被零除错误或发生算术溢出中止查询”这通常是可取的行为,并且是默认的实例范围设置。如果这导致您的供应商的查询出现问题,我想说他们可能一开始就遇到了一些编码问题。我会向他们询问更多有关他们为何如此关注的详细信息。

索引视图的所有规则中,我认为这是争议最小的规则和许多设置选项规则。

这必须在与视图交互的连接中设置。因此,您会希望与供应商合作,真正尝试了解他们的推理,并尝试让他们就此处的重大分歧做出他们的想法。

也就是说 - 索引视图有点重要。它们还有其他规则,它们可以影响供应商开发人员在构建和性能测试时的应用程序和假设。您真的应该与他们就您试图通过索引视图解决的业务问题进行对话,并让他们参与有关如何解决问题的对话。


Pau*_*ite 7

进行此更改的明显风险是,以前正确运行的供应商查询可能会开始引发错误,或返回不正确的结果。该ARITHABORT设置部分控制算术溢出被零除错误是否返回NULL结果、以错误终止语句或以错误终止批处理。供应商代码如何对抛出错误而不是返回的代码做出反应,这不是NULL您想在生产系统上进行试验的内容:)

但是,如果您的数据库兼容级别为 90 或更高,并且会话使用SET ANSI_WARNINGS ON. 此设置必须ON在您测试索引视图时进行,但您需要确认供应商应用程序连接使用的有效设置。Management Studio 可以很好地配置为SET在连接时使用与供应商代码设置的选项不同的选项(并且您不能使用数据库或实例默认值覆盖这些选项)。与供应商核对,并通过使用 SQL Server Profiler 跟踪供应商代码进行确认。

可以说,更大的风险是供应商将拒绝支持您的安装,直到设置返回到OFF,但您仍然应该尝试鼓励您的供应商更新他们的代码以使用推荐的SET选项,因此您不必在两者之间做出选择性能并运行受支持的安装。当然,另一种方法是针对数据库的副本运行报告。

-- Recommended effective settings
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT, 
    CONCAT_NULL_YIELDS_NULL, 
    QUOTED_IDENTIFIER, 
    ANSI_NULLS, 
    ANSI_PADDING,
    ANSI_WARNINGS ON;
Run Code Online (Sandbox Code Playgroud)