none
SQL2005的链接服务器问题 RRS feed

  • 问题

  • 我的2台SQL2005 A/B,服务器A上已设定链接服务器B,然后在A上执行SQL语句:select * from b.db1.dbo.table1会出错误提示如下:

    消息 7399,级别 16,状态 1,第 1 行
    連結伺服器 "B" 的 OLE DB 提供者 "SQLNCLI" 報告了錯誤。提供者並未給予任何關於錯誤的資訊。
    消息 7312,级别 16,状态 1,第 1 行
    不能使用連結伺服器 "B" 的 OLE DB 提供者 "SQLNCLI" 的結構描述或目錄。提供了四部分的名稱,但提供者並未公開必要的介面,以使用目錄或結構描述。

    请问这是什么问题,如何可以解决,谢谢。
    honwing
    2009年10月12日 15:51

答案

  • 这种情况下,先在A上用查询分析器通过Linked Server配置中的用户名密码连接到B,看看是否连接的通,是否可以正常查询数据。
    如果上述是正常的,建议您删除重新配置。
    Linked Server配置SQL Server源时有2个方式:
    1. server type选择SQL Server。这种配置方式,Linked Server的名字必须是A的DB服务名(一般是A的名字)。
    2. server type选择other data source。
    您2种方式都试看看,应该能解决。
    2009年10月13日 1:27
  • 除了select * from b.db1.dbo.table1这种查询方式
    也同时试试SELECT * FROM OPENQUERY(b,'select * from table1')这种用openquery的方式。

    2009年10月13日 1:34
  • 謝謝各位的思路提醒,終於找到答案了。
    原因在於SQL Netavie Client的提供者選項中,不能啟用限層級零與不允許特定存取2個選項。

    honwing
    2009年10月13日 4:31

全部回复

  • 1. 请问还有没有别的消息?
    2. 请检查db1的确存在
    3. 可以去掉linked server再重新注册,检查两服务器的登陆帐号是否map正确
    4. 用profiler做出trace来帮助debug每个stored procedure,注意检查security/permission问题
    Relate all.
    2009年10月12日 17:29
  • 我的2台SQL2005 A/B,服务器A上已设定链接服务器B,然后在A上执行SQL语句:select * from b.db1.dbo.table1会出错误提示如下:

    消息 7399,级别 16,状态 1,第 1 行
    連結伺服器 "B" 的 OLE DB 提供者 "SQLNCLI" 報告了錯誤。提供者並未給予任何關於錯誤的資訊。
    消息 7312,级别 16,状态 1,第 1 行
    不能使用連結伺服器 "B" 的 OLE DB 提供者 "SQLNCLI" 的結構描述或目錄。提供了四部分的名稱,但提供者並未公開必要的介面,以使用目錄或結構描述。

    请问这是什么问题,如何可以解决,谢谢。
    honwing
    How did you map sql users in linked server? Ensure user that runs the query has permission on remote database you linked to. 
    2009年10月12日 19:46
  • 这种情况下,先在A上用查询分析器通过Linked Server配置中的用户名密码连接到B,看看是否连接的通,是否可以正常查询数据。
    如果上述是正常的,建议您删除重新配置。
    Linked Server配置SQL Server源时有2个方式:
    1. server type选择SQL Server。这种配置方式,Linked Server的名字必须是A的DB服务名(一般是A的名字)。
    2. server type选择other data source。
    您2种方式都试看看,应该能解决。
    2009年10月13日 1:27
  • 除了select * from b.db1.dbo.table1这种查询方式
    也同时试试SELECT * FROM OPENQUERY(b,'select * from table1')这种用openquery的方式。

    2009年10月13日 1:34
  • 1.在A服务器上新建查询窗口,用B服务器的登录名登录,然后执行下select * from db1.dbo.table1看能否成功
    2.保证第一步成功执行后,确保在设置链接服务器的时候用了上面的登录名登录、或做好了映射

    2009年10月13日 1:41
    版主
  • 试试用其它的数据库驱动,如ADO.Net.

    2009年10月13日 2:29
  • 謝謝各位的思路提醒,終於找到答案了。
    原因在於SQL Netavie Client的提供者選項中,不能啟用限層級零與不允許特定存取2個選項。

    honwing
    2009年10月13日 4:31