none
链接服务器问题 RRS feed

  • 问题

  • 本人在VMWare 6.0上装了两台Windows server 2003服务器,一台安装SQL Server 2005,命名为SQL1,一台安装了Access,命名为North,两台服务器位于一个虚拟局域网lan1中。拷贝access文件“c:\Practice Files\Northwind.mdb"
    然后按一下步骤创建链接服务器,并执行查询:
    EXECUTE sp_addlinkedserver 'North','OLE DB Provider for Jet','Microsoft.Jet.OLEDB.4.0','C:\Practice Files\Northwind.mdb'

    EXECUTE sp_addlinkedsrvlogin 'North',TRUE,NULL

    SELECT  *  FROM North...Customers;


    结果得到报错信息:
    链接服务器"North"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "'C:\Practice Files\Northwind.mdb'
    不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。"。
    消息 7303,级别 16,状态 1,第 1 行
    无法初始化链接服务器 "North" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。

    我又尝试着在数据库源文件路径前加上了Access数据库的服务器名称North或IP地址192.168.1.2
    结果得到报错信息:磁盘错误,或网络错误

    请问各位达人,问题出在哪里呢?

    2009年10月19日 2:34

答案

  • EXECUTE sp_addlinkedserver 'North','OLE DB Provider for Jet','Microsoft.Jet.OLEDB.4.0','C:\Practice Files\Northwind.mdb'
    'C:\Practice Files\Northwind.mdb 必须是位于SQl server 数据库这台服务器上 而不是Acces的那台 Access 不支持这种通过ip方式访问的


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://blog.tanging.net
    • 已标记为答案 salihai8136 2009年10月19日 3:29
    2009年10月19日 2:47

全部回复

  • “磁盘错误,或网络错误”这个就是问题所在

    请楼主先确保SQL1所在的Server,可以用类似\\192.168.1.2\shareName\Northwind.mdb的方式访问到mdb文件。当然你得事先在access所在的机器上,开启共享让SQLServer所在的机器可以访问。
    • 已建议为答案 Stone Z 2009年10月19日 2:46
    2009年10月19日 2:42
    版主
  • 你可以在sqlserver所在的虚拟机上,先用ping 192.168.1.2的方式,看下虚拟机之间的网络是否连通的,这个是最先决的条件了。
    2009年10月19日 2:46
    版主
  • EXECUTE sp_addlinkedserver 'North','OLE DB Provider for Jet','Microsoft.Jet.OLEDB.4.0','C:\Practice Files\Northwind.mdb'
    'C:\Practice Files\Northwind.mdb 必须是位于SQl server 数据库这台服务器上 而不是Acces的那台 Access 不支持这种通过ip方式访问的


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://blog.tanging.net
    • 已标记为答案 salihai8136 2009年10月19日 3:29
    2009年10月19日 2:47
  • 我要是想实现远程访问Acess数据库,怎么实现呢,开启共享,不会是把Pracitce Files文件夹共享吧,这样要自映射和委托这类的安全机制做什么呀?
    这个比较实际点,要是SQL SERVER和Access位于一台服务器,岂不是用处不大
    2009年10月19日 2:54
  • 我简单在本地建立了一个共享目录,里面有个Access文件,然后用UNC的方式访问是可以读到Access里面表内容的,只是速度上有点..
    下面是我的测试代码:

    --创建链接服务器
    USE [master]
    GO
    EXEC master.dbo.sp_addlinkedserver @server = N'TESTACCESS', @srvproduct=N'testaccess', @provider=N'Microsoft.Jet.OLEDB.4.0', @datasrc=N'\\192.168.0.60\TestAccess\dnary.mdb'
    GO
    EXEC master.dbo.sp_serveroption @server=N'TESTACCESS', @optname=N'collation compatible', @optvalue=N'false'
    GO
    EXEC master.dbo.sp_serveroption @server=N'TESTACCESS', @optname=N'data access', @optvalue=N'true'
    GO
    EXEC master.dbo.sp_serveroption @server=N'TESTACCESS', @optname=N'rpc', @optvalue=N'true'
    GO
    EXEC master.dbo.sp_serveroption @server=N'TESTACCESS', @optname=N'rpc out', @optvalue=N'true'
    GO
    EXEC master.dbo.sp_serveroption @server=N'TESTACCESS', @optname=N'connect timeout', @optvalue=N'0'
    GO
    EXEC master.dbo.sp_serveroption @server=N'TESTACCESS', @optname=N'collation name', @optvalue=null
    GO
    EXEC master.dbo.sp_serveroption @server=N'TESTACCESS', @optname=N'query timeout', @optvalue=N'0'
    GO
    EXEC master.dbo.sp_serveroption @server=N'TESTACCESS', @optname=N'use remote collation', @optvalue=N'true'
    GO
    USE [master]
    GO
    EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'TESTACCESS', @locallogin = NULL , @useself = N'False'
    GO
    
    --测试查询Access数据库IP方式链接的表数据
    select * from TESTACCESS...Syntaxes
    --查询结果能出来,不过速度上不是很理想,需要4s
    /*
    	ID          Name
    	----------- --------------------
    	1           Boolean
    	2           Integer
    	3           Enumerator
    	4           InetAddr
    	5           String
    	6           OctetString
    	7           UTCTime
    	8           ProviderSpecific
    	9           UnsignedInteger
    
    	(9 行受影响)
    */
    2009年10月19日 3:03
    版主
  • 更多远程访问Access数据库的方法,请参考下面网址:
    http://www.feeten.cn/html/database/04/200901041526319011181.html

    2009年10月19日 3:05
    版主
  • 共享Access数据库没多大实际意义的


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://blog.tanging.net
    2009年10月19日 3:11
  • 首先,谢谢您这么费心的帮我解决问题
    但我还有些问题,access数据库所在服务器建立了共享目录,岂不是只要拥有访问access所在服务器的共享文件的权限的用户都可以看到这个文件,这在实际企业中,是不是又不安全因素
    其次,SQL Server 2005链接服务器的安全机制,通过这种方式是不是没起作用
    2009年10月19日 3:12
  • 哦,我去看看,麻烦了
    2009年10月19日 3:14
  • 我就是做做实验,后面还要做远程链接,Oracle和DB2的实验的
    2009年10月19日 3:14
  • 首先,谢谢您这么费心的帮我解决问题
    但我还有些问题,access数据库所在服务器建立了共享目录,岂不是只要拥有访问access所在服务器的共享文件的权限的用户都可以看到这个文件,这在实际企业中,是不是又不安全因素
    其次,SQL Server 2005链接服务器的安全机制,通过这种方式是不是没起作用
    1.我也比较赞同“Raymond Tang”的观点,实际应用的时候,还是把文件拷贝到SqlServer所在的服务器比较好
    2.远程共享就不是SQL Server 2005链接服务器能控制的范围了,你可以在Access文件本上上加密来增加一道安全门槛
    2009年10月19日 3:22
    版主