Azure

是否可以在 Azure 中拍攝數據庫的快照?

  • February 5, 2021

所以,澄清一下,我知道我可以使用為數據庫編寫的工具轉儲數據庫,這些工具對天藍色一無所知。

我知道我可以做一個import / export

而且我知道我可以延長數據庫的時間點恢復保留期。

但我想要的遠比這簡單。我不需要能夠備份到過去十年的任意時間點;我只需要正常的時間點保留期,以及對特定時刻進行快照的能力(可能需要停機時間進行完整備份),並在正常保留期結束後保留該特定備份。

在 AWS 中,我使用 RDS 快照實現了這一點。我已經通過 Azure 文件進行了大量的Google搜尋和閱讀。這似乎是一個非常基本和基本的功能。我還沒有找到它確實讓我感到驚訝,但我給微軟帶來了懷疑的好處,並假設他們已經實現了這個功能,而我只是(不知何故)找不到它。

據我所知,目前Azure SQL 數據庫(Paas)不支持快照。您可以選擇多種方式備份 SQL 數據庫,請參閱此部落格:備份 Windows Azure SQL 數據庫的不同方式

但是對於Azure VM(Iaas) 上的 SQL Server,Azure VM 支持創建快照。您可以在 Azure 門戶上輕鬆完成。

在此處輸入圖像描述

有關 Azure VM 上 SQL 數據庫和 SQL Server 的區別的更多資訊,請參閱此連結

更新:

2020 年 4 月,Microsoft 更新了有關 Azure SQL 的數據庫複製功能的文件,以闡明Azure SQL 中的數據庫副本不是即時快照

雖然數據庫複製功能確實創建了事務一致的快照,但拍攝快照的時間點不是即時的,可能是在發出數據庫複製請求和未定義的時間點之間的任何時間點,可能是幾個小時後來(雖然根據我的經驗。

因此,雖然數據庫副本快照 - 您必須等待(可能數小時)sys.databasessys.dm_database_copiessys.dm_operation_status確認副本已成功完成,然後才能對源數據庫進行任何更改。

替代方法:

另一種更安全的選擇是使用 Azure SQL 的內置時間點恢復將數據庫“還原”到新的單獨數據庫 - 這樣您就可以確定準確的日期和時間數據庫 - 但是它仍然不是即時快照。

原始(和不正確)答案:

是的,您可以 - 儘管 Microsoft 將其稱為複製或複製現有 Azure SQL 數據庫的過程。在創建副本時對源數據庫進行快照- 因此在數據庫副本完成之前對源數據庫進行的任何進一步寫入都不會包含在最終副本中,就像使用卷影複製的本地 SQL Server 快照的工作方式一樣。

這記錄在這裡:https ://docs.microsoft.com/en-us/azure/sql-database/sql-database-copy

數據庫副本是複制請求時源數據庫的快照。

數據庫副本是在啟動複製請求後的某個時間點源數據庫的事務一致快照。

您可以通過不同的方式完成此操作:

請注意,由於數據庫副本是一個單獨的數據庫實例,因此您必須為該副本付費 - 但您至少可以為數據庫副本使用不同的定價層。

使用 Azure 門戶:

Azure 門戶數據庫視圖的螢幕截圖,其中突出顯示了“複製”按鈕

使用 PowerShell:

New-AzureRmSqlDatabaseCopy -ResourceGroupName "myResourceGroup" `
   -ServerName $sourceserver `
   -DatabaseName "MySampleDatabase" `
   -CopyResourceGroupName "myResourceGroup" `
   -CopyServerName $targetserver `
   -CopyDatabaseName "CopyOfMySampleDatabase"

使用 T-SQL:

  1. 首先,執行此命令以啟動複製操作:
CREATE DATABASE Database2 AS COPY OF Database1;

上述命令將在與源數據庫相同的 Azure SQL“伺服器”中創建副本。以我的經驗,無論數據庫定價層的大小如何,此步驟都會在大約 40-50 秒內完成。

您還可以通過連接到目標目標伺服器並執行以下命令在不同的 Azure SQL Server 上創建副本:

CREATE DATABASE Database2 AS COPY OF server1.Database1;

…哪裡server1是配置的外部數據源。有關更多詳細資訊和說明,請參閱本文,例如重新映射登錄。 2. 雖然上述命令將在 ~40-50 秒內完成,但這僅表示複製已開始:並不表示複製已完成

您需要照看 SSMS 並每隔幾分鐘執行一次此查詢,以獲取複製操作完成時的狀態更新:

USE [master];

SELECT * FROM sys.databases;
SELECT * FROM sys.dm_database_copies;
SELECT * FROM sys.dm_operation_status;

在第三個查詢結果 ( SELECT * FROM sys.dm_operation_status) 中,您將看到operation: CREATE DATABASE COPY, stat_desc: IN_PROGRESS, percent_complete: 50。該sys.dm_operation_status.percent_complete列只會顯示50100

要獲得更準確sys.dm_database_copies.percent_complete的進度資訊,請使用(儘管它仍然不完全準確)。請注意,具有較高定價層的數據庫將更快地執行其複制操作。新的數據庫副本將具有與源數據庫相同的定價層 - 因此,為了加快速度,我建議將您的 DTO 或 vCore 數量提高到非常高(如果您恢復 DTO 或 vCore,這不會花費您超過幾美元後立即編號)。如果不使用複制數據庫,您可以在複製操作完成後將其安全地設置為 S1 層或更低。

根據我的經驗,在同一伺服器副本上使用 Gen5 4x vCores 的 50GB 大小的數據庫,複製操作在 7 分鐘內完成- 當然,您的里程可能會有所不同。

請注意,您會看到兩sys.dm_operation_status行:

  • CREATE DATABASE COPY
    • 使用start_time命令CREATE DATABASElast_modify_time and astart_time about 40-50 seconds after`。
  • TERMINATE CONTINUOUS DATABASE COPY
    • 與 astart_timelast_modify_time彼此相隔幾秒鐘,當複製完成時,將在 之後大約 6-7 CREATE DATABASE COPY分鐘start_time

引用自:https://serverfault.com/questions/867634