[Windows Azure] 使用 Linked Server 方式連接 Windows Azure SQL Database

本文介紹使用 Linked Server 存取 Azure SQL Database 的作法,但要特別聲明,微軟其實並不建議用這個方法,針對跨資料庫查詢,微軟提供了 Azure SQL Database Elastic Query 的功能,請參閱:https://azure.microsoft.com/zh-tw/documentation/articles/sql-database-elastic-query-overview/,而我也將會找時間編寫這個功能的介紹文章。

注意:微軟並不建議使用 Linked Server 存取 Azure SQL Database,同時微軟也另提供了 Azure SQL Database Elastic Query 的功能,以支援跨資料庫的查詢與存取,請參考:https://azure.microsoft.com/zh-tw/documentation/articles/sql-database-elastic-query-overview/

Windows Azure SQL Database (SQL Azure) 的使用上是非常方便的,不但有 GUI 介面的管理工具可用,資料存取的相容性也非常好,使用 ADO.NET 就能連到 SQL Database,而在移轉資料庫的時候,我們還有 SSMS/SSIS 或 SQL Azure Migration Wizard 等工具可用,今天我們用一個 DBA 很常轉移資料的方式-連結伺服器 (Linked Server) 來移轉資料。

首先,我們先在 ODBC 資料來源中設定:

image

 

設定方式也不難,首先,在伺服器名稱中輸入 SQL Database 的 Server 名稱:

image

 

然後設定使用者帳戶,規則要依 SQL Database 的規則設定,否則會無法連線:

image

 

接著設定預設資料庫,建議不要指向master,而是指向要用的資料庫:

image

 

接著接受預設值:

image

 

最後,測試一下連線可成功即可:

image

 

設定完畢後,回到 SSMS,使用下列兩個指令加入連結伺服器:

EXEC master.dbo.sp_addlinkedserver 
     @server = N'[ODBC_DATA_SOURCE_NAME]',
	 @srvproduct=N'Any', 
	 @provider=N'MSDASQL',
	 @datasrc=N'CloudSQLDB'
GO

EXEC master.dbo.sp_addlinkedsrvlogin 
     @rmtsrvname=N'[ODBC_DATA_SOURCE_NAME]',
	 @useself=N'False',
	 @locallogin=NULL,
	 @rmtuser=N'[YOUR_SQL_AZURE_ACCOUNT]',
	 @rmtpassword='[YOUR_PASSWORD]'
GO

 

設定完以後就能用 [link_server_name].[database_name].[owner].[object_name] 來存取 SQL Database 上的資料了。

PS: 據筆者的測試,有些資料型別在用 Linked Server 時會有 metadata 不一致的問題,例如 money 型別,這點可參考 Reference 的方式解決。

 

Reference:

http://blogs.msdn.com/b/sqlcat/archive/2011/03/08/linked-servers-to-sql-azure.aspx