Sql-Server

Sql Azure 數據庫中的連結伺服器替代方案

  • November 19, 2020

我們正在將數據庫從 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

引用自:https://dba.stackexchange.com/questions/181679