【问题标题】:I need to add a linked server to a MS Azure SQL Server我需要将链接服务器添加到 MS Azure SQL Server
【发布时间】:2015-02-18 18:12:13
【问题描述】:

我试了又试了,还是连不上。我可以使用 SSMS 连接到服务器,但无法从本地服务器链接到它。这是我的脚本(用相关信息替换括号中的内容):

EXEC master.dbo.sp_addlinkedserver
    @server     = N'[servername].database.windows.net',
    @srvproduct = N'Any',
    @provider   = N'MSDASQL',
    @datasrc    = N'Azure_ODBC1'
GO

EXEC master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname  = N'[servername]',
    @useself     = N'False',
    @locallogin  = NULL,
    @rmtuser     = N'[username]',
    @rmtpassword = '[password]'

GO

【问题讨论】:

    标签: azure-sql-database server linked-server


    【解决方案1】:

    很遗憾,SQL Azure DB 不支持链接服务器。 https://msdn.microsoft.com/en-us/library/azure/ee336281.aspx

    但是,正如您从下面的论坛链接中看到的那样,Microsoft 已经意识到这种情况并且已经听取了客户的反馈。 http://feedback.azure.com/forums/217321-sql-database/suggestions/402636-cross-database-reference

    【讨论】:

    • 可以从 SQL Server 企业版(当然也可以是开发版)建立到 SQL Azure 的链接服务器。请参阅您发布的第二个链接中的 cmets。
    【解决方案2】:
    -- Make a link to the cloud
    EXEC sp_addlinkedserver   
         @server='[servername].database.windows.net',   -- specify the name of the linked server    
         @srvproduct=N'Azure SQL Db',
         @provider=N'SQLNCLI', 
         @datasrc='yourservername',             -- add here your server name   
         @catalog='FCS';
    GO
    
    --Set up login mapping
    EXEC sp_addlinkedsrvlogin 
        @rmtsrvname = '[servername].database.windows.net',   
        @useself = 'FALSE', 
        @locallogin=NULL,
        @rmtuser = 'username',
        @rmtpassword = 'password'
    GO
    

    这确实在我的环境中创建了一个链接服务器,但是它没有连接到我指定的目录 (FCS)。由于某种原因,它连接到默认值。是不是我做错了什么

    【讨论】:

      【解决方案3】:

      虽然 Azure DB 不支持定义链接服务器,但您可以使用最近预览的 Elastic Query 功能来定义只是另一个 Azure DB 数据库的“外部数据源”,并定义作为对表的引用的“外部表”在那个外部数据库中。然后您可以查询它们,就好像它们是本地对象一样。这与 Linked Server 概念非常相似,在here 中有详细描述。

      【讨论】:

      【解决方案4】:

      ckarst 第二个链接中所述,有一个可行的解决方案。我把它贴在这里是为了省去你搜索它的麻烦。正如 JuanPableJofre 在本页 Azure feedback 中所建议的那样:

      使用 SQL 2014,我能够在本地 SQL 服务器和 SQL Azure 之间进行分布式查询。 首先,我创建了一个链接服务器:

      • 链接服务器(名称):LinkedServerName
      • 提供程序:用于 SQL Server 的 Microsoft OLE DB 提供程序
      • 产品名称:(空白)
      • 数据源:azure-db.database.windows.net
      • 提供者字符串:(空白)
      • 位置:(空白)
      • 目录:数据库名称

      在安全选项中:(*)

      • 使用此安全上下文进行制作
      • 远程登录:azure-user-name
      • 使用密码:yourPassword

      在 SSMS 中输入以下测试查询:

      use [Local_DB] 
      go
      
      Select *
      from [LinkedServerName].[RemoteDB].[dbo].[Remote_Table] 
      

      效果很好!!

      总而言之,链接服务器是在您的本地数据库上创建的。目录(数据库名称)很重要,因为 Azure 可能不允许您在查询中指定它(即:use azureDBName 在 Azure 上不起作用),因此数据库名称必须在目录中。

      【讨论】:

      • 是的,效果很好。诀窍是填写 ssms 对话框(正如 Phillippe 所描述的那样),而不是让它采用其默认值 - 这是我以前从未想过尝试的事情。很棒的提示,感谢 Phillpipe 分享这个!
      • azure-user-name 指的是什么用户名?我已经与服务器管理员尝试过,它无法连接。它失败并显示“无法打开登录请求的数据库“XXX”。登录失败。”。我保证凭据正确,因为我可以使用这些凭据直接连接,但是系统管理员的名称不是 sa,并且密码包含特殊字符,例如?
      • @Mihail Shishkov azure-user-name 是您的 azure sql 用户名。确保您在 Catalog 字段中输入了 azure 数据库名称。
      • @Philippe 你是对的,我拼错了数据库名称(目录)。只是为了通知可能阅读此内容的其他人:您也可以使用“SQL Server Native Client”而不是“Microsoft OLE DB Provider”
      • 我一直收到消息“无法确定服务器名称。”要修复,我必须输入 azure-user-name@azure-db 作为远程登录,其中 azure-db 是数据源的第一部分:azure-db.database.windows.net
      猜你喜欢
      • 1970-01-01
      • 2017-01-06
      • 2021-09-21
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2011-01-13
      相关资源
      最近更新 更多