使用SQL Server 2014受管理的備份(Managed Backup)將異地備份延伸到雲端
說明
SQL Server 2014提供自動化的方式將資料庫備份到Microsoft Azure儲存體,一旦啟動備份它會依照保留周期和交易頻繁程度來自動做備份,讓您的資料庫備份可以延伸到雲端,並且是以異地的形式進行備份,除了內部部署的SQL Server支援受管理的備份,您也可以在Azure 虛擬機器上的SQL Server 2014啟用這個功能。
而該怎麼使用受管理的備份,請見下一節的說明。
啟用執行個體層級受管理的備份功能
執行個體層級受管理的備份會自動作為資料庫層級受管理備份的預設值,您可以在SSMS物件總管的【管理>受管理的備份】節點上按滑鼠右鍵選擇【設定】來建立伺服器層級受管理的備份之預設值。
因為資料庫備份媒體集是存放在Microsoft Azure儲存體,所以一開始除了設定檔案保留的天數之外,更重要的是建立SQL認證,請點選【建立】。
若之前已經建立Azure管理憑證可以直接選取存放在憑證存放區裡的憑證,或是下載Azure發行設定檔來匯入Azure訂閱,以選擇儲存體帳戶。本文重點在於如何使用受管理的備份,至於建立Azure儲存體的部分就不多作介紹。
選擇將來SQL Server備份媒體所要存放的Azure訂閱及儲存體帳戶之後按建立,就可以完成建立受管理備份所需的SQL認證。
回到Managed Backup視窗,在組態區塊中會自動帶出前一個步驟所建立的SQL認證及儲存體的URL。
若您希望上傳Azure儲存體的備份媒體有更高的安全性,可以啟用加密備份,和一般備份加密一樣,需要先建立加密所需的憑證,例如下列的T-SQL指令碼:
USE master
GO
--建立資料庫主要金鑰
CREATE MASTER KEY ENCRYPTION
BY PASSWORD = N'P@ssw0rd'
GO
--建立憑證
Use Master
GO
CREATE CERTIFICATE AzureEncryptCert
WITH SUBJECT = N'P@ssw0rd'
GO
有了加密用的憑證之後,勾選加密備份才可以為備份媒體進行加密。
上述初始化受管理備份的動作,當然也可以經由T-SQL來完成,例如下列的T-SQL指令碼:
EXEC [msdb].[smart_admin].[sp_backup_master_switch] @new_state = 1;
GO
EXEC [msdb].[smart_admin].[sp_set_instance_backup]
@enable_backup = 0, @retention_days = 30,
@credential_name = N'AzureCredential',
@storage_url = N'https://mangedbackup.blob.core.windows.net/',
@encryption_algorithm = N'AES_128',
@encryptor_type = N'CERTIFICATE',
@encryptor_name = N'AzureEncryptCert';
GO
而更多受管理的備份會用到的系統物件,可以參考下表:
雖然您啟用受管理的備份在SQL Server Agent裡看不到任何備份排程,但實際上SQL Server在背景還是依靠SQL Server Agent來定時進行資料庫備份,若未將SQL Server Agent服務啟動會在初始化受管理備份時,遇到下列的錯誤訊息。
此時只要啟動SQL Server Agent服務再重新設定受管理的備份就可以順利完成初始化。
同時在Microsoft Azure管理入口網站中您可以看到受管理的備份選擇的Azure儲存體,自動建立一個用來存放SQL Server備份媒體的容器(CONTAINERS),其命名規則為機器名稱-執行個體名稱(如下圖)。
完成準備工作之後,就可以啟用受管理的備份,讓SQL Server開始自動化將資料庫備份到Azure儲存體。
受管理的備份之備份策略
使用受管理的備份最大的好處就是不需要自己設計備份策略,SQL Server會自行判斷工作負載以及適用狀況來進行相對應的備份,而整個受管理的備份採用完整資料庫備份搭配交易紀錄備份來做為主要的備份策略,何時進行完整備份?以及何時進行交易紀錄備份?說明如下表:
完整資料庫備份 |
|
|
|
|
交易紀錄備份 |
|
|
|
啟用資料庫層級受管理的備份
預設情況下,啟用執行個體層級的受管理備份後,所有新建立的資料庫會自動套用執行個體層級的設定,當您建立新的資料庫時,會自動經由受管理的備份做一次完整資料庫備份,例如當筆者使用下列T-SQL建立名稱為db2的資料庫時,受管理的備份會偵測到有新資料庫加入,就會立刻依照上一節完整資料庫備份適用情況進行完整資料庫備份。
CREATE DATABASE db2
GO
如下圖所示,db2已經產生一個完整資料庫備份(副檔名為.bak)存放到Azure儲存體。
透過smart_admin.fn_backup_db_config系統函數可以確定db2已經啟用受管理的備份。
當然針對現有的資料庫,可以利用系統預存程序來啟用資料庫層級受管理的備份功能,例如下列T-SQL指令碼示範啟用db1資料庫受管理的備份功能,並將保留天數設為3天,以及啟用AES_256的備份加密。
USE msdb
GO
EXEC smart_admin.sp_set_db_backup
@database_name='db1'
,@enable_backup=1
,@retention_days =3
,@credential_name ='AzureCredential'
,@encryption_algorithm ='AES_256'
,@encryptor_type= 'Certificate'
,@encryptor_name='AzureEncryptCert'
GO
再次以smart_admin.fn_backup_db_config系統函數查詢,可以看到目前受管理的備份資料庫共有兩個,分別是db1和db2。
此時若您將執行個體層級受管理的備份功能停用,在建立一個名稱為db3的資料庫。
由下圖可知執行個體層級受管理的備份功能啟用與否只會影響到後來建立的資料庫(文中的db3),對於已經啟用資料庫層級受管理的備份之資料庫(db1和db2)則不受影響。
停用受管理的備份功能
若您想要停用伺服器層級受管理的備份功能,可以在SSMS物件總管的【管理>受管理的備份】節點上按滑鼠右鍵選擇【停用】。
或是透過smart_admin.sp_set_instance_backup系統預存程序,將@enable_backup參數設為0,就可以停用執行個體層級受管理的備份。
USE msdb
GO
EXEC smart_admin.sp_set_instance_backup
@enable_backup=0;
GO
執行結果如下:
若要停用資料庫層級受管理的備份,則必須使用smart_admin.sp_set_db_backup系統預存程序,傳入資料庫名稱給@database_name參數,並將@enable_backup參數設為0。
USE msdb
GO
EXEC smart_admin.sp_set_db_backup
@database_name='db2'
,@enable_backup=0;
GO
執行結果如下:
監視與疑難排除
SQL Server 2014受管理的備份也提供許多內建監視備份狀況的擴充事件以及相關的監視參數,讓您能夠深入了解相關備份作業的狀況,當問題發生時能夠進一步去做問題排除,有關這一部分的內容之後再跟各位進行分享。