分享方式:


在 Azure SQL 資料庫中複製資料庫的交易一致性複本

適用於:Azure SQL 資料庫

Azure SQL 資料庫提供數種方法,可在相同伺服器或不同伺服器上建立現有資料庫的複本。 您可以使用 Azure 入口網站、PowerShell、Azure CLI 或 Transact-SQL 來拷貝資料庫。

注意

Microsoft Entra ID 先前稱為 Azure Active Directory (Azure AD)。

概觀

資料庫複本是在起始複製要求時的來源資料庫交易一致性快照。 您可以選取相同的伺服器或不同的伺服器的複本。 此外,您也可以選擇保留來源資料庫的備份備援和計算大小,或在相同的服務層級中使用不同的備份儲存體備援和/或計算大小。 另外,還可能將標準服務層級中的資料庫複製到標準或一般用途層,以及將進階服務層級中的資料庫複製到進階版或商務關鍵層。

複製完成後,新資料庫是一個具有完整功能且獨立於來源資料庫的資料庫。 複製的資料庫中所含的登入、使用者和權限會與來源資料庫分開受到管理。 此複本是使用異地複寫技術建立的。 一旦完成複本植入,異地複寫連結就會自動終止。 使用異地複寫的所有需求都適用於資料庫複製作業。 如需詳細資訊,請參閱作用中異地複寫概觀

注意

Azure 入口網站、PowerShell 和 Azure CLI 不支援將資料庫拷貝到不同的訂用帳戶。

超大規模資料庫的資料庫複本

若是 超大規模資料庫服務層級中的資料庫,目標資料庫會決定複本是快速複本或資料大小複本:

  • 快速複本:當拷貝在與來源相同的區域中完成時,將會從 Blob 的快照集建立複本,而不論資料庫大小為何,此複本都是快速操作。

  • 資料大小複本:當目標資料庫位於與來源不同的區域,或資料庫備份儲存體備援 (本機、區域和異地) 與來源資料庫不同時,拷貝作業會是資料大小的作業。 拷貝時間不與大小直接成正比,因為頁面伺服器 Blob 以平行方式拷貝。

資料庫複本中的登入

當您將資料庫複製到相同的伺服器時,可以在這兩個資料庫上使用相同的登入。 您用來複製資料庫的安全性主體會變成新資料庫的資料庫擁有者。

當您將資料庫複製到不同的伺服器時,目標伺服器上起始複製作業的安全性主體會變成新資料庫的擁有者。

不論目標伺服器為何,所有資料庫使用者、其權限及其安全性識別碼 (SID) 都會拷貝到資料庫複本。 使用自主資料庫使用者來進行資料存取,可確保所複製的資料庫具有相同的使用者認證,以便在複製完成時,您可以使用相同的認證立即加以存取。

如果您使用伺服器層級登入進行資料存取,並將資料庫複製到不同的伺服器,登入型存取可能會無法使用。 此種情形可能是因為登入不存在於目標伺服器上,或因為其密碼和安全性識別碼 (SID) 不同而發生。 若要了解如何在將資料庫拷貝到不同的伺服器時管理登入的詳細資訊,請參閱如何管理災害復原後的 Azure SQL 資料庫安全性。 在不同伺服器的複製作業成功之後,且在重新對應其他使用者之前,只有與資料庫擁有者,或伺服器管理員相關聯的登入可以登入所複製的資料庫。 若要在複製作業完成之後,解析登入及建立資料存取,請參閱解析登入

使用 Azure 入口網站複製

若要使用 Azure 入口網站複製資料庫,請開啟資料庫的頁面,然後選擇 [複製] 以開啟 [建立 SQL Database - 複製資料庫] 頁面。 針對您要將資料庫複製至其中的目標伺服器,填入值。

Azure 入口網站的螢幕擷取畫面,顯示資料庫概觀頁面上醒目提示的資料庫複製選項。

複製資料庫

您可以使用 PowerShell、Azure CLI 和 Transact-SQL (T-SQL) 來複製資料庫。

針對 PowerShell,請使用 New-AzSqlDatabaseCopy Cmdlet。

重要

Azure SQL 資料庫仍然支援 PowerShell Azure Resource Manager (RM) 模組,但所有未來的開發都是針對 Az.Sql 模組。 AzureRM 模組在至少 2020 年 12 月之前都還會持續收到 Bug 修正。 Az 模組和 AzureRm 模組中命令的引數本質上完全相同。 如需其相容性的詳細資訊,請參閱新的 Azure PowerShell Az 模組簡介

New-AzSqlDatabaseCopy -ResourceGroupName "<resourceGroup>" -ServerName $sourceserver -DatabaseName "<databaseName>" `
    -CopyResourceGroupName "myResourceGroup" -CopyServerName $targetserver -CopyDatabaseName "CopyOfMySampleDatabase"

資料庫複製是非同步作業,但在接受要求後會立即建立目標資料庫。 如果您需要在複製作業仍進行時加以取消,請使用 Remove-AzSqlDatabase Cmdlet,卸除目標資料庫。

如需完整範例 PowerShell 指令碼,請參閱將資料庫複製到新伺服器

監視複製作業的進度

藉由查詢 sys.databasessys.dm_database_copiessys.dm_operation_status 檢視來監視複製程序。 拷貝過程中,新資料庫之 sys.databases 檢視的 state_desc 資料行會設定為 COPYING

  • 如果拷貝失敗,新資料庫之 sys.databases 檢視的 state_desc 資料行會設定為 SUSPECT。 在新的資料庫上執行 DROP 陳述式,稍後再試一次。
  • 如果拷貝成功,新資料庫之 sys.databases 檢視的 state_desc 資料行會設定為 ONLINE。 複製已完成且新資料庫是一般資料庫,能夠與來源資料庫分開進行變更。

注意

如果決定取消正在進行的拷貝,請在新資料庫上執行 DROP DATABASE 陳述式。

重要

如果您需要使用比來源更小的服務目標來建立複本,目標資料庫可能沒有足夠的資源來完成植入程序,而可能導致複製作業失敗。 在此案例中,請使用異地還原要求在不同的伺服器及/或不同的區域中建立複本。 如需詳細資訊,請參閱使用資料庫備份來復原 Azure SQL 資料庫

權限

若要建立資料庫複本,必須具備下列角色:

  • 訂用帳戶擁有者,或是
  • 「SQL Server 參與者」角色,或
  • 來源伺服器上具有下列權限的自訂角色:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write
  • 目標伺服器上具有下列權限的自訂角色:
    • Microsoft.Sql/servers/read
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write

若要取消資料庫拷貝,必須具備下列角色:

  • 訂用帳戶擁有者,或是
  • 「SQL Server 參與者」角色,或
  • 目標資料庫上具有下列權限的自訂角色:
    • Microsoft.Sql/servers/databases/delete

若要使用 Azure 入口網站管理資料庫拷貝,也需要下列權限:

  • Microsoft.Resources/subscriptions/resources/read
  • Microsoft.Resources/deployments/read
  • Microsoft.Resources/deployments/write
  • Microsoft.Resources/deployments/operationstatuses/read

如果想要在入口網站的資源群組中查看部署底下的作業、跨多個資源提供者的作業 (包括 SQL 作業),您將需要下列額外的權限:

  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read
  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read

解析登入

在新資料庫於目標伺服器上線之後,使用 ALTER USER 陳述式將使用者從新的資料庫重新對應至目標伺服器上的登入。 若要解析被遺棄的使用者,請參閱 被遺棄使用者疑難排解。 另請參閱如何管理災害復原後的 Azure SQL 資料庫安全性

新資料庫中的所有使用者都保有其在來源資料庫中原有的權限。 起始資料庫複本的使用者會變成新資料庫的資料庫擁有者。 拷貝成功之後,重新對應其他使用者之前,只有資料庫擁有者可以登入新的資料庫。

若要了解將資料庫複製到不同的伺服器時如何管理使用者與登入,請參閱如何管理災害復原後的 Azure SQL 資料庫安全性

資料庫複製錯誤

在 Azure SQL 資料庫中複製資料庫時,可能會發生下列錯誤。 如需詳細資訊,請參閱 複製 Azure SQL 資料庫

錯誤碼 嚴重性 描述
40635 16 IP 位址 '%.*ls' 的用戶端已暫時停用。
40637 16 建立資料庫副本目前已停用。
40561 16 資料庫複製失敗。 來源或目標資料庫不存在。
40562 16 資料庫複製失敗。 已經卸除來源資料庫。
40563 16 資料庫複製失敗。 已經卸除目標資料庫。
40564 16 資料庫複製因內部錯誤而失敗。 請卸除目標資料庫並再試一次。
40565 16 資料庫複製失敗。 不允許從相同來源進行超過 1 個並行資料庫複製。 請卸除目標資料庫並稍後再試一次。
40566 16 資料庫複製因內部錯誤而失敗。 請卸除目標資料庫並再試一次。
40567 16 資料庫複製因內部錯誤而失敗。 請卸除目標資料庫並再試一次。
40568 16 資料庫複製失敗。 來源資料庫已變成無法使用。 請卸除目標資料庫並再試一次。
40569 16 資料庫複製失敗。 目標資料庫已變成無法使用。 請卸除目標資料庫並再試一次。
40570 16 資料庫複製因內部錯誤而失敗。 請卸除目標資料庫並稍後再試一次。
40571 16 資料庫複製因內部錯誤而失敗。 請卸除目標資料庫並稍後再試一次。