我在SQL Server 2008中有一个链接服务器,它使用MDASQL提供程序访问Visual Fox Pro ODBC DSN。
尝试执行简单查询时,我收到以下错误:
OLE DB provider "MSDASQL" for linked server "odbclinkedserver" returned message "[Microsoft][ODBC Visual FoxPro Driver]Not enough memory for file map.".
Msg 7399, Level 16, State 1, Line 1 The OLE DB provider "MSDASQL" for linked server "odbclinkedserver" reported an error. The provider ran out of memory.
Msg 7306, Level 16, State 2, Line 1 Cannot open the table "odbctable" from OLE DB provider "MSDASQL" for linked server "odbclinkedserver".
我正在尝试运行此更新查询,该查询是活动的目标:
update odbclinkedserver...odbctable
set memofield = m1.blob
from sqlsvrtable m1
where m1.int_1 = odbctable.int_1
and m1.int_2 = odbctable.int_2
and m1.time= odbctable.time
and odbctable.date= '2011-06-28'
我还尝试了一些更简单的查询,但仍然收到相同的错误:
select top 1 * from odbclinkedserver...odbctable
DSN源是一个免费表目录。涉及的文件大小为:
我已经将SQL实例配置为以'-g'参数开头,值为1024,以便为此操作留出一个内存gig(这是一个没有其他活动的测试服务器)。
使用的参考:http://msdn.microsoft.com/en-us/library/ms190737.aspx
考虑到所涉及文件的大小,查询的简单性以及我已经预留了一大笔RAM供它使用,我对如何解决这个问题已经没有了想法。
有人可以建议解决这些错误的解决方案,以便我可以使用上面的更新查询更新目标dbf吗?
答案 0 :(得分:1)
虽然当我遇到同样的问题时你似乎有足够的内存,但是停止并启动SQL Server服务,然后运行sp_dropserver
和sp_addlinkedserver
就足以解决问题:
IF EXISTS (SELECT srv.name FROM sys.servers srv WHERE srv.server_id != 0 AND srv.name = N'DBF_XXX')EXEC master.dbo.sp_dropserver @server=N'DBF_XXX', @droplogins='droplogins'
GO
EXEC master.dbo.sp_addlinkedserver @server = N'DBF_XXX', @srvproduct=N'Microsoft Jet', @provider=N'VFPOLEDB', @datasrc=N'D:\Data To Import\XXX\data', @provstr=N'dBASE 5.0'
--For security reasons the linked server remote logins password is changed with ########
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'DBF_XXX',@useself=N'False',@locallogin=NULL,@rmtuser=N'Admin',@rmtpassword='########'
答案 1 :(得分:0)
确保您没有违反环境或表结构中任何VFP的ODBC限制。特别要注意的是,ODBC还没有被支持一段时间。查看here以获取一系列限制。是否有可能使用OLEDB驱动程序?如果是这样,请搜索“VFPOLEDB驱动程序下载”以获取所需内容。