【问题标题】:Creating a Linked Server instance from MS SQL Server to a Google Cloud MySQL server创建从 MS SQL Server 到 Google Cloud MySQL 服务器的链接服务器实例
【发布时间】:2018-07-19 01:04:49
【问题描述】:

我一直在尝试将 MSSQL 服务器的数据库连接到 Google Cloud MySQL 服务器,以便在它们之间进行连接。我已经在我的机器上设置了正确的 ODBC 并测试了连接,它工作正常。但是当我在 MS Server Management Studio 中设置链接服务器时,出现错误 7303

已创建链接服务器,但连接测试失败。是否要保留链接服务器?

附加信息: 执行 Transact-SQL 语句或批处理时发生异常。 (Microsoft.SqlServer.ConnectionInfo)

无法为链接服务器“MYSQL”初始化 OLE DB 提供程序“MSDASQL”的数据源对象。 链接服务器“MYSQL”的 OLE DB 提供程序“MSDASQL”返回消息“[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified”。 (Microsoft SQL Server,错误:7303

我可能在这里遗漏了什么?我确保我拥有的 ODBC 驱动程序是 64 位(与我拥有的 MS 服务器管理相同),但也将系统 DSN 配置为 32 位。我必须在 Google Cloud Server 上配置什么才能使此链接正常工作吗?由于 DSN 连接测试通过,我认为它一定是 Server Management Studio 本身内部的一些故障。谢谢!

编辑:这是用于创建链接服务器的脚本:

USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'SERVERNAME', @srvproduct=N'MSDASQL', @provider=N'MSDASQL', @datasrc=N'server-name'

GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'rpc', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'rpc out', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'SERVERNAME', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
USE [master]
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'SERVERNAME', @locallogin = NULL , @useself = N'False'
GO

【问题讨论】:

  • SSMS 是客户端工具,而不是服务器。至于错误,它表示服务器上没有具有该名称的 ODBC 源。 您的机器上是否安装了 SQL Server?您是否创建了用户数据源或机器数据源?
  • 我的机器上确实安装了 SQL Server(使用 SELECT @@ Version 它说我有 SQL Server 2012,64 位)。我创建了一个系统 DSN,它的连接在 Server Management Studio 环境之外可以正常工作。
  • 这是来自 Google 的链接,外部应用程序的连接选项。cloud.google.com/sql/docs/mysql/external-connection-methods
  • 我再说一遍,SSMS 是客户端工具。错误来自服务器。 SSMS 能够执行创建链接服务器的命令。但是,当它尝试检查连接时,出现了错误。
  • 请发布用于创建链接服务器的命令。 SSMS 中几乎所有对话框的顶部都有一个script 按钮

标签: mysql sql-server linked-server


【解决方案1】:

说实话,这实际上是客户端错误。
您的客户端计算机上没有安装 MSDASQL 驱动程序,或者您可能只有客户端工具无法连接的版本——例如运行 64 位客户端时的 32 位。

创建链接服务器没有错误是正常的。
sp_addlinkedserver 不检查驱动程序;它只是创建相关的表条目。

要轻松查看您拥有的驱动程序,请尝试使用可视化 ODBC 数据源工具。
您可以开始创建 DNS 并查看所有驱动程序名称。它可能只有长名称,但也可以。

【讨论】:

    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 2012-12-20
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多