Sql-Server

如何解決連結伺服器上的地理空間數據導致錯誤?

  • July 26, 2016

問題的更新。

確切的錯誤是無法使用 HRESULT 0x80131022 初始化公共語言執行時 (CLR) v2.0.50727。您可以解決問題並稍後重試。

該錯誤發生在我的本地 SQL Server 2008r2 實例上,它通過 OPENQUERY 呼叫呼叫連結伺服器(另一個 sql server 2008r2)。我正在從我的本地實例執行該 sp。呼叫連結伺服器的程式碼會失敗,但僅當地理空間數據(幾何)包含在語句的選擇部分(在打開查詢中呼叫的語句)時。當在連結伺服器的選擇語句中沒有地理空間數據時,它執行得很好。因此,連結伺服器連接上的地理空間數據會導致錯誤。

我應該指出,但這可能是一個紅鯡魚,相同的儲存過程是從 ssis 包中的 sql 任務呼叫的,它通過了。它在我的本地 sql server 實例上呼叫了該過程。但這不是現在的問題。上面概述了這個問題。

我還應該指出,Microsoft 將該特定錯誤稱為記憶體壓力錯誤。

術語“記憶體壓力”中所指的“記憶體”是物理 RAM,而不是硬碟空間。

當您收到此錯誤時,您到底想做什麼?這似乎由於試圖從sp_OA*OLE-Automation 儲存過程呼叫中呼叫 CLR 程式碼所致。以下 Microsoft 論壇主題中記錄了這一點:CLR 初始化失敗,hresult 0x80131022

根據以下 Microsoft KB 文章 (# 2003681),這可能是由於實際記憶體壓力:使用 SQL CLR 時“無法初始化公共語言執行時 (CLR)”的可能原因。記憶體壓力是指在物理 RAM 上執行不足,因為這是 SQL Server 更喜歡使用的。對於在 SQLCLR 中執行的操作,這些類型的錯誤在 SQL Server 2012 之前更為常見,尤其是在 32 位系統上。你是32位系統嗎?

此外,在此 Microsoft 論壇主題(與 SQL Server 2008 R2 相關)中 -無法輸入公共語言執行時 (CLR),HRESULT 為 0x80131022。這可能是由於資源條件低——Bob Beauchemin 說:

您可以通過降低 SQL Server 的 max_server_memory 設置來增加 64 位系統上 SQLCLR 可用的記憶體量。您可以使用 sys.dm_os_memory_objects 的總和來監視 SQLCLR 使用的記憶體量,其中類型如 ‘%CLR%’ 和 .NET CLR 記憶體系列中的適當性能計數器。

有關 SQL Server 記憶體體系結構(適用於 SQL Server 2005、2008 和 2008 R2)的詳細資訊,請參閱以下文章:

這可能是一個更令人滿意的答案。該問題已通過初始化呼叫 CLR 程序集的空間函式得到解決。之後,查詢工作。我知道這是問題所在,因為當我恢復有問題的數據庫時,問題又回來了,解決方案如上所述。我可以呼叫任何呼叫 CLR 程序集並初​​始化 CLR 的空間函式,這就是解決方案。謝謝你的幫助。

這是導致問題的程式碼。

SELECT c.ClientKey, mas.Id, mas.UniqueId ,mas.ObjectType ,mas.ObjectSubType ,mas.Status, mas.Number, mas.Name, mas.Owner, mas.Coverage, mas.Location, mas.LastMaintainedDate, mas.NextScheduledDate, mas.WorkOrder, mas.IsActive, mas.CreateDate, mas.UpdateDate
       FROM    OPENQUERY(PIPELINE, 'SELECT
                       o.ClientId,
                       o.Id,
                       o.UniqueId,
                       ot.Description as ObjectType,
                       ost.Description as ObjectSubType,
                       o.Status,
                       o.Number,
                       o.Name,
                       o.Owner,
                       ma.Coverage,
                       ma.Location,
                       ma.LastMaintainedDate,
                       ma.NextScheduledDate,
                       ma.WorkOrder,
                       o.IsActive,
                       o.CreateDate,
                       o.UpdateDate
               can't show table due to sensitivity

覆蓋範圍和位置是幾何類型。

引用自:https://dba.stackexchange.com/questions/144792