複製或移動資料庫 - Azure SQL 受控執行個體
本文內容
適用於: Azure SQL 受控執行個體
本文說明如何在 Azure SQL 受控執行個體中,在不同執行個體之間執行資料庫的線上複製或移動作業。 資料庫複製和移動作業支援在相同 Azure 租用戶中不同的 Azure 訂用帳戶間執行。
概觀
您可以使用 Always On 可用性群組技術,在不同受控執行個體之間執行資料庫的線上複製或移動作業。 複製和移動功能會在目的地執行個體上建立新的資料庫,作為來源資料庫的複本。 透過這項功能,資料複寫可以可靠、一致、非同步且近乎即時的方式執行。
當您「複製」資料庫時,來源資料庫會在作業期間和完成之後保持線上狀態。
相反地,當您「移動」資料庫時,來源資料庫會在作業完成後卸除。
您可以多次執行複製和移動作業,將資料庫從來源受控執行個體移動到一或多個目標執行個體。
複製及移動資料庫與執行時間點還原 (PITR) 不同,因為作業完成後,前者會建立資料庫的複本。 PITR 會建立過去某一指定時間點的資料庫複本。
重要
您將資料庫移動到新的目的地後,現有的 PITR 備份不會隨著資料庫移動,而且將會無法使用。 資料庫會在移動作業完成後,在目的地執行個體上啟動新的備份鏈。
功能使用時機
如果您想執行下列作業,移動或複製資料庫會很有用:
管理資料庫的成長和效能需求。
平衡多個受控執行個體的工作負載。
將資料庫移動到具有更多可用資源的執行個體,以處理工作負載。
從幾個執行個體合併多個資料庫。
在開發、測試和實際執行環境之間建立資料庫同位。
工作流程
複製或移動資料庫的工作流程如下:
選擇資料庫、來源受控執行個體和目的地執行個體,接著啟動作業。
資料庫會植入目的地伺服器。 檢查狀態,判斷作業是否正在進行中或已執行成功。
植入完成後,作業狀態會顯示為「準備完成」。
手動完成作業之前,所有發生於來源資料庫的變更都會套用至目的地資料庫。 您可以隨時取消作業。 您有 24 小時的時間可以完成作業。 如果您未在 24 小時內完成作業,作業會自動取消,目的地資料庫也會卸除。
手動完成作業之後,目的地資料庫就會上線,可以開始讀取/寫入工作負載。
如果您選擇移動 資料庫,來源資料庫就會卸除。 如果您選擇複製 資料庫,來源資料庫會保持上線狀態,但資料同步處理作業會停止。
移動作業的工作流程如下圖所示:
資料庫移動 作業的設計保證不會遺失資料。 當使用者完成移動作業時,來源資料庫會停止接受任何工作負載,並將交易複寫至目的地資料庫。 只有這時,目的地資料庫才會變為上線,並且卸除來源資料庫。 此設計可確保來源資料庫中的所有資料都會移動 至目的地資料庫。
資料庫複製 作業類似於資料庫移動。 唯一的重要差異在於作業的結束方式。 完成資料庫複製作業會停止將交易記錄複寫至目的地資料庫。 雖然使用者明確發出完成複製作業的命令,但使用者不會控制記錄複寫停止時的確切時刻。 最後,來源和目的地資料庫都處於上線、獨立狀態且可供讀寫工作負載使用。
必要條件
您必須先符合下列要求,才能複製或移動資料庫:
您必須擁有來源受控執行個體所在資源群組的「讀取」權限,而且必須在來源和目的地執行個體的資料庫層級同時擁有「寫入」權限。
如果來源和目的地執行個體位於不同的虛擬網路,兩個執行個體的虛擬網路之間必須有網路連線,例如使用 Azure 虛擬網路對等互連。 此外,您需要在連接埠 5022 和連接埠範圍 11000-11999 上允許 TCP 通訊協定的輸入和輸出流量。 這對於裝載來源和目的地執行個體的子網路均適用。 若要深入了解,請檢閱如何在不同 Azure VNet 中的執行個體之間建立網路連線 。
複製或移動資料庫
您可以使用 Azure 入口網站,將資料庫複製或移動到其他受控執行個體。 操作方法:
在 Azure 入口網站 前往您的 SQL 受控執行個體。
在 [資料管理] 底下選取 [資料庫]。
選取一或多個資料庫,然後選取窗格頂端的 [複製] 或 [移動] 選項。
如果您選取 [移動],來源資料庫會在作業完成後卸除;如果選取 [複製],來源資料庫會在作業完成後保持線上狀態。 選取任一選項都會開啟 [移動受控資料庫] 或 [複製受控資料庫] 頁面。 頁面開啟後,您可以選取要在作業中包含的更多資料庫。
在 [來源詳細資料] 窗格中,提供來源資料庫和受控執行個體的詳細資料。
在 [目的地詳細資料] 窗格中,提供目的地受控執行個體的詳細資料。
選取 [檢閱 + 開始],驗證您的來源和目的地詳細資料,然後選取 [開始] 啟動作業。
選取 [開始] 後,系統會帶您回到執行個體的 [資料庫] 頁面,您可以在此監視作業的進度。
在 [資料庫] 頁面上檢查 [作業詳細資料] 資料行,以確認作業的狀態是 [移動中] 或 [複製中]。
如果您需要取消,請依序選取 [進行中] 及您所使用的資料庫,然後選取 [取消作業],即可停止植入作業並卸除目的地資料庫。
監視作業。 植入完成後,[作業詳細資料] 資料行會顯示 [準備完成移動作業] 或 [準備完成複製作業] 狀態。
選取 [準備完成] 以開啟 [作業詳細資料] 資料行,並選擇您準備要複製或移動的資料庫,然後選取 [完成] 即可完成作業,並讓目的地資料庫上線。
您對來源資料庫所做的變更會在這段期間複寫到目的地資料庫,直到您選取 [完成] 為止。 如果您未在 24 小時內完成作業,作業會自動取消,目的地資料庫也會卸除。 選取 [完成] 可完成作業,接著系統會帶您回到 [資料庫] 頁面,您可以在此確認作業已完成。
如果您移動了資料庫,由於資料庫現已離線,畫面上不會顯示資料庫名稱。
注意
針對跨訂閱資料庫複製和移動作業,請使用 Az.Sql PowerShell 模組 5.1 版或更新版本。 在 Copy-AzSqlInstanceDatabase
中,參數 -TargetSubscriptionId
是選擇性的,而且只需要跨訂用帳戶複製或移動作業。
使用 Azure PowerShell Commandlet 來啟動、取得、完成或取消資料庫複製 或資料庫移動 作業。
以下是如何複製資料庫的範例。
$dbName = "<database_name>"
$miName = "<source_managed_instance_name>"
$rgName = "<source_resource_group_name>"
$tmiName = "<target_managed_instance_name>"
$trgName = "<target_resource_group_name>"
## Parameter TargetSubscriptionId is optional and is needed only for cross-subscription copy or move operations.
$trgSubId = "<target_subscription_id>"
## Start database copy operation.
Copy-AzSqlInstanceDatabase -DatabaseName $dbName -InstanceName $miName -ResourceGroupName $rgName -TargetInstanceName $tmiName -TargetResourceGroupName $trgName -TargetSubscriptionId $trgSubId
## Verify the operation status is succeeded.
Get-AzSqlInstanceDatabaseCopyOperation -DatabaseName $dbName -InstanceName $miName -ResourceGroupName $rgName -TargetInstanceName $tmiName -TargetResourceGroupName $trgName
## Complete database copy operation.
Complete-AzSqlInstanceDatabaseCopy -DatabaseName $dbName -InstanceName $miName -ResourceGroupName $rgName -TargetInstanceName $tmiName -TargetResourceGroupName $trgName -TargetSubscriptionId $trgSubId
## Verify the operation status is succeeded.
Get-AzSqlInstanceDatabaseCopyOperation -DatabaseName $dbName -InstanceName $miName -ResourceGroupName $rgName -TargetInstanceName $tmiName -TargetResourceGroupName $trgName
以下是另一個如何啟動資料庫移動和取消作業的範例。
$dbName = "<database_name>"
$miName = "<source_managed_instance_name>"
$rgName = "<source_resource_group_name>"
$tmiName = "<target_managed_instance_name>"
$trgName = "<target_resource_group_name>"
## Parameter TargetSubscriptionId is optional and is needed only for cross-subscription copy or move operations.
$trgSubId = "<target_subscription_id>"
## Start database move operation.
Move-AzSqlInstanceDatabase -DatabaseName $dbName -InstanceName $miName -ResourceGroupName $rgName -TargetInstanceName $tmiName -TargetResourceGroupName $trgName -TargetSubscriptionId $trgSubId
## Verify the operation status is succeeded.
Get-AzSqlInstanceDatabaseMoveOperation -DatabaseName $dbName -InstanceName $miName -ResourceGroupName $rgName -TargetInstanceName $tmiName -TargetResourceGroupName $trgName
## Complete database copy operation.
Stop-AzSqlInstanceDatabaseMove -DatabaseName $dbName -InstanceName $miName -ResourceGroupName $rgName -TargetInstanceName $tmiName -TargetResourceGroupName $trgName -TargetSubscriptionId $trgSubId
## Verify the operation status is succeeded.
Get-AzSqlInstanceDatabaseMoveOperation -DatabaseName $dbName -InstanceName $miName -ResourceGroupName $rgName -TargetInstanceName $tmiName -TargetResourceGroupName $trgName
注意
針對跨訂用帳戶資料庫複製和移動作業,請使用 Azure CLI 2.63.0 版或更新版本。 在 az sql midb copy start
中,參數 --dest-sub-id
是選擇性的,而且只需要跨訂用帳戶複製或移動作業。
使用 Azure CLI Commandlet 來啟動、取得、完成或取消資料庫複製 或資料庫移動 作業。
以下是如何複製資料庫的範例。
dbName="<database_name>"
miName="<source_managed_instance_name>"
rgName="<source_resource_group_name>"
subId="<source_subscription_id>"
destMiName="<target_managed_instance_name>"
destRgName="<target_resource_group_name>"
destSubId="<destination_subscription_id>"
az account set --subscription $subId
az sql midb copy start --name $dbName --resource-group $rgName --managed-instance $miName --dest-rg $destRgName --dest-mi $destMiName --dest-sub-id $destSubId
az sql midb copy list --name $dbName --resource-group $rgName --managed-instance $miName
az sql midb copy complete --name $dbName --resource-group $rgName --managed-instance $miName --dest-rg $destRgName --dest-mi $destMiName --dest-sub-id $destSubId
az sql midb copy list --name $dbName --resource-group $rgName --managed-instance $miName
以下是另一個如何啟動資料庫移動和取消作業的範例。
dbName="<database_name>"
miName="<source_managed_instance_name>"
rgName="<source_resource_group_name>"
subId="<source_subscription_id>"
destMiName="<target_managed_instance_name>"
destRgName="<target_resource_group_name>"
destSubId="<destination_subscription_id>"
az account set --subscription $subId
az sql midb move start --name $dbName --resource-group $rgName --managed-instance $miName --dest-rg $destRgName --dest-mi $destMiName --dest-sub-id $destSubId
az sql midb move list --name $dbName --resource-group $rgName --managed-instance $miName
az sql midb move cancel --name $dbName --resource-group $rgName --managed-instance $miName --dest-rg $destRgName --dest-mi $destMiName --dest-sub-id $destSubId
az sql midb move list --name $dbName --resource-group $rgName --managed-instance $miName
資料庫複製和移動作業都有兩個階段。 第一個是初始植入,第二個是將變更從來源資料庫複寫到目的地資料庫。 一般而言,初始植入是更嚴苛的作業階段。 完成初始植入所需的時間取決於資料大小和使用中複製或移動作業的數目。 在來源和目的地 Azure SQL 受控執行個體上發生的工作負載強度,以及來源和目的地之間的網路速度,也會影響植入速度。 在最佳情況下,以及使用建議的全域 VNet 對等互連建立來源和目的地之間的連線時,植入速度最高可達每小時 360 GB。 植入程序及其速度可以透過 DMV sys.dm_hadr_physical_seeding_stats 進行監視。
SELECT
role_desc,
transfer_rate_bytes_per_second,
transferred_size_bytes,
database_size_bytes,
start_time_utc,
estimate_time_complete_utc,
end_time_utc,
local_physical_seeding_id
FROM
sys.dm_hadr_physical_seeding_stats;
限制
請考量複製和移動功能的下列限制:
來源執行個體和目的地執行個體不能相同。
來源執行個體和目的地執行個體都必須位於相同的 Azure 區域。
您只能複製及移動「使用者」資料庫。 目前尚不支援複製及移動「系統」資料庫。
資料庫一次只能參與單一移動或複製作業。
來源執行個體一次最多可以執行八個複製或移動作業。 您可以啟動八個以上的作業,但部分作業會排入佇列等待處理,由服務所管理。
資料庫無法在複製或移動期間重新命名。
複製或移動作業不會複製資料庫標籤。
資料庫複製和移動作業不會複製或移動 PITR 備份。
您無法複製或移動容錯移轉群組 包含的資料庫,也無法複製或移動使用受控執行個體連結 的資料庫。
來源或目的地受控執行個體不應設定容錯移轉群組 (異地災害復原) 設定。
仰賴這些功能的資料庫一旦經過移動,您就必須重新設定異動複寫、異動資料擷取 (CDC) 或分散式交易。
來源資料庫使用客戶自控金鑰 (CMK) 作為 TDE 保護器時,若要將資料庫複製或移動至目標 SQL 受控執行個體,目標執行個體必須能夠存取用於在 Azure Key Vault 加密來源資料庫的相同金鑰。
無法將已設定一律保持最新的更新原則 的執行個體中的資料庫複製或移動到已設定 SQL Server 2022 更新原則 的執行個體。 在將已設定 SQL Server 2022 更新原則的執行個體中的資料庫複製或移動到已設定一律保持最新的更新原則的執行個體後,無法將其複製或移動到已設定 SQL Server 2022 更新原則的執行個體。
相關內容
更多與資料庫複製和移動相關的文件。
如需其他資料移動選項,請檢閱以下文件: