共用方式為


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

適用於:Azure SQL 資料庫

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

注意

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

概觀

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

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

注意

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

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

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

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

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

資料庫複本中的登入

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

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

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

如果您使用伺服器層級登入進行資料存取,並將資料庫複製到不同的伺服器,登入型存取可能會無法使用。 這可能會因為登入不存在於目標邏輯伺服器上,或因為這些密碼和安全性標識碼 (SID) 不同而發生。 如需在將資料庫複製到不同伺服器時管理登入的詳細資訊,請參閱 配置和管理 Azure SQL Database 的異地還原或故障移轉安全性。 在將複製操作成功至不同的邏輯伺服器後,並在重新映射其他使用者之前,只有與資料庫擁有者相關的登錄或伺服器管理員可以登入到複製的資料庫。 若要在複製作業完成之後,解析登入及建立資料存取,請參閱解析登入

使用 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 腳稿範例,請參閱 使用 PowerShell 將資料庫複製到新的邏輯伺服器

監視複製作業的進度

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

  • 如果拷貝失敗,新資料庫之 state_desc 檢視的 sys.databases 資料行會設定為 SUSPECT。 在新的資料庫上執行 DROP 陳述式,稍後再試一次。
  • 如果拷貝成功,新資料庫之 state_desc 檢視的 sys.databases 資料行會設定為 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 Database 的異地還原或故障轉移安全性

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

若要瞭解如何在將資料庫複製到不同的邏輯伺服器時管理使用者和登入,請參閱 設定及管理異地還原或故障轉移的 Azure SQL Database 安全性

資料庫複製錯誤

在 Azure SQL 資料庫中複製資料庫時,可能會發生下列錯誤。 如需更多資訊,請參閱 如何在 Azure SQL Database 中複製具交易一致性的資料庫副本

錯誤碼 嚴重性 描述
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 資料庫複製因內部錯誤而失敗。 請卸除目標資料庫並稍後再試一次。