1

我们有一台运行 SQL Server 2000 标准版 SP3 的旧 Windows 2000 服务器。这有一个链接服务器设置以通过 ODBC 连接连接到 Informix DB。在一年的大部分时间里,对链接服务器运行 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.

如果我应用此处引用的 TRACE 标志,我会得到更多详细信息:

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 版本,升级或修补它不是一个选项。

4

1 回答 1

1

请注意,IDS 9.21 早已不再支持——事实上,9.30 和 9.40(IDS 的后续版本)也不再支持。尽管出于政治原因您似乎实际上无法进行升级,但您的升级已逾期数年。

SQL Server 端似乎存在内存泄漏,这可能是由您正在使用的 Informix ODBC 驱动程序中的内存泄漏引起的。

如果您无法升级任何东西,那么定期重新启动 SQL Server 以清除累积的内存是最简单、最可靠的选择。由于您暗示它通常一次工作几个月,我会考虑每月重新启动一次左右。

于 2009-08-05T15:23:47.103 回答