共用方式為


為 Azure Arc 中的 SQL Server 遷移準備受控實例的鏈接遷移環境

適用於:SQL Server

本文協助您準備環境,進行您的 SQL Server 實例由 Azure Arc 啟用的受管理執行個體連結移轉至 Azure 入口網站中的 Azure SQL 受管理實例。

透過連結,您可以使用分散式可用性群組的即時複寫(線上遷移)將 SQL Server 資料庫遷移至 Azure SQL 管理實例:

顯示受管理實例連結遷移的圖表。

備註

你可以 直接向產品團隊提供遷移經驗的回饋。

先決條件

要透過 Azure 入口網站將您的 SQL Server 資料庫遷移到 Azure SQL 管理實例,您需要以下先決條件:

  • 有效的 Azure 訂用帳戶。 如果您沒有訂用帳戶,請建立免費帳戶
  • 受 Azure Arc 啟用的 SQL Server 受支援實例,並包含 SQL Server 版本 或更新版本的 Azure 擴充功能。 你可以透過 Azure 入口網站Azure CLI 來升級擴充功能。

支援的 SQL Server 版本

Azure SQL 受控執行個體的一般用途和業務關鍵服務層級都支援受控執行個體連結。 連結功能的遷移可在 Windows Server 上的企業版、開發者版及標準版 SQL Server 上運作。

下表列出連結中支援的最小 SQL Server 版本:

SQL Server 版本 最低限度維修需求更新
SQL Server 2025 (17.x) SQL Server 2025 RTM (17.0.1000.7)
SQL Server 2022 (16.x) SQL Server 2022 RTM (16.0.1000.6)
SQL Server 2019 (15.x) SQL Server 2019 CU20 (15.0.4312.2)
SQL Server 2017 (14.x) SQL Server 2017 CU31(14.0.3456.2) 或更新版本,以及相應的 SQL Server 2017 Azure Connect 套件(14.0.3490.10) 建置
SQL Server 2016 (13.x) SQL Server 2016 SP3 (13.0.6300.2) 及相應的 SQL Server 2016 Azure Connect pack (13.0.7000.253) 建置
SQL Server 2014 (12.x) 和更早版本 不支援比 SQL Server 2016 更舊的版本。

支援的反向遷移僅限於從具有相應更新原則的 SQL 管理實例到 SQL Server 2025 和 SQL Server 2022。 你也可以透過其他工具手動逆轉遷移,例如 原生備份與還原,或 在 SSMS 中手動設定連結

權限

本節說明透過 Azure 入口網站將 SQL Server 執行個體移轉至 SQL 受控執行個體所需的許可權。

在來源 SQL Server 執行個體上,您需要下列權限:

  • 如果你啟用最小權限,資料庫遷移過程中會依需要授予必要的權限,例如系統管理員
  • 如果你無法使用最小權限,執行遷移的人需要對來源 SQL Server 實例擁有 系統管理員 權限。 另外,如果你需要取消遷移,也要手動為該帳號分配 系統管理員 權限 NT AUTHORITY\SYSTEM

若要使用 受控執行個體連結進行移轉,您需要 SQL 受控執行個體目標的下列其中一個許可權:

如需最低許可權,請參閱 自定義許可權

備註

在 Azure 中具有SqlServerAvailabilityGroups_CreateManagedInstanceLinkSqlServerAvailabilityGroups_failoverMiLinkSqlServerAvailabilityGroups_deleteMiLink許可權的使用者可以在移轉過程期間在資料庫移轉窗格上執行動作,以提升延伸模組所使用帳戶的 SQL Server 許可權,包括sysadmin角色。

準備 SQL Server 執行個體

要準備您的 SQL Server 實例,請完成以下步驟:

你需要 重新啟動 SQL Server ,這些變更才會生效。

安裝服務更新

請確定您的 SQL Server 版本已安裝適當的服務更新,如版本可支援性表格中所示。 若需要安裝更新,必須在更新期間重新啟動 SQL Server 執行個體。

若要檢查您的 SQL Server 版本,請在 SQL Server 上執行下列 Transact-SQL (T-SQL) 指令碼:

-- Run on SQL Server
-- Shows the version and CU of the SQL Server
USE master;
GO
SELECT @@VERSION as 'SQL Server version';

在 master 資料庫中建立資料庫主要金鑰

該連結利用憑證加密 SQL Server 與 SQL 管理實例之間的認證與通訊。 資料庫主金鑰保護連結所使用的憑證。 如果你已經有資料庫主金鑰,可以跳過這個步驟。

在資料庫中 master 建立一個主金鑰。 在以下指令碼中插入您的密碼代替 <strong_password>,並將密碼存放在機密且安全的地方。 在 SQL Server 上執行此 T-SQL 指令碼:

-- Run on SQL Server
-- Create a master key
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>';

若要確定您擁有資料庫主要金鑰,請在 SQL Server 上使用下列 T-SQL 指令碼:

-- Run on SQL Server
USE master;
GO
SELECT * FROM sys.symmetric_keys WHERE name LIKE '%DatabaseMasterKey%';

準備SQL Server 2016實例

對於 SQL Server 2016(13.x),您必須完成「 準備 SQL Server 2016」連結前置條件中所描述的額外步驟。 這些額外步驟對於連結所支援的 SQL Server 2017(14.x)及後續版本並不必要。

啟用可用性群組

連結功能依賴 Always On 可用性群組功能,其預設為停用。 如需詳細資訊,請參閱啟用 Always On 可用性群組功能

若要確認已啟用可用性群組功能,請在 SQL Server 上執行下列 T-SQL 指令碼:

-- Run on SQL Server
-- Is the availability groups feature enabled on this SQL Server
DECLARE @IsHadrEnabled sql_variant = (select SERVERPROPERTY('IsHadrEnabled'))
SELECT
    @IsHadrEnabled as 'Is HADR enabled',
    CASE @IsHadrEnabled
        WHEN 0 THEN 'Availability groups DISABLED.'
        WHEN 1 THEN 'Availability groups ENABLED.'
        ELSE 'Unknown status.'
    END
    as 'HADR status'

如果未啟用可用性群組功能,請遵循下列步驟進行啟用:

  1. 開啟 [SQL Server 組態管理員] 。

  2. 在左側窗格中,選取 [SQL Server 服務]。

  3. 右鍵點選 SQL Server 服務,然後選擇 屬性

    SQL Server 組態管理員的螢幕擷取畫面,其中顯示開啟服務屬性的選取項目。

  4. 前往 Always On Availability Groups 索引標籤。

  5. 選擇 啟用「Always On Availability Groups 」勾選框,然後選擇 確定

    此螢幕擷取畫面顯示 Always On 可用性群組的屬性。

    • 如果你使用 SQL Server 2016 (13.x),且「啟用 Always On Availability Groups」選項被禁用並顯示訊息 ,請依照 This computer is not a node in a failover cluster中所描述的步驟操作。 完成這些步驟後,回到這個步驟再試一次。
  6. 在對話方塊中選取 [OK]

  7. 重新啟動 SQL Server 服務。

啟用啟動追蹤標誌

為了優化連結效能,啟動時啟用以下追蹤旗標:

  • -T1800:此追蹤旗標優化了當可用性群組中主副本與次要副本的日誌檔案位於不同扇區大小的磁碟上,例如 512 位元組與 4 KB 時的效能。 如果主副本和次備份都使用磁碟扇區大小為 4 KB,則不需要這個追蹤旗標。 如需詳細資訊,請參閱 KB3009974
  • -T9567:在自動植入期間,此追蹤旗標會針對可用性群組啟用對資料流的壓縮。 壓縮會增加處理器的負載,但可大幅減少植入期間的傳輸時間。

若要在啟動時啟用這些追蹤旗標,請使用下列步驟:

  1. 開啟 [SQL Server 組態管理員]。

  2. 在左側窗格中,選取 [SQL Server 服務]。

  3. 右鍵點選 SQL Server 服務,然後選擇 屬性

    此螢幕擷取畫面顯示 SQL Server 組態管理員。

  4. 前往 [啟動參數] 索引標籤。在 [指定啟動參數] 中,輸入 並選取 [新增] 以新增啟動參數。 然後輸入 -T9567 並選取 [新增] 以新增其他追蹤旗標。 選取 [套用] 以儲存變更。

    此螢幕擷取畫面顯示啟動參數屬性。

  5. 選取 [確定] 以關閉 [屬性] 視窗。

如需詳細資訊,請參閱啟用追蹤旗標的語法

重新啟動 SQL Server 並驗證設定

如果你不需要升級 SQL Server 版本、啟用可用性群組功能或新增啟動追蹤標誌,可以跳過此部分。

在確認你使用的是支援的 SQL Server 版本後,啟用 Always On 可用性群組功能,並新增啟動追蹤旗標,重新啟動 SQL Server 實例以套用以下所有變更:

  1. 開啟 [SQL Server 組態管理員] 。

  2. 在左側窗格中,選取 [SQL Server 服務]。

  3. 右鍵點擊 SQL Server 服務,然後選擇 重新啟動

    此螢幕擷取畫面顯示 SQL Server 重新啟動命令呼叫。

重新啟動之後,請在 SQL Server 上執行下列 T-SQL 指令碼,以驗證 SQL Server 執行個體的組態:

-- Run on SQL Server
-- Shows the version and CU of SQL Server
USE master;
GO
SELECT @@VERSION as 'SQL Server version';
GO
-- Shows if the Always On availability groups feature is enabled
SELECT SERVERPROPERTY ('IsHadrEnabled') as 'Is Always On enabled? (1 true, 0 false)';
GO
-- Lists all trace flags enabled on SQL Server
DBCC TRACESTATUS;

你的 SQL Server 版本應該是支援的版本之一,並且已套用相應的服務更新。 Always On 可用性群組功能應該已啟用,並且你也應該啟用 -T1800-T9567 追蹤旗標。 下列螢幕擷取畫面是正確設定的 SQL Server 執行個體預期結果範例:

此螢幕擷取畫面顯示 SSMS 中的預期成果。

將資料庫設定為完整復原模型

透過連結遷移的資料庫必須完整恢復模式,且至少有一個備份。

請在 SQL Server 上執行以下程式碼,針對你想遷移的所有資料庫。 將 <DatabaseName> 取代為實際的資料庫名稱。

-- Run on SQL Server
-- Set full recovery model for all databases you want to migrate.
ALTER DATABASE [<DatabaseName>] SET RECOVERY FULL
GO

-- Execute backup for all databases you want to migrate.
BACKUP DATABASE [<DatabaseName>] TO DISK = N'<DiskPath>'
GO

將 Azure 信任的根憑證授權單位金鑰匯入至 SQL Server

要信任 Azure 發行的 SQL 受管實例公開金鑰憑證,你需要將 Azure 受信任的根憑證授權機構(CA)金鑰匯入 SQL Server。

你可以從 Azure 憑證授權中心的詳細資料下載 root CA 金鑰。 至少,下載 DigiCert Global Root G2Microsoft RSA 根憑證授權中心 2017 年的憑證,並匯入你的 SQL Server 實例。

備註

SQL 受控執行個體公開金鑰憑證的憑證路徑中的根憑證是由 Azure 信任的根憑證授權單位 (CA) 所發行。 當 Azure 更新其信任的 CA 清單時,特定根 CA 可能會隨著時間而變更。 若要簡化設定,請安裝 Azure 根憑證授權單位中列出的所有根 CA 憑證。 你可以只安裝所需的 CA 金鑰,方法是識別先前匯入的 SQL 受管實例公開金鑰的發行者。

將憑證儲存在 SQL Server 實例本地,例如範例路徑, C:\certs\<name of certificate>.crt 然後使用以下 Transact-SQL 腳本匯入該路徑的憑證。 將 <name of certificate> 替換為這兩張憑證所需的實際名稱:DigiCert Global Root G2Microsoft RSA Root Certificate Authority 2017

-- Run on SQL Server-- Import <name of certificate> root-authority certificate (trusted by Azure), if not already present
CREATE CERTIFICATE [DigiCertPKI] FROM FILE = 'C:\certs\DigiCertGlobalRootG2.crt'
DECLARE @CERTID int
SELECT @CERTID = CERT_ID('DigiCertPKI')
EXEC sp_certificate_add_issuer @CERTID, N'*.database.windows.net';
GO
CREATE CERTIFICATE [MicrosoftPKI] FROM FILE = 'C:\certs\Microsoft RSA Root Certificate Authority 2017.crt'
DECLARE @CERTID int
SELECT @CERTID = CERT_ID('MicrosoftPKI')
EXEC sp_certificate_add_issuer @CERTID, N'*.database.windows.net';
GO

小提示

如果你的 SQL Server 環境缺少儲存 sp_certificate_add_issuer 程序,代表你的 SQL Server 實例很可能沒有 安裝適當的服務更新

最後,使用下列動態管理檢視 (DMV) 來驗證所有建立的憑證:

-- Run on SQL Server
USE master
SELECT * FROM sys.certificates

設定網路連線能力

若要讓連結能夠運作,您必須具有 SQL Server 與 SQL 受控執行個體之間的網路連線。 您選擇的網路選項取決於您的 SQL Server 執行個體是否位於 Azure 網路上。

SQL Server (Azure 外部)

如果你將 SQL Server 實例架設在 Azure 之外,可以透過以下任一選項建立 SQL Server 與 SQL 管理實例之間的 VPN 連線:

小提示

為了在複製資料時獲得最佳網路效能,請使用 ExpressRoute。 請為您的使用案例佈建具有足夠頻寬的閘道。

Azure 虛擬機器上的 SQL Server

在同一個承載 SQL 托管實例的 Azure 虛擬網路中部署 SQL Server 是最簡單的方法,因為兩個實例之間會自動建立網路連接。 如需詳細資訊,請參閱快速入門:設定 Azure VM 以連線到 Azure SQL 受控執行個體

如果你在 Azure 虛擬機實例上的 SQL Server 與 SQL 管理實例位於不同的虛擬網路中,你需要將兩個虛擬網路連接起來。 虛擬網路不必在同一訂閱系統,這種情況下也能運作。

你有兩種方式可以連接虛擬網路:

對等互連是可取的,因為它會使用 Microsoft 骨幹網路。 所以,從連接性的角度來看,對等虛擬網路中的虛擬機器與同一虛擬網路中的虛擬機延遲沒有明顯差異。 同一區域內的網路間支援虛擬網路互連。 在 2020 年 9 月 22 日之後所建立的子網路中裝載的執行個體,都支援全域虛擬網路對等互連。 如需詳細資訊,請參閱常見問題集 (FAQ)

環境之間的網路連接埠

無論連接機制為何,您必須符合以下條件,才能讓網路流量在環境間流通:

託管 SQL 管理實例的子網路上的網路安全群組(NSG)規則必須允許:

  • 接收來自 SQL Server IP 位址流量的進站埠 5022 與埠範圍 11000-11999
  • 外發埠 5022 用於將流量傳送至目的地 SQL Server IP 位址

5022 埠在 SQL 管理實例中無法更改。

所有主機 SQL Server 網路上的防火牆,以及主機作業系統必須允許:

  • 已開啟輸入連接埠 5022 以接收 MI 子網路 /24 來源 IP 範圍的流量(例如 10.0.0.0/24)
  • 輸出連線埠 5022,且埠範圍 11000-11999 已開啟,以將流量傳送至 MI 子網的目的地 IP 範圍(例如 10.0.0.0/24)

5022 埠可在 SQL Server 端自訂,但埠範圍 11000-11999 必須依原樣開啟。

圖示顯示建立 SQL Server 與 SQL 管理實例連結所需的網路需求。

下表說明每個環境的連接埠動作:

環境 解決方式
SQL Server (Azure 外部) 開啟連接埠 5022 上的輸入和輸出流量,讓網路防火牆涵蓋到SQL 受控執行個體的完整子網路 IP 範圍。 如果需要,也可以在 SQL Server 主機作業系統 Windows 防火牆上做同樣的操作。
SQL Server (Azure 內部) 開啟連接埠 5022 上的輸入和輸出流量,讓網路防火牆涵蓋到SQL 受控執行個體的完整子網路 IP 範圍。 如果需要,也可以在 SQL Server 主機作業系統 Windows 防火牆上做同樣的操作。 若要允許在連接埠 5022 上通訊,請在裝載虛擬機器 (VM) 的虛擬網路中建立網路安全性群組 (NSG) 規則。
SQL 受控執行個體 在 Azure 入口網站 中建立 NSG 規則,以允許來自埠 5022 和埠範圍 11000-11999 上裝載 SQL Server 的 IP 位址和網路的輸入和輸出流量。

若要在 Windows 防火牆中開啟埠,請在 SQL Server 執行個體的 Windows 主機作業系統上使用下列 PowerShell 腳本:

New-NetFirewallRule -DisplayName "Allow TCP port 5022 inbound" -Direction inbound -Profile Any -Action Allow -LocalPort 5022 -Protocol TCP
New-NetFirewallRule -DisplayName "Allow TCP port 5022 outbound" -Direction outbound -Profile Any -Action Allow -LocalPort 5022 -Protocol TCP

下圖展示了一個本地網路環境的範例,表示 環境中所有防火牆都需要有開放埠口,包括承載 SQL Server 實例的作業系統防火牆,以及任何企業防火牆和閘道器:

圖示顯示網路基礎架構,用以建立 SQL Server 與 SQL 管理實例之間的連結。

這很重要

  • 你需要在網路環境中的每個防火牆(包括主機伺服器)以及網路上的任何企業防火牆或閘道器中開啟埠口。 在公司環境中,您可能需要向網路系統管理員顯示本節中的資訊,以協助在公司網路層中開啟其他連接埠。
  • 雖然你可以選擇在 SQL Server 端自訂端點,但無法更改或自訂 SQL 管理實例的埠號。
  • 承載受控執行個體的子網路的 IP 位址範圍不得與 SQL Server 的 IP 位址範圍重疊。

新增 URL 至允許清單

根據你的網路安全設定,你可能需要在允許清單中新增 SQL 管理實例 FQDN 和 Azure 使用的部分資源管理端點的網址。

請加入以下資源至您的白名單:

  • SQL 受控執行個體的完整網域名稱 (FQDN)。 例如: managedinstance.a1b2c3d4e5f6.database.windows.net
  • Microsoft Entra 授權單位
  • Microsoft Entra 端點資源識別碼
  • 資源管理器端點
  • 服務端點

請依照「 為政府雲端配置 SSMS 」部分的步驟,進入 SQL Server 管理工作室(SSMS) 的工具 介面,並指定你雲端資源需要加入允許清單的特定網址。

移轉受 TDE 保護資料庫的憑證 (選用)

如果您要將受透明資料加密 (TDE) 保護的 SQL Server 資料庫連結至 SQL 受控執行個體,您必須先將對應的加密憑證從內部部署或 Azure VM SQL Server 執行個體移轉至 SQL 受控執行個體,才能使用連結。 如需詳細步驟,請參閱將受 TDE 保護資料庫的憑證移轉到 Azure SQL 受控執行個體

使用受服務管理的 TDE 金鑰加密的 SQL 受控執行個體資料庫無法連接至 SQL Server。 只有當你用客戶管理的金鑰加密加密,且目的伺服器能存取用於加密資料庫的同一金鑰時,才能將加密資料庫連結到 SQL Server。 詳情請參閱使用 Azure Key Vault 設定 SQL Server TDE

備註

Linux 上的 SQL Server 從 SQL Server 2022 的累積更新 14 開始支援 Azure 金鑰保存庫。

測試網路連線能力

在開始遷移前,先測試你的 SQL Server 實例與 SQL 管理實例之間的網路連線。 你可以直接從 Azure 入口網站測試連線,作為遷移過程的一部分。 不過,你也可以用 Transact-SQL 和 SQL Server 代理程式手動測試連線。 欲了解更多資訊,請參閱 測試網路連線

要測試透過 Azure 入口網站的連線,請依照以下步驟操作:

  1. 在 SQL Server 實例資源的資料庫遷移窗格中選擇遷移資料

  2. 選擇 MI 連結 選項。

  3. 選擇你想遷移的目標資料庫,然後使用 「Next: Settings 」進入下一個分頁。

  4. 設定 標籤中,提供連結名稱和來源可用性群組。 接著使用 Test 連線 來驗證 SQL Server 與 SQL Managed Instance 之間的網路連線:

    截圖顯示了受管理實例連結測試連線按鈕。

請考慮下列幾點:

  • 為避免誤報,網路路徑上的所有防火牆必須允許網際網路控制訊息協定(ICMP)流量。
  • 為避免誤報,網路路徑上的所有防火牆必須允許使用專有的 SQL Server UCS 協定進行流量。 阻擋協定可能導致連線測試成功,但連結無法建立。
  • 具備封包層級防護欄的進階防火牆設置,必須妥善配置以允許 SQL Server 與 SQL 管理實例之間的流量。

局限性

請考慮下列限制:

  • 受管理實例連結的限制適用於透過 Azure 入口網站進行的遷移。
  • 取消遷移需要取得來源 SQL Server 實例的 系統管理員 權限。 如果你的 SQL Server 實例沒有使用最小權限,手動為帳號分配 系統管理員 權限 NT AUTHORITY\SYSTEM
  • 透過 Azure 入口網站設定連結以進行遷移,與手動建立連結不相容,無論是透過 SQL Server Management Studio(SSMS)還是 Transact-SQL(T-SQL)。 請參考 已知問題 以了解更多。
  • 透過 Azure 入口網站監視移轉僅適用於符合監視 授權需求的 SQL Server 執行個體。

常見問題疑難排解

要排解遷移到 Azure SQL 受管實例時常見的問題,請參見 「疑慮遷移問題」。