匯出 (0) 列印
全部展開

作法:使用資料庫複本 (Azure SQL Database)

更新日期: 2014年6月

本主題將說明如何使用「資料庫複本」(DB Copy) 來製作 Microsoft Azure SQL Database 的複本。執行複製作業後建立的新資料庫為一般的 Azure SQL 資料庫 資料庫,可完全正常運作,且獨立於來源資料庫之外。會以與來源資料庫相同的服務層和效能層級建立複本。如需複製資料庫的所有可用方法與案例,請參閱在 Azure SQL Database 中複製資料庫

本主題內容

下表列出可用來建立資料庫複本的方法。它包含服務層和跨區域支援資訊。

 

複製方法 高階 標準 Basic 商業 Web 跨伺服器/跨區域

Azure 管理入口網站

僅支援複製到相同的伺服器。

Important重要事項
如需詳細資訊,請參閱以下有關於限制的小節。

Transact-SQL

(包含 AS COPY OF 子句的 CREATE DATABASE 陳述式)

支援跨伺服器,但兩部伺服器必須位於相同的區域。

REST API

僅支援複製到與來源資料庫相同的伺服器。針對 Premium 資料庫,您可以選擇設定跨區域複寫關聯性,讓您能跨地理區域維護伺服器上的資料庫複本。如需詳細資訊,請參閱Available Methods to Copy a Database

PowerShell

僅支援複製到與來源資料庫相同的伺服器。針對 Premium 資料庫,您可以選擇設定跨區域複寫關聯性,讓您能跨地理區域維護伺服器上的資料庫複本。如需詳細資訊,請參閱Available Methods to Copy a Database

  • Azure SQL 資料庫 區域可能由多個實體叢集所組成。但是您目前無法在兩個不同的叢集之間複製資料庫。此外,您也無法在兩個不同的訂閱之間複製資料庫。進行容量管理時,Azure SQL Database 可能會定期將您的伺服器移至不同叢集。但屬於相同訂閱的伺服器則都會位於相同的叢集中。



    如果您在兩個屬於不同訂閱的叢集之間複製資料庫,複製作業可能會失敗,並出現下列錯誤:

    訊息 40532 - 無法開啟登入所要求的伺服器 "<伺服器名稱>"。登入失敗。

    若要判斷是否可以複製資料庫:針對來源和目的地伺服器使用 ping 命令 ("ping <server>"),以解析其 IP 位址。如果 IP 位址相同,則可以複製資料庫。如需詳細資訊,請參閱使用 Ping 命令

    Workaround procedure: 如果無法複製資料庫,請執行以下作業:

    1. 使用相同的訂閱在相同子區域中建立兩部新的邏輯伺服器 (伺服器應該會接收相同 IP 位址)。

    2. 執行離線資料庫移轉,將資料庫移至其中一部伺服器。您可以使用各種工具,例如匯入/匯出服務。如需詳細資訊,請參閱 SQL Azure 匯入/匯出服務How to: Migrate a Database by Using the Generate Scripts Wizard (SQL Database)

  • 可使用 Transact-SQL、PowerShell 或 REST API 複製資料庫。但只有 Transact-SQL 方法能讓您將資料庫複製到相同實體叢集上的不同伺服器。PowerShell 和 REST API 只能讓您複製到與來源資料庫相同的伺服器。

資料庫複製工作負載會影響涉及複製程序之 Azure SQL 資料庫 伺服器的效能。因此,複製程序可能需要很長的時間才能完成。如果資料庫複製失敗,請在來源資料庫的需求量較低時重新啟動複製程序。您可能需要暫停來源資料庫上的其他工作負載,直到複製程序完成為止。

您的登入需要下列權限才能複製 Azure SQL 資料庫 中的資料庫:

  • 在兩部伺服器上:這兩部 Azure SQL 資料庫 伺服器上的登入必須擁有相同的登入名稱和密碼。

  • 在目的地伺服器上:該登入必須是伺服器層級 dbmanager 角色的成員。注意:雖然 Azure SQL 資料庫 伺服器的伺服器層級主體不是 dbmanager 角色的成員,但是會自動擁有相同的權限。如需有關管理 Azure SQL 資料庫 中登入的詳細資訊,請參閱管理 Azure SQL Database 中的資料庫和登入

  • 在來源伺服器上:該登入必須是來源資料庫的 DBO。只有建立來源資料庫、DBO 或伺服器層級主體的登入,才能將該資料庫複製到另一個資料庫中。

如果符合這些權限要求,您的登入就可以針對新資料庫執行 Azure SQL 資料庫 ALTER DATABASE 和 DROP DATABASE 陳述式。

note附註
Azure SQL 資料庫 不支援使用 Azure SQL 資料庫 ALTER AUTHORIZATION ON DATABASE 陳述式變更資料庫擁有者。就如 虛擬機器建立 一樣,您可以在 Azure SQL 資料庫 的資料庫內建立額外的使用者,並且將這些使用者加入至 db_owner 資料庫層級角色。這些額外的使用者可以連結至登入,但不包括一開始建立資料庫的登入。不過,這些額外的使用者無法執行資料庫複製。

Premium 配額:複製作業會保留來源資料庫的服務層和效能層級。複製 Premium 資料庫時,您必須確定目標邏輯伺服器有足夠的 Premium 配額。否則作業將失敗。

[Top]

  1. 使用您的 Microsoft 帳戶,登入 Azure 管理入口網站

  2. 瀏覽到 [SQL DATABASE] 索引標籤。

  3. [資料庫] 清單反白資料庫,再按一下畫面底部命令列中的 [複製] 按鈕。這會開啟 [複製資料庫設定] 對話方塊。指定新資料庫的名稱,再按一下對話方塊上的勾選按鈕來啟動複製作業。

  1. 啟動 PowerShell,然後連線至您的 Azure 訂閱。

  2. 使用 Start-AzureSqlDatabaseCopy Cmdlet 建立資料庫的複本。

    請注意,在此情況下,將不會使用此 Cmdlet 的 –ContinuousCopy 參數。此參數只會用來設定 Premium 資料庫的作用中地理複寫。如需設定 作用中地理複寫 的詳細資訊,請參閱設定作用中地理複寫 (連續複製)

  3. 使用範例:此範例會將 "Orders" 資料庫複製到 "Orders Copy" 資料庫。原始資料庫和複本位於相同的伺服器 "abc"。

    PS C:\>Start-AzureSqlDatabaseCopy -ServerName "abc" -DatabaseName "Orders" -PartnerDatabase "Orders Copy"
    
    

  • 使用伺服器層級主體登入或是建立您要複製之資料庫的登入,登入 master 資料庫。若登入不是伺服器層級主體,則必須是 dbmanager 角色的成員才能複製資料庫。如需有關登入和連接到伺服器的詳細資訊,請分別參閱管理 Azure SQL Database 中的資料庫和登入Azure SQL Database 開發:使用說明主題

  • 請使用 Azure SQL 資料庫 CREATE DATABASE 陳述式開始複製來源資料庫。執行此陳述式會起始資料庫複製程序。由於複製資料庫是非同步程序,因此 CREATE DATABASE 陳述式會在資料庫完成複製之前傳回。

  • 藉由查詢 sys.databasessys.dm_database_copies 檢視表來監視複製程序。

    • 正在進行複製時,新資料庫之 sys.databases 檢視表的 state_desc 資料行會設定為 COPYING。

    • 如果複製失敗,新資料庫之 sys.databases 檢視表的 state_desc 資料行會設定為 SUSPECT。在這種情況下,請在新資料庫上執行 DROP 陳述式,並且稍後再試一次。

    • 如果複製成功,新資料庫之 sys.databases 檢視表的 state_desc 資料行會設定為 ONLINE。在這種情況下,複製便已完成,而且新資料庫為一般資料庫,能夠在不影響來源資料庫的情況下加以變更。

  • (選擇性) 如果您決定在複製作業進行中時取消複製,請在新資料庫上執行 DROP DATABASE 陳述式。或者,在來源資料庫上執行 DROP DATABASE 陳述式也會取消複製程序。

下列程式碼範例會起始資料庫複製程序。此範例會將 Database1A 資料庫複製到位於相同 Azure SQL 資料庫 伺服器上的新資料庫 Database1B

-- Execute on the master database.
-- Start copying.
CREATE DATABASE Database1B AS COPY OF Database1A;

下列程式碼範例可用來監視資料庫複製程序,方法是藉由查詢 sys.databasessys.dm_database_copies 檢視表,以取得名為 Database1B 之新資料庫的相關資訊。

-- Execute on the master database.
-- Retrieve state of the new database, Database1B.
SELECT name, state, state_desc FROM sys.databases WHERE name = 'Database1B'

Important重要事項
下面的陳述式只會在複製進行期間傳回結果集。複製完成且新資料庫上線之後,查詢就不再傳回結果。

-- Execute on the master database.
-- Retrieve copying details.
SELECT * FROM sys.dm_database_copies copies
Inner JOIN sys.databases databases ON copies.database_id = databases.database_id
      WHERE databases.name = 'Database1B';

[Top]

  • 登入目的地伺服器的 master 資料庫,該伺服器為新資料庫建立所在的 Azure SQL 資料庫 伺服器。使用來源 Azure SQL 資料庫 伺服器上與來源資料庫的資料庫擁有者 (DBO) 具有相同名稱和密碼的登入。目的地伺服器上的登入也必須是 dbmanager 角色的成員或是伺服器層級主體登入。如需有關登入和連接到伺服器的詳細資訊,請分別參閱管理 Azure SQL Database 中的資料庫和登入Azure SQL Database 開發:使用說明主題

  • 請使用 Azure SQL 資料庫 CREATE DATABASE 陳述式開始複製來源資料庫。在目的地伺服器上執行此陳述式會起始資料庫複製程序。由於複製資料庫是非同步程序,因此 CREATE DATABASE 陳述式會在資料庫完成複製之前傳回。

  • 藉由查詢 sys.databasessys.dm_database_copies 檢視表來監視複製程序。

    • 正在進行複製時,新資料庫之 sys.databases 檢視表的 state_desc 資料行會設定為 COPYING。

    • 如果複製失敗,新資料庫之 sys.databases 檢視表的 state_desc 資料行會設定為 SUSPECT。在這種情況下,請在新資料庫上執行 DROP 陳述式,並且稍後再試一次。

    • 如果複製成功,新資料庫之 sys.databases 檢視表的 state_desc 資料行會設定為 ONLINE。在這種情況下,複製便已完成,而且新資料庫為一般資料庫,能夠在不影響來源資料庫的情況下加以變更。

  • (選擇性) 如果您決定在複製作業進行中時取消複製,請在新資料庫上執行 DROP DATABASE 陳述式。或者,在來源資料庫上執行 DROP DATABASE 陳述式也會取消複製程序。

  • (選擇性) 目的地伺服器上的新資料庫上線之後,請使用 ALTER USER 陳述式將新資料庫中的使用者重新對應至目的地伺服器上的登入。新資料庫中的所有使用者都會維持原本在來源資料庫中擁有的權限。起始資料庫複製的使用者會變成新資料庫的資料庫擁有者,並且獲得指派新的安全性識別碼 (SID)。在複製成功之後及重新對應其他使用者之前,只有起始複製的登入 (也就是資料庫擁有者 (DBO)) 能夠登入新的資料庫。

下列程式碼範例會起始從 bipk56ex 的資料庫複製程序。此範例會示範如何將 Database1A 資料庫從名為 vipk56ex5c 的 Azure SQL 資料庫 伺服器複製到 Database2A 上的新資料庫 Server2

-- Execute on the master database of bipk56ex
-- Start copying from Server1 to Server2
CREATE DATABASE Database2A AS COPY OF vipk56ex5c.Database1A;

下列程式碼範例會監視資料庫複製程序。此範例會查詢 Server2 上的 sys.databasessys.dm_database_copies 檢視表,以取得名為 Database2A 之新資料庫的相關資訊。

Important重要事項
下面的陳述式只會在複製進行期間傳回結果集。複製完成且新資料庫上線之後,查詢就不再傳回結果。

-- Execute on the master database.
-- Retrieve state of the new database, Database1B.
SELECT name, state, state_desc FROM sys.databases WHERE name = 'Database1B'

Important重要事項
下面的陳述式只會在複製進行期間傳回結果集。複製完成且新資料庫上線之後,查詢就不再傳回結果。

-- Execute on the master database.
-- Retrieve copying details.
SELECT * FROM sys.dm_database_copies copies
Inner JOIN sys.databases databases ON copies.database_id = databases.database_id
      WHERE databases.name = 'Database1B';

[Top]

如果您想要在複製程序完成之前停止複製,可以使用 DROP DATABASE 陳述式卸除目的地資料庫。為了讓此選項順利運作,請使用符合本主題稍早的權限中所述之權限要求的登入。

[Top]

  • 當資料庫複製完成時,新資料庫將會進入兩種狀態的其中一種,如下所示:

    • 如果複製程序成功,新資料庫將進入 ONLINE 狀態。當新資料庫上線之後,就可以獨立於來源資料庫之外加以管理和使用。

    • 如果複製程序失敗,新資料庫將進入 SUSPECT 狀態。有問題的資料庫是無法使用的,也無法存取或復原。在此情況下,請卸除目的地資料庫,然後再次嘗試複製來源資料庫。

    若要檢視此狀態,請查詢 sys.databases 檢視表的 state_desc 資料行。

  • 複製完成時,新資料庫與來源資料庫的服務層、效能層級和大小上限都相同。如需有關如何設定和變更 Azure SQL 資料庫 中服務層或效能層級的詳細資訊,請參閱變更資料庫服務層和效能層級

  • 當跨伺服器複製程序完成之後,複本的登入、使用者和權限可與來源資料庫分開管理。請使用 DBO 登入和 ALTER USER 陳述式,將新資料庫中的使用者對應至新 Azure SQL 資料庫 伺服器上的登入。例如:ALTER USER userName WITH LOGIN='loginName'。如需詳細資訊,請參閱ALTER USER (Azure SQL Database)

[Top]

另請參閱

顯示:
© 2014 Microsoft