注意:微軟並不建議使用 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 資料來源中設定:
設定方式也不難,首先,在伺服器名稱中輸入 SQL Database 的 Server 名稱:
然後設定使用者帳戶,規則要依 SQL Database 的規則設定,否則會無法連線:
接著設定預設資料庫,建議不要指向master,而是指向要用的資料庫:
接著接受預設值:
最後,測試一下連線可成功即可:
設定完畢後,回到 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