2009-08-05 54 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