Sql-Server
Sql Azure 數據庫中的連結伺服器替代方案
我們正在將數據庫從 Rackspace 遷移到 Azure。我們的數據庫部署在機架空間的虛擬機上。在我們的查詢中,我們使用連結伺服器到其他數據庫。基本上是跨數據庫查詢。問題是遷移數據庫後,我們無法使用連結伺服器查詢,因為 Sql Azure db 不支持連結伺服器。
請幫忙。
更新:
- 並非所有數據庫都是天藍色的。一些數據庫與它們各自的所有者在遠端位置。我們需要查詢在 Azure 之外執行的數據庫。
- Azure 中沒有用於 Sql Server 的 VM。我們在 Azure 中使用數據庫即服務。
有關更多詳細資訊,請參見下圖
雖然不理想,但此處的替代方法可能是將您的 Azure 數據庫設置為從您的本地數據庫創建的複制發布的訂閱者。複製將允許您限制出版物中的文章、過濾記錄類型等,這可能意味著您可以最小化出版物,只發送服務於傳統的四部分查詢所需的數據。如果您仍想使用跨數據庫查詢,您始終可以創建第二個 Azure DB 作為這些出版物的訂閱者,然後利用目前 Azure DB 中的跨數據庫查詢,這可以讓您最大限度地減少對現有數據庫的任何重寫功能。
您可以使用此處解釋的跨數據庫查詢。例如,要在查詢中引用遠端表,您需要創建數據源:
CREATE EXTERNAL DATA SOURCE MyExtSrc WITH ( TYPE=SHARD_MAP_MANAGER, LOCATION='myserver.database.windows.net', DATABASE_NAME='ShardMapDatabase', CREDENTIAL= SMMUser, SHARD_MAP_NAME='ShardMap' );
使用該數據源定義一個外部表。
CREATE EXTERNAL TABLE [dbo].[all_dm_exec_requests]( [session_id] smallint NOT NULL, [request_id] int NOT NULL, [start_time] datetime NOT NULL, [status] nvarchar(30) NOT NULL, [command] nvarchar(32) NOT NULL, [sql_handle] varbinary(64), [statement_start_offset] int, [statement_end_offset] int, [cpu_time] int NOT NULL ) WITH ( DATA_SOURCE = MyExtSrc, SCHEMA_NAME = 'sys', OBJECT_NAME = 'dm_exec_requests', DISTRIBUTION=ROUND_ROBIN );
最後,在 SELECT 語句上使用外部表。
SELECT TOP 10 [request_id], [start_time] [status], [command] FROM all_dm_exec_requests ORDER BY [cpu_time] DESC