2009-08-05 61 views
1

我們有一臺運行SQL Server 2000標準版SP3的老式Windows 2000服務器。這有一個鏈接的服務器設置,通過ODBC連接連接到Informix數據庫。一年中的大部分時間,對鏈接服務器運行OPENQUERY都可以正常工作,沒有任何問題。 但是,每隔幾個月,此鏈接的服務器都會失敗,直到SQL Server重新啓動後纔會再次運行。 我們在企業管理器中看到的錯誤是這樣的:鏈接服務器錯誤的未知原因

--------------------------- 
SQL Server Enterprise Manager 
--------------------------- 
Error 7399: OLE DB provider 'UNKNOWN' reported an error. 

Memory allocation failure.] 
Memory allocation failure.] 
OLE DB error trace [OLE/DB Provider 'UNKNOWN' IDBSchemaRowset::GetRowset returned 0x80004005: ]. 
--------------------------- 
OK 
--------------------------- 

,如果我嘗試運行鍼對在查詢分析器中的鏈接服務器的任何SQL查詢,報告的錯誤是這樣的:

[OLE/DB provider returned message: Unspecified error] 
OLE DB error trace [OLE/DB Provider 'MSDASQL' 
IDBCreateCommand::CreateCommand returned 0x80004005: ]. 
Msg 7399, Level 16, State 1, Line 1 
OLE DB provider 'MSDASQL' reported an error. 

如果我申請了跟蹤標誌引用here我得到了更多的細節:

OLE DB error trace [Non-interface error: OLE DB provider MSDASQL 
returned an incorrect value for DBPROP_CONCATNULLBEHAVIOR which should 
be either DBPROPVAL_CB_NULL or DBPROPVAL_CB_NON_NULL]. 
[OLE/DB provider returned message: Unspecified error] 
OLE DB error trace [OLE/DB Provider 'MSDASQL' 
IDBCreateCommand::CreateCommand returned 0x80004005: ]. 
Msg 7399, Level 16, State 1, Line 1 
OLE DB provider 'MSDASQL' reported an error. 

什麼會導致此任何想法?我們不知道有任何服務器故障或設置更改,重啓似乎總能解決這個問題。 Informix DB似乎是Informix Dynamic Server 2000 9.21.UC2的版本,升級或修補它不可用作爲選項。

回答

1

請注意,IDS 9.21已經不再支持 - 事實上,9.30和9.40(IDS的後續版本)也不受支持。即使您出於政治原因而無法實際升級,但您仍有多年未能升級。

似乎SQL Server端的某處存在內存泄漏,可能是由於您正在使用的Informix ODBC驅動程序中的內存泄漏導致的。

如果您無法升級任何內容,則定期重新啓動SQL Server以清除累積的內存是最簡單,最可靠的選擇。既然你暗示它通常會在幾個月內運行幾個月,我會考慮每個月重啓一次。

+0

是的,我知道它已經過時了。我希望(可能是徒勞)會有一些事情可以做,以清除不需要重新啓動的錯誤,並隨後中斷使用該服務器的其他應用程序。 但我現在肯定會定期重啓。 – MartW 2009-08-05 15:58:59

+0

除了要求升級外,IBM/Informix沒有任何功能可以用於過時的系統。您可能能夠獲得更新版本的ODBC驅動程序,並使用它來連接到舊服務器 - 這取決於IDS與SQL Server的關係。如果他們在同一臺機器上,那麼實現起來可能會更棘手 - 尤其是對於您使用的舊版本。較新的代碼具有更好的共存屬性 - 您可以在同一臺計算機上爲不同版本的ODBC單獨拷貝。如果SQL Server與IDS分開(在另一臺計算機上),請考慮升級ODBC。 – 2009-08-05 17:20:35