Azure SQL“弹性数据库查询”是否允许连接到本地SQL Server数据库?

时间:2018-06-13 17:00:39

标签: azure azure-sql-database

我想从Azure SQL数据库查询本地SQL Server。 This回答似乎表明我可以通过“弹性数据库查询”功能来做到这一点。

但是,我读到的有关“弹性数据库查询”的所有内容仅提及连接到另一个 Azure SQL数据库,而不是本地SQL Server数据库。

我尝试通过一个接一个地运行这些语句来使用“弹性数据库查询”功能:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MY_SUPER_SECRET_PASSWORD';  

CREATE DATABASE SCOPED CREDENTIAL SSDB_On_Premises_Credentials    
WITH IDENTITY = 'MY_USERNAME',  
SECRET = 'MY_OTHER_SUPER_SECRET_PASSWORD';  

CREATE EXTERNAL DATA SOURCE SSDB_On_Premises WITH   
    (TYPE = RDBMS,   
    LOCATION = 'the.path.to.my.on.premises.database',   
    DATABASE_NAME = 'MyDatabaseName',    
    CREDENTIAL = SSDB_On_Premises_Credentials          
) ;     

CREATE EXTERNAL TABLE USER(
    ID INT NOT NULL, 
    FIRSTNAME NVarchar(255),
    LASTNAME NVarchar(255) NOT NULL
)
WITH
(
    DATA_SOURCE = SSDB_On_Premises 
);

SELECT * FROM USER;

然而,我收到此错误:

  

发生与网络相关或特定于实例的错误   建立与SQL Server的连接。找不到服务器或   无法访问。验证实例名称是否正确   SQL Server配置为允许远程连接。 (提供者:命名   管道提供程序,错误:40 - 无法打开与SQL的连接   服务器)

这可能是我的本地SQL Server上的配置设置有问题,但我猜测“弹性数据库查询”更有可能不会连接到本地数据源。

2 个答案:

答案 0 :(得分:1)

没有。 CREATE EXTERNAL DATA SOURCE的文档指定目标必须是RDBMS外部数据源的Azure SQL数据库:

-- Elastic Database query only: a remote database on Azure SQL Database as data source   
-- (only on Azure SQL Database)  
CREATE EXTERNAL DATA SOURCE data_source_name  
    WITH (   
        TYPE = RDBMS,  
        LOCATION = '<server_name>.database.windows.net',  
        DATABASE_NAME = '<Remote_Database_Name>',  
        CREDENTIAL = <SQL_Credential>  
    )  
[;]  

新的(预览)Azure SQL数据库托管实例支持与SQL Server的链接服务器连接:

  

链接服务器

     

托管实例中的链接服务器支持有限   目标数量:支持的目标:SQL Server和SQL数据库不   支持的目标:文件,Analysis Services和其他RDBMS。

Azure SQL Database Managed Instance T-SQL differences from SQL Serve

Managed Instance也支持在私有VNet上运行,从中可以合理地连接到pre-premesis SQL Server实例。 Azure SQL数据库无法与您的on-premesis服务器通信。

答案 1 :(得分:1)

弹性数据库查询在Azure SQL数据库之间工作,并仅查询Azure SQL数据仓库。从架构的角度来看,如果弹性查询允许创建外部数据源到本地SQL Server实例,那么Azure将依赖其基础架构之外的服务器来满足查询。更好的体系结构可能是使用SQL Data Sync将本地数据库复制到Azure SQL上的中心数据库,然后使用该中心数据库创建弹性查询。即使从性能的角度来看也更有意义,因为查询不会针对您的本地数据库执行,并且延迟将不那么重要。

相关问题