AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 135221
Accepted
Anti-weakpasswords
Anti-weakpasswords
Asked: 2016-04-14 14:26:20 +0800 CST2016-04-14 14:26:20 +0800 CST 2016-04-14 14:26:20 +0800 CST

如何保证在链接服务器中使用 Microsoft ODBC Driver 13 for SQL Server?

  • 772

在 SQL Server 2016 上,如何保证在链接服务器中使用 Microsoft ODBC Driver 13 for SQL Server?我不介意那里有另一个层,例如 MSDASQL 提供程序,但我确实希望 SQL Server 的 ODBC 驱动程序 13 最终成为与删除实例的连接。

通过在 Windows 2016 Technical Preview 4 上对 SQL Server 2016 RC2 进行测试,都在空白 VM 上全新安装,我可以使用 odbcad32 查看“ODBC Driver 13 for SQL Server”,版本为 2015.130.1300.275,文件名为 MSODBCSQL13.DLL。

版本和文件名在 64 位 odbcad32 屏幕以及来自 c:\windows\syswow64 的 32 位 odbcad32 屏幕中是相同的,所以我不认为这是一个 32 位与 64 位的问题(特别是因为驱动程序是由 SQL Server 2016 RC2 安装的)。

例如,在 SQL 2014 上,要使用 Native Client 11,我会使用

EXEC master.dbo.sp_addlinkedserver @server = N'LinkName', @srvproduct=N'sql_server', @provider=N'SQLNCLI11', @datasrc=N'YourTargetServer'

在 SQL 2016 RC2 上,当我尝试

EXEC master.dbo.sp_addlinkedserver @server = N'LinkName', @srvproduct=N'sql_server', @provider=N'MSODBCSQL13', @datasrc=N'YourTargetServer'

链接服务器创建得很好,但是当我尝试使用它时,我得到:

Msg 7403, Level 16, State 1, Line 7
The OLE DB provider "MSODBCSQL13" has not been registered.

我没有任何运气尝试 SQL Server 的 ODBC Driver 13 Microsoft ODBC Driver 13 for SQL Server 的提供程序名称

甚至尝试组合 MSDASQL 提供程序名称,来自

将 Always Encrypted 与 Windows ODBC 驱动程序 和 sp_addlinkedserver (Transact-SQL)一起使用

甚至查看注册表也没有显示我认识的提供商名称。

请注意,实际上,当我为 SQL Server 选择 ODBC Driver 13 时,使用 odbcad32 创建系统 DSN 确实可以成功测试,所以我知道它可以工作。

理想情况下,我只需要一个示例 sp_addlinkedserver 命令,在其中指定新的 ODBC 驱动程序。

sql-server linked-server
  • 2 2 个回答
  • 8579 Views

2 个回答

  • Voted
  1. SQLmojoe
    2016-04-15T08:46:47+08:002016-04-15T08:46:47+08:00

    不能只使用 ODBC。链接服务器使用依赖于 OLEDB 接口的分布式查询。这不是可选的或可互换的 API。在该 API 之下可以是任何 OLEDB、ODBC 甚至 JDBC 提供程序,只要其实现支持 OLEDB 接口即可。例如,有一个用于 ODBC 的 OLEDB 提供程序,这是针对非 SQL Server 数据源运行 DQ 的最常见方法之一。SQL Server 本身支持 OLEDB,因此不需要额外的层。大多数/所有这些信息都可以在 Books Online 或 MSDN 中找到。

    为什么只需要使用 ODBC?如果想要始终加密,建议您通过https://connect.microsoft.com/SQLServer/feedback/记录功能请求。我不知道是否支持通过 DQ 运行 AE 的场景。“调用 SQL Server”本质上成为“目标 SQL Server”的客户端,但您不能完全控制客户端,因为 DQ 不是您可以修改的东西。

    如果是出于其他原因,请在此处分享详细信息,以便人们帮助提出替代解决方案。

    • 1
  2. Best Answer
    user131315
    2017-07-26T07:31:12+08:002017-07-26T07:31:12+08:00

    链接服务器确实依赖于 OLEDB 接口,但 ODBC 驱动程序可以安全地在 SQL Server 服务器之间使用。(人们普遍认为微软不支持这种配置;这是一个神话。)

    使用链接服务器使用 ODBC 驱动程序 11、13 或 13.1。

    EXEC master.dbo.sp_addlinkedserver @server = N'LinkedServerName', @srvproduct=N'', @provider=N'MSDASQL', @provstr=N'DRIVER={ODBC Driver 13 for SQL Server};MultiSubnetFailover=Yes;ApplicationIntent=READONLY;Trusted_Connection=Yes;SERVER=FqnServerName;'
    

    ODBC 13.1 驱动程序是一个更新,仍然使用“ODBC Driver 13 for SQL Server”驱动程序名称,而不是“ODBC Driver 13.1 for SQL Server”。

    我发现,在我的测试中,使用完全限定的服务器名称似乎更可靠,尤其是在连接到 AG 时,但您始终可以只尝试使用服务器名称。

    您可以测试服务器间 Kerberos 连接,但使用 OPENROWSET。我测试 Kerberos 的一种方法是使用从源服务器运行的简单查询:

    SELECT * FROM OPENROWSET(N'MSDASQL', N'Driver={ODBC Driver 13 for SQL Server};Server=FqnServerName;Database=master;Trusted_Connection=yes;MultiSubNetFailover=yes;', N'SELECT * FROM [sys].[databases]') AS [Source]
    

    如果您看到此错误,则需要在服务器之间配置 Kerberos:

    链接服务器“(null)”的 OLE DB 提供程序“MSDASQL”返回消息“[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]用户 'NT AUTHORITY\ANONYMOUS LOGON' 登录失败。”。

    2012 Native Client 现在(超过)五年了,已被 Microsoft 正式弃用,如果您想与 Microsoft 的路线图保持一致,您将需要使用 ODBC。考虑到 2014 年,2012 年的 Native Client 才两年。现在考虑添加到 SQL Server 2016 和 SQL Server 2017 且不受 2012 Native Client 支持的所有功能,并且您有一个使用 ODBC Driver 13.1 for SQL Server 的巨大用例。

    自去年年中以来,我的组织一直在迁移到 SQL Server 2016,我们正在测试 SQL Server 2017 (CTP 2.1)。我一直在迁移我们所有的链接服务器(至少那些指向 SQL Server 2016 或 SQL Server 2017 的服务器)以使用 ODBC 驱动程序 13(或更准确地说,13.1),并且在一年多的测试中还没有发现任何严重的问题针对 SQL Server 2016。

    (为了充分披露,使用链接服务器的图表存在问题;我基于使用 ODBC 13.1 的链接服务器向 Microsoft 报告了该问题,并且 Microsoft 确认链接服务器(任何类型)不支持图表表在 SQL Server 2017 中。)

    如果您遇到任何问题,请告诉我,我会帮助您。

    • 1

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve