本頁是否能提供幫助?
您對此內容的意見反應十分重要。 請告訴我們您的想法。
其他意見反應?
剩餘 1500 個字元
匯出 (0) 列印
全部展開

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

更新日期: 2015年2月

本主題說明如何使用「資料庫複本」(DB Copy) 來製作 Microsoft Azure SQL Database 的複本。執行複製作業後建立的新資料庫是來源資料庫的一個功能完整且獨立的複本。複製作業會保留來源資料庫的服務層和效能層級。請確定目標伺服器有可用配額,否則作業將會失敗。如需複製資料庫的所有可用方法與案例,請參閱在 Azure SQL Database 中複製資料庫

本主題內容

下表列出可用來建立資料庫複本的方法。

 

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

Azure 管理入口網站

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

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

Transact-SQL

(CREATE DATABASE 陳述式搭配 AS COPY OF 子句)

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

REST API

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

PowerShell

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

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

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

  • 可使用 Transact-SQL、PowerShell 或 REST API 複製資料庫。不過,使用 Transact-SQL 時,您只能在相同叢集內的不同伺服器之間複製。PowerShell 和 REST API 支援複製到不同實體叢集中的不同伺服器。

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

您的登入需要下列權限,才能使用 Transact-SQL 來複製資料庫:

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

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

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

如果符合這些權限需求,您的登入就可以針對新資料庫執行 Azure SQL 資料庫 ALTER DATABASEDROP DATABASE 陳述式。使用 PowerShell 或 REST API 來複製資料庫時,權限是採用憑證式驗證。

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

Important重要事項
資料庫稽核設定不會複製到新的資料庫。如果您在新的資料庫上需要稽核,則必須在資料庫處於作用中時啟用稽核。如果新的資料庫與原始資料庫位於相同區域中,您可以使用相同的 Azure 儲存體帳戶。如果新的資料庫與原始資料庫位於不同的區域中,則您應該使用新資料庫所在區域中的儲存體帳戶。如需有關 Azure SQL Database 稽核的詳細資訊,請參閱<資料庫稽核>。

搭配回到頁首連結使用的箭頭圖示 [Top]

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

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

  3. [資料庫] 清單反白資料庫,然後在畫面底部的命令列中按一下 [複製]。這會開啟 [複製資料庫設定] 對話方塊。指定新資料庫的名稱,然後在對話方塊中按一下 [檢查],開始執行複製作業。

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

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

    請注意,在此情況下,將不會使用此 Cmdlet 的 –ContinuousCopy 參數。此參數只用來設定「地理複寫」。如需「地理複寫」的詳細資訊,請參閱<Azure SQL Database 業務持續性>。

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

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

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

  • 使用 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'.

搭配回到頁首連結使用的箭頭圖示 [Top]

另請參閱

Microsoft 正展開一份線上問卷調查,了解您對於 MSDN 網站的看法。 如果您選擇參加,您離開 MSDN 網站時即會顯示線上問卷調查。

您是否想要參加?
顯示:
© 2015 Microsoft