更改為 ARITHABORT ON 的風險
我正在與一家供應商合作,他們提供核心應用程序,只要我不修改核心應用程序,我就可以建構自己的擴展。它內置在 ColdFusion 中,連接到 SQL Server 2005 數據庫。
我建構的一些報告依賴於使用從核心表計算的函式的視圖,並且隨著表變大,報告變得非常慢。為了加快報告速度,我想使用索引視圖。但是在我的測試環境中創建索引視圖後,核心應用程序無法再插入到核心表中(它返回了使用索引視圖時
ARITHABORT
需要的錯誤消息)。ON
所以似乎為了使用索引視圖,
SET ARITHABORT ON
每當插入/更新核心表時,我都需要擁有核心應用程序。我在我的測試環境中執行了這個:ALTER DATABASE MyDatabase SET ARITHABORT ON;
它似乎工作正常。但是我的供應商說,由於應用程序有數千個查詢,因此此設置可能會破壞其中一個查詢,如果我們將來遇到一些意外的數據庫問題,他們會堅持讓我恢復預設設置。
是否有實際的查詢會被破壞
SET ARITHABORT ON
?有沒有什麼情況下最好保留它OFF
?TL;DR 為了使我的新索引視圖正常工作,我需要
ARITHABORT ON
為整個數據庫進行設置,但我的供應商警告說這將由我自擔風險。真的有風險嗎?
所以
SET ARITHABORT ON
基本上說“如果發生除以零錯誤或發生算術溢出中止查詢”這通常是理想的行為,並且是預設的實例範圍設置。如果這導致您的供應商查詢出現問題,我會說他們可能一開始就遇到了一些編碼問題。我會向他們詢問更多關於他們為何關注這裡的細節。在索引視圖的所有規則中,我認為這和許多設置選項規則是爭議最小的。
這必須在與視圖互動的連接中設置。所以你會想與供應商合作,真正嘗試理解他們的推理,並嘗試讓他們承諾他們對這裡的重大分歧的想法。
也就是說 - 索引視圖有點大不了。它們還有其他規則,它們可以影響供應商的開發人員在建構和性能測試時的應用程序和假設。您真的應該與他們就您試圖通過索引視圖解決的業務問題進行對話,並讓他們參與有關如何解決問題的對話。
進行此更改的明顯風險是,以前正確執行的供應商查詢可能會開始引發錯誤或返回不正確的結果。該
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;