SQL Server 2014 虛擬機器 (Resource Manager) 的自動備份

適用於:Azure VM 上的 SQL Server

自動備份會針對執行 SQL Server 2014 Standard 或 Enterprise 之 Azure VM 上所有現存和新的資料庫,自動設定 受控備份至 Microsoft Azure 。 這可讓您設定採用持久性 Azure Blob 儲存體的一般資料庫備份。 自動備份相依於 SQL Server 基礎結構即服務 (IaaS) 代理程式擴充功能

注意

Azure 有兩種不同的部署模型,可用來建立和處理資源:Azure Resource Manager 和傳統模型。 本文涵蓋了 Resource Manager 部署模型的使用。 建議您針對新部署使用 Resource Manager 部署模型,而不是傳統部署模型。

必要條件

若要使用自動備份,請考慮下列必要條件︰

作業系統

  • Windows Server 2012 或後續版本

SQL Server 版本

  • SQL Server 2014 Standard
  • SQL Server 2014 Enterprise

注意

關於 SQL 2016 或後續版本,請參閱SQL Server 2016 的自動備份

資料庫組態

  • 目標的使用者資料庫必須使用完整復原模型。 系統資料庫不一定要使用完整復原模式。 不過,如果您需要針對 modelmsdb 建立記錄備份,則必須使用完整復原模式。 如需深入瞭解完整復原模式對備份之影響,請參閱在完整復原模式下備份
  • SQL Server VM 已向 SQL IaaS 代理程式延伸模組註冊,並且已啟用「自動備份」功能。 因為自動備份依賴延伸模組,所以只有預設執行個體中的目標資料庫或是單一具名執行個體才支援自動備份。 如果沒有預設執行個體,而且有多個具名執行個體,則 SQL IaaS 代理程式延伸模組會失敗,而且自動備份將無法運作。

設定

下表說明可以為自動備份設定的選項。 實際的設定步驟會依據您是使用 Azure 入口網站或 Azure Windows PowerShell 命令而有所不同。 請注意,自動備份預設會使用備份壓縮,而且您無法將其停用。

設定 範圍 (預設值) 描述
自動備份 啟用/停用 (已停用) 針對執行 SQL Server 2014 Standard 或 Enterprise 的 Azure VM,啟用或停用自動備份。
保留週期 1-90 天 (90 天) 保留備份的天數。
儲存體帳戶 Azure 儲存體帳戶 將自動備份檔案儲存在 Blob 儲存體中時,所使用的 Azure 儲存體帳戶。 這個位置會建立一個容器來儲存所有備份檔案。 備份檔案命名慣例包括日期、時間和電腦名稱。
加密 啟用/停用 (已停用) 啟用或停用備份加密。 啟用備份加密時,會使用相同的命名慣例,將用來還原備份的憑證放在相同 automaticbackup 容器的指定儲存體帳戶中。 如果密碼變更,就會以該密碼產生新的憑證,但是舊的憑證還是會保留,以還原先前的備份。
密碼 密碼文字 加密金鑰的密碼。 唯有啟用加密時,才需要此密碼。 若要還原加密的備份,您必須要有建立備份時所使用的正確密碼和相關憑證。

設定新的虛擬機器

以 Resource Manager 部署模型建立新的 SQL Server 2014 虛擬機器時,請使用 Azure 入口網站來設定自動備份。

在 [SQL Server 設定] 索引標籤上,向下捲動至 [自動備份],然後選取 [啟用]。 下列的 Azure 入口網站螢幕擷取畫面顯示 [SQL 自動備份] 設定。

在 Azure 入口網站中 SQL 自動備份設定

設定現有的虛擬機器

針對現有的 SQL Server VM,您可以啟用和停用自動備份、變更保留期限、指定儲存體帳戶,以及從 Azure 入口網站啟用加密。

瀏覽至 SQL Server 2014 虛擬機器的 SQL 虛擬機器資源,然後選取 [備份]。

現有 VM 的 SQL 自動備份

完成後,請選取備份頁面底部的 [套用] 按鈕,以儲存變更。

如果這是您第一次啟用「自動備份」,Azure 就會在背景中設定 SQL Server IaaS Agent。 在此期間,Azure 入口網站可能不會顯示已設定自動備份。 請等候幾分鐘的時間來安裝和設定代理程式。 之後,Azure 入口網站將會反映新的設定。

注意

您也可以使用範本來設定「自動備份」。 如需詳細資訊,請參閱 適用於自動備份的 Azure 快速入門範本

使用 PowerShell 設定

您可以使用 PowerShell 來設定「自動備份」。 開始進行之前,您必須:

注意

本文使用 Azure Az PowerShell 模組,這是與 Azure 互動時建議使用的 PowerShell 模組。 若要開始使用 Az PowerShell 模組,請參閱安裝 Azure PowerShell。 若要瞭解如何遷移至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 遷移至 Az。

確認目前的設定

如果您已在佈建期間啟用自動備份,您可以使用 PowerShell 來檢查目前的組態。 請執行 Get-AzVMSqlServerExtension 命令並檢查 AutoBackupSettings 屬性:

$vmname = "yourvmname"
$resourcegroupname = "yourresourcegroupname"

(Get-AzVMSqlServerExtension -VMName $vmname -ResourceGroupName $resourcegroupname).AutoBackupSettings

您應該會看到類似以下的輸出:

Enable                      : False
EnableEncryption            : False
RetentionPeriod             : -1
StorageUrl                  : NOTSET
StorageAccessKey            : 
Password                    : 
BackupSystemDbs             : False
BackupScheduleType          : 
FullBackupFrequency         : 
FullBackupStartTime         : 
FullBackupWindowHours       : 
LogBackupFrequency          : 

如果您的輸出顯示 Enable 是設定為 False,您就必須啟用自動備份。 好消息是,啟用和設定「自動備份」的方式是相同的。 如需這項資訊,請參閱下一節。

注意

如果您在進行變更後立即檢查設定,可能會得到舊的組態值。 只要等幾分鐘後再重新檢查設定,即可確定已套用您的變更。

設定自動備份

您可以使用 PowerShell 來啟用「自動備份」,也可以隨時修改其組態和行為。

首先,為備份檔案選取或建立儲存體帳戶。 以下指令碼會選取或建立儲存體帳戶 (如果不存在)。

$vmname = "yourvmname"
$resourcegroupname = "yourresourcegroupname"
$storage_accountname = "yourstorageaccount"
$storage_url = "https://yourstorageaccount.blob.core.windows.net/"

$storage = Get-AzStorageAccount -ResourceGroupName $resourcegroupname `
    -Name $storage_accountname -ErrorAction SilentlyContinue
If (-Not $storage)
    { $storage = New-AzStorageAccount -ResourceGroupName $resourcegroupname `
    -Name $storage_accountname -SkuName Standard_GRS -Location $region }

注意

「自動備份」不支援將備份存放在進階儲存體中,但是可以從使用「進階儲存體」的 VM 磁碟進行備份。

如果您想要在儲存體帳戶中使用自訂容器進行備份,請使用下列指令碼來檢查容器,如果容器不存在,請加以建立。

$storage_container = "backupcontainer"

New-AzStorageContainer -Name $storage_container -Context $storage.Context

if (!(Get-AzStorageAccount -StorageAccountName $storage_accountname -ResourceGroupName $resourcegroupname | Get-AzStorageContainer | Where-Object { $_.Name -eq $storage_container })){ `
	New-AzStorageContainer -Name $storage_container -Context $storage.Context `
} `
 else `
{ `
	Write-Warning "Container $storage_container already exists." `
}

接下來,使用下列指令碼來取得儲存體帳戶的存取金鑰:

$accesskey = (Get-AzStorageAccountKey -ResourceGroupName $resourcegroupname  -Name $storage_accountname)[0].value

接著,使用 Update-AzSqlVM 命令來啟用及設定自動備份設定,以將備份儲存在 Azure 儲存體帳戶中。 在此範例中,是將備份設定為保留 10 天。

Update-AzSqlVM -ResourceGroupName $resourcegroupname -Name $vmname -AutoBackupSettingEnable `
-AutoBackupSettingStorageAccessKey $accesskey `
-AutoBackupSettingStorageAccountUrl $storage_url `
-AutoBackupSettingRetentionPeriod 10 `
-AutoBackupSettingStorageContainerName $storage_container 

可能需要幾分鐘的時間來安裝及設定 SQL Server IaaS 代理程式。

注意

Update-AzSqlVM* 有其他僅適用於 SQL Server 2016 和自動備份的設定。 SQL Server 2014 不支援下列設定:-AutoBackupSettingBackupSystemDb-AutoBackupSettingBackupScheduleType-AutoBackupSettingFullBackupFrequency-AutoBackupSettingFullBackupStartTime-AutoBackupSettingFullBackupWindowHour-AutoBackupSettingLogBackupFrequency。 如果您嘗試在 SQL Server 2014 虛擬機器上設定這些設定,並不會發生錯誤,但是不會套用這些設定。 如果要在 SQL Server 2016 虛擬機器上使用這些設定,請參閱<SQL Server 2016 Azure 虛擬機器的自動備份>(部分機器翻譯)。

若要啟用加密,請修改先前的指令碼,為 -AutoBackupSettingPassword 參數傳遞 -AutoBackupSettingEnableEncryption 參數和密碼 (安全字串)。 下列指令碼會啟用上述範例中的自動備份設定,並新增加密。

$password = "r@ndom Va1ue"
$encryptionpassword = $password | ConvertTo-SecureString -AsPlainText -Force  

Update-AzSqlVM -ResourceGroupName $resourcegroupname -Name $vmname -AutoBackupSettingEnable `
-AutoBackupSettingStorageAccessKey $accesskey `
-AutoBackupSettingStorageAccountUrl $storage_url `
-AutoBackupSettingRetentionPeriod 10 `
-AutoBackupSettingEnableEncryption `
-AutoBackupSettingPassword $encryptionpassword `
-AutoBackupSettingStorageContainerName $storage_container 

若要確認是否已套用您的設定,請確認自動備份組態

停用自動備份

若要停用自動備份,請執行相同的指令碼,並將 Update-AzSqlVM 命令中的 -AutoBackupSettingEnable 參數設定為 $false。 將此值設定為 $false,將停用該功能。 和安裝一樣,可能需要幾分鐘的時間來停用自動備份。

Update-AzSqlVM -ResourceGroupName $resourcegroupname -Name $vmname -AutoBackupSettingEnable:$false

範例指令碼

以下指令碼提供一組變數,您可以自訂這些變數來為您的 VM 啟用及設定「自動備份」。 在您的案例中,您可能需要根據您的需求自訂此指令碼。 例如,如果您想要停用系統資料庫備份或啟用加密,您就必須進行變更。

$vmname = "yourvmname"
$resourcegroupname = "yourresourcegroupname"
$region = "Azure region name such as EASTUS2"
$storage_accountname = "yourstorageaccount"
$storage_url = "https://yourstorageaccount.blob.core.windows.net/"
$retentionperiod = 10

# ResourceGroupName is the resource group which is hosting the VM where you are deploying the SQL Server IaaS Extension

Set-AzVMSqlServerExtension -VMName $vmname `
    -ResourceGroupName $resourcegroupname -Name "SQLIaasExtension" `
    -Version "2.0" -Location $region

# Creates/use a storage account to store the backups

$storage = Get-AzStorageAccount -ResourceGroupName $resourcegroupname `
    -Name $storage_accountname -ErrorAction SilentlyContinue
If (-Not $storage)
    { $storage = New-AzStorageAccount -ResourceGroupName $resourcegroupname `
    -Name $storage_accountname -SkuName Standard_GRS -Location $region }

# Creates/uses a custom storage account container

$storage_container = "yourbackupcontainer"

if (!(Get-AzStorageAccount -StorageAccountName $storage_accountname -ResourceGroupName $resourcegroupname | Get-AzStorageContainer | Where-Object { $_.Name -eq $storage_container })){ `
	New-AzStorageContainer -Name $storage_container -Context $storage.Context `
} `
 else `
{ `
	Write-Warning "Container $storage_container already exists." `
}

# Get storage account access key
$accesskey = (Get-AzStorageAccountKey -ResourceGroupName $resourcegroupname  -Name $storage_accountname)[0].value

# Configure Automated Backup settings

Update-AzSqlVM -ResourceGroupName $resourcegroupname -Name $vmname -AutoBackupSettingEnable `
-AutoBackupSettingStorageAccessKey $accesskey `
-AutoBackupSettingStorageAccountUrl $storage_url `
-AutoBackupSettingRetentionPeriod $retentionperiod `
-AutoBackupSettingStorageContainerName $storage_container 

使用加密憑證備份

如果您決定加密備份,則會產生加密憑證,並儲存在與備份相同的儲存體帳戶中。 在此案例中,您還必須輸入密碼,用來保護用於加密和解密備份的加密憑證。 這樣一來,備份時,您只要設定好這項功能就能高枕無憂,還可確保您相信備份安全無虞。

啟用備份加密時,強烈建議您確定是否已成功建立和上傳加密憑證,確保資料庫的可還原性。 立即建立資料庫,並檢查加密憑證和和資料已正確備份至新建立容器即可。 這會顯示一切都已設定正確,而且未發生任何異常狀況。

如果憑證因故無法上傳,您可以使用憑證管理員匯出憑證,然後儲存。 然而,最好不要將它儲存在相同的 VM 上,因為無法確保 VM 關閉時您可存取憑證。 若要了解變更或建立自動備份設定之後,憑證是否已正確備份,您可以在 VM 查看事件記錄檔,如果失敗,您會看到此錯誤訊息:

VM 事件記錄檔顯示的錯誤訊息螢幕擷取畫面。

如果憑證正確備份,您會在事件記錄檔看到此訊息:

事件記錄中成功備份加密憑證的螢幕擷取畫面。

一般實務建議您不時檢查備份的健康情況。 若要能夠還原備份,您應該執行下列動作:

  1. 確認您的加密憑證已備份,而且記得密碼。 否則您無法解密和還原備份。 如果您的憑證因故未正確備份,執行下列 T-SQL 查詢即可手動完成此作業:

    BACKUP MASTER KEY TO FILE = <file_path> ENCRYPTION BY PASSWORD = <password>
    BACKUP CERTIFICATE [AutoBackup_Certificate] TO FILE = <file_path> WITH PRIVATE KEY (FILE = <file_path>, ENCRYPTION BY PASSWORD = <password>)
    
  2. 確認您的備份檔案已上傳至少 1 個完整備份。 因為錯誤難免發生,刪除 VM 之前,或者 VM 損毀時,您應該確定隨時至少有一個完整備份,知道自己仍然可以存取資料。 您應該先確定儲存體中的備份安全且可還原,再刪除 VM 的資料磁碟。

監視

若要監控 SQL Server 2014 上的自動備份,您有兩個主要選項。 因為自動備份使用 SQL Server 受控備份功能,所以相同的監控技術適用於兩者。

首先,您可以藉由呼叫 msdb.smart_admin.sp_get_backup_diagnostics 來輪詢狀態。 或查詢 msdb.smart_admin.fn_get_health_status 資料表值函式。

注意

SQL Server 2014 中受控備份的結構描述是 msdb.smart_admin。 在 SQL Server 2016 中,此項已變更為 msdb.managed_backup,而且參考主題使用此較新的結構描述。 但是對於 SQL Server 2014,您必須對所有受控備份物件繼續使用 smart_admin 結構描述。

另一個選項是利用內建的 Database Mail 功能進行通知。

  1. 呼叫 msdb.smart_admin.sp_set_parameter 預存程序,以將電子郵件地址指派至 SSMBackup2WANotificationEmailIds 參數。
  2. 啟用 SendGrid,以從 Azure VM 傳送電子郵件。
  3. 使用 SMTP 伺服器與使用者名稱以設定 Database Mail。 您可以在 SQL Server Management Studio 中或使用 Transact-SQL 命令設定 Database Mail。 如需詳細資訊,請參閱 Database Mail
  4. 設定 SQL Server Agent 以使用 Database Mail
  5. 確認是否允許 SMTP 連接埠經過本機虛擬機器防火牆和虛擬機器的網路安全性群組。

後續步驟

自動備份會在 Azure VM 上設定受控備份。 因此,請務必 檢閱 SQL Server 2014 上受控備份的文件

您可以在下列文章中找到適用於 Azure VM 上 SQL Server 的其他備份和還原指引:Azure 虛擬機器上的 SQL Server 備份和還原

如需有關其他可用之自動化工作的資訊,請參閱 SQL Server IaaS 代理程式擴充功能

如需在 Azure VM 上執行 SQL Server 的詳細資訊,請參閱 Azure 虛擬機器上的 SQL Server 概觀