第13章 數據庫備份與恢復數據庫
• 13.1 備份和恢復安全
• 13.2 完整數據庫備份與恢復post
• 13.3差別數據庫備份與恢復性能
• 13.4 事務日誌備份與恢復學習
• 13.5 一種備份案例測試
13.1.1 備份和恢復的概念設計
Ø 前面兩章分別介紹了經過數據的完整性控制和安全性控制來保證數據的安全,但這種安全是相對的。不但數據庫管理系統軟件自己可能會出現問題,並且做爲硬件支撐的計算機也有可能出現不可修復的故障,還有天然災害等不可抗拒的客觀因素,這些都有可能形成數據的損壞或丟失,而避免這些損壞和丟失不是完整性控制和安全性控制「力所能及」的。所以,須要尋求另外一種數據保護措施——數據備份和恢復。代理
Ø 備份,就是按期地把數據庫複製到轉儲設備的過程。其中,轉儲設備是指用於存儲數據庫拷貝的磁帶或磁盤,存儲的數據稱爲後備副本或後援副本,或直接稱備份。日誌
Ø 恢復,就是利用備份的後備副本把數據庫由存在故障的狀態轉變爲無端障狀態的過程。備份和恢復的目的是在數據庫遭到破壞時可以恢復到破壞前的正確狀態,避免或最大限度地減小數據丟失。對象
Ø 如何有效對數據庫進行備份和恢復,使得即便出現數據庫故障時也可以避免數據丟失或將數據損失減小到最小程度,這就是數據庫備份和恢復要討論的內容。
13.1.2 恢復模式及其切換
恢復模式一共有三種:簡單模式、完整模式和大容量日誌模式。數據備份須要在給定的恢復模式下完成,這意味着在不一樣的恢復模式下所備份的內容和方法將有所不一樣。
1. 簡單恢復模式
Ø 此恢復模式的主要特色是隻對數據進行備份,而不對日誌進行備份,於是不須要管理事務日誌空間。所以,簡單恢復模式可最大程度地減小事務日誌的管理開銷。簡單恢復模式是最簡單的備份和還原形式。該恢復模式同時支持數據庫備份和文件備份(不支持日誌備份)。可是使用這種模式將面臨很大的風險:若是數據庫損壞,則簡單恢復模式只能將數據恢復到最近數據備份的末尾,而在最近數據備份以後所作的更新便會所有丟失。
Ø 一般,簡單恢復模式用於測試和開發數據庫,或用於主要包含只讀數據的數據庫(如數據倉庫)。簡單恢復模式並不適合生產系統,由於對生產系統而言,丟失最新的更改是沒法接受的。在這種狀況下,建議使用完整恢復模式。
2. 完整恢復模式
Ø 該模式不但支持數據備份,並且支持日誌備份,即此模式完整記錄全部事務,並將事務日誌記錄保留到對其備份完畢爲止。若是可以在出現故障後備份日誌尾部,則可使用完整恢復模式將數據庫恢復到故障點。完整恢復模式也支持還原單個數據頁,支持數據庫備份、文件和文件組備份。
Ø 因爲支持日誌備份,所以完整恢復模式能夠在最大範圍內防止出現故障時丟失數據,能夠將數據庫還原到日誌備分內包含的任什麼時候點(「時點恢復」)。假定能夠在發生嚴重故障後備份活動日誌,則可將數據庫一直還原到沒有發生數據丟失的故障點處。這是完整恢復模式的優勢。但它也存在着缺點:須要使用存儲空間並會增長還原時間和複雜性。
Ø 從還原程度看,完整恢復模式是最理想的,可是這種模式是很「沉重的」(備份的內容多),所以對包含數據量很大的數據庫而言,其時間和空間代價都是昂貴的。
3. 大容量日誌恢復模式
Ø 此模式是完整恢復模式的附加模式,是一種特殊用途的恢復模式,偶爾用於執行高性能的大容量複製操做。與完整恢復模式相同的是,大容量日誌恢復模式也須要日誌備份,它將事務日誌記錄保留到對其備份完畢爲止;不一樣的是,大容量日誌恢復模式經過使用最小方式記錄大多數大容量操做,減小日誌空間使用量,不支持時點恢復,這容易形成一些數據庫更改的丟失。
Ø 大容量日誌恢復模式也支持數據庫備份、文件和文件組備份,它適用於進行一些大規模大容量操做(如大容量導入或索引建立),以提升性能並減小日誌空間使用量。
Ø 恢復模式是數據庫的一項屬性,能夠經過查看系統目錄視圖來得到數據庫的恢復模式信息。
【例子】查看數據庫MyDatabase的恢復模式能夠利用下列代碼實現:
SELECT name 數據庫名, recovery_model_desc 恢復模式
FROM sys.databases
WHERE name = 'MyDatabase';
Ø 在輸出的結果中,SIMPLE、FULL和BULK_LOGGED分別表明簡單恢復模式、完整恢復模式和大容量日誌恢復模式。
Ø 恢復模式的切換可用ALTER DATABASE語句來完成。例如,將數據庫MyDatabase的恢復模式改成大容量日誌恢復模式,可用下列語句實現:
ALTER DATABASE MyDatabase SET RECOVERY BULK_LOGGED;
Ø 將恢復模式改成完整恢復模式或者簡單恢復模式,只須要將上述語句中的BULK_LOGGED改成FULL或SIMPLE便可。
縱觀以上三種模式,簡單恢復模式通常適合用於測試或開發數據庫。可是,對於生產數據庫,最佳選擇一般是完整恢復模式,還能夠選擇大容量日誌恢復模式做爲補充。但簡單恢復模式有時也適合小型生產數據庫或數據倉庫使用。
13.1.3 備份類型
備份類型主要包括完整備份、差別備份和事務日誌備份。在不一樣的恢復模式下,所容許的備份類型有所不一樣。
1. 完整備份
Ø 完整備份是指備份包括特定數據庫(或者一組特定的文件組或文件)中的全部數據,以及能夠恢復這些數據的足夠多的日誌信息。當數據庫出現故障時能夠利用這種完整備份恢復到備份時刻的數據庫狀態,但備份後到出現故障的這一段時間內所進行修改將丟失。
Ø 完整備份在全部模式下都適用。
2. 差別備份
Ø 差別備份又稱增量備份,是指對自上次完整備份以來發生過變化的數據庫中的數據進行備份。能夠看出,對差別備份的恢復操做不能單獨完成,在其前面必須有一次完整備份做爲參考點(稱爲基礎備份),所以差別備份必須與其基礎備份進行結合才能將數據庫恢復到差別備份時刻的數據庫狀態。此外,因爲差別備份的內容與完整備份的內容同樣,都是數據庫中的數據,所以它所須要的備份時間和存儲空間仍然比較大。因爲差別備份只記錄自基礎備份以來發生變化的數據(而不是全部數據),因此它較完整備份在各方面的性能都有顯著的提升,這是它的優勢。
Ø 差別備份也適用於全部恢復模式。
3. 事務日誌備份
Ø 事務日誌備份簡稱日誌備份,它記錄了自上第二天志備份到本第二天志備份之間的全部數據庫操做(日誌記錄)。因爲日誌備份記錄的內容是一個時間段內的數據庫操做,而不是數據庫中的數據,所以在備份時所處理的數據量小得多,於是所須要的備份時間和存儲空間也就相對小得多。但它也不能單獨完成對數據庫的恢復,而必須與一次完整備份相結合。實際上,「完整備份+日誌備份」是常採用的一種數據庫備份方法,這將在下面的學習中有深入體會。
Ø 日誌備份又分爲純日誌備份、大量日誌備份和尾日誌備份。
• 純日誌備份僅包含某一個時間段內的日誌記錄;
• 大量日誌備份則主要用於記錄大批量的批處理操做;
• 尾日誌備份主要包含數據庫發生故障後到執行尾日誌備份時的數據庫操做,以防止故障後相關修改工做的丟失。自SQL Server 2005開始,通常要求先進行尾日誌備份,而後才能恢復當前數據庫。
Ø 事務日誌備份僅適用於完整恢復模式或大容量日誌恢復模式,不適用於簡單恢復模式。
第13章 數據庫備份與恢復
• 13.1 備份和恢復
• 13.2 完整數據庫備份與恢復
• 13.3差別數據庫備份與恢復
• 13.4 事務日誌備份與恢復
• 13.5 一種備份案例
13.2.1 完整數據庫備份
完整數據庫備份是對數據庫中全部的數據進行備份,所以須要較大的存儲空間。
【例13.1】在簡單恢復模式下對數據庫MyDatabase進行完整備份。
首先建立一個邏輯備份設備MyDatabase_disk,它映射到磁盤文件D:\Backup\MyDatabase_disk.bak;而後利用BACKUP DATABASE語句將數據庫MyDatabase徹底備份到邏輯備份設備MyDatabase_disk中,實際上備份的數據將保存到磁盤文件D:\Backup\MyDatabase_disk.bak中。代碼以下:
USE master; -- 目的是關閉數據庫MyDatabase
GO
ALTER DATABASE MyDatabase SET RECOVERY SIMPLE; -- 切換到簡單恢復模式下
GO
-- 建立備份設備
EXEC sp_addumpdevice 'disk', 'MyDatabase_disk', 'D:\Backup\MyDatabase_disk.bak';
GO
-- 進行完整數據庫備份
BACKUP DATABASE MyDatabase TO MyDatabase_disk WITH FORMAT;
GO
ü 針對例13.1,選項FORMAT的做用是以覆蓋媒體標頭和備份集的方式向文件MyDatabase_disk.bak中寫入數據(若是該文件不存在則建立它)。實際上,利用FORMAT選項能夠覆蓋任意現有備份並建立新媒體集,從而建立一個完整數據庫備份。
ü 系統目錄視圖sys.backup_devices保存了邏輯備份設備的有關信息,所以經過查詢此目錄視圖能夠獲取邏輯備份設備的相關狀況:,
SELECT * FROM sys.backup_devices
ü 若是要刪除已有的備份設備,可用系統存儲過程sp_dropdevice來實現。
【例子】執行下列語句將刪除備份設備MyDatabase_disk:
EXEC sp_dropdevice 'MyDatabase_disk';
ü 本例中也能夠不使用邏輯備份設備而直接將數據備份到磁盤文件中。
【例子】上述代碼中的BACKUP DATABASE語句也能夠寫成:
BACKUP DATABASE MyDatabase TO DISK = 'D:\Backup\MyDatabase_disk.bak' WITH FORMAT;
ü 備份文件MyDatabase_disk.bak保存了備份時刻數據庫MyDatabase中的全部數據,包括日誌信息等。
13.2.2 完整數據庫恢復
Ø 利用備份文件,能夠將數據庫恢復到備份時刻的狀態。
【例13.2】利用例13.1中的完整備份對數據庫進行恢復。
例13.1中,對數據庫MyDatabase進行完整備份後獲得備份文件MyDatabase_disk.bak。本例則利用此文件恢復數據庫MyDatabase,代碼以下
RESTORE DATABASE MyDatabase FROM DISK = 'D:\Backup\MyDatabase_disk.bak’;
執行上述語句後數據庫MyDatabase將恢復到對其進行備份時的狀態。因爲是在簡單模式進行備份,故恢復時在任何一種模式下效果都同樣。若是備份操做是在完整模式下進行的,則恢復操做時也要在完整模式下進行,這時要涉及到尾日誌備份和恢復。
【例13.3】在完整模式下對數據庫MyDatabase進行完整備份,而後對其進行恢復。
首先在完整模式下對數據庫MyDatabase進行完整備份:
USE master; --關閉數據庫MyDatabase
GO
ALTER DATABASE MyDatabase SET RECOVERY FULL; -- 切換到完整恢復模式下
GO
-- 完整數據庫備份
BACKUP DATABASE MyDatabase TO DISK = 'D:\Backup\MyDatabase_full.bak' WITH FORMAT;
GO
此後在數據庫出現故障時利用得到的備份文件MyDatabase_full.bak,對數據庫MyDatabase進行恢復:
USE master;
GO
ALTER DATABASE MyDatabase SET RECOVERY FULL; -- 切換到完整恢復模式下
-- 先進行尾日誌備份才能恢復數據庫
BACKUP LOG MyDatabase TO DISK = 'D:\Backup\MyDatabase_full.bak' --尾日誌備份(必須在完整恢復模式下進行尾日誌備份)
WITH NORECOVERY;
GO
-- 恢復數據庫
RESTORE DATABASE MyDatabase FROM DISK = 'D:\Backup\MyDatabase_full.bak';
GO
第13章 數據庫備份與恢復
• 13.1 備份和恢復
• 13.2 完整數據庫備份與恢復
• 13.3差別數據庫備份與恢復
• 13.4 事務日誌備份與恢復
• 13.5 一種備份案例
Ø 完整數據庫備份至關於對整個數據庫進行復制。當數據量很大時,這種操做是費時的,且會嚴重下降系統的性能。所以,完整數據庫備份是一種「沉重」的備份操做,不宜常常性進行這種的備份。這時能夠尋求一種「輕量級」的備份方法——差別備份。
Ø 差別備份是指自建立完整備份之後對更改的數據區所進行的備份。可見,差別備份須要基於一個最近的完整備份(稱爲基礎備份)。因爲它不須要對整個數據庫進行備份,於是差別備份具備存儲空間耗費少、建立速度快等優勢。一般的作法是,在某個特定的時間進行一次完整備份,而後(定時)進行相繼的若干個差別備份。還原時,先還原完整備份,而後再還原最新的差別備份便可。
Ø 本節主要介紹差別數據庫備份及基於完整備份和差別備份的恢復方法。
13.3.1 差別數據庫備份
Ø 差別數據庫備份也是使用BACKUP DATABASE語句來完成。與完整數據庫備份不一樣的是,用於差別數據庫備份的BACKUP DATABASE語句要帶DIFFERENTIAL選項。
【例13.4】建立差別數據庫備份。
先建立完整數據庫備份,而後建立差別數據庫備份,並寫入到同一個備份文件或備份設備中。代碼以下:
• 在建立完整數據庫備份後,可按期地屢次執行下列代碼(相對完整備份來講,其執行時間會很短),以保存最新的數據庫狀態:
• -- 差別數據庫備份
BACKUP DATABASE MyDatabase
TO DISK = 'D:\Backup\MyDatabaseBackup.bak'
WITH DESCRIPTION = '第1次差別備份',
DIFFERENTIAL;
GO
Ø 備份文件MyDatabaseBackup.bak保存了基礎備份以及全部的差別數據庫備份。建議每執行一次差別備份代碼,就修改一次其描述信息,以示不一樣的差別備份。
【例子】在第一次執行時,令DESCRIPTION = '第1次差別備份',第二次時令DESCRIPTION = '第2次差別備份’,等。
Ø 若是備份時使用同一個備份文件,那麼每當進行一次備份(包括基礎備份),都會在備份設備(備份文件)中造成一個備份集,其位置(Position屬性值)依次爲1, 2, 3, 4, …。可用RESTORE HEADERONLY語句查看備份設備中的備份集。
【例子】若是在本例中,先執行一次完整數據庫備份的代碼,而後依次四次執行差別備份的代碼(間隔必定的時間),接着執行RESTORE HEADERONLY語句來查看備份集。RESTORE HEADERONLY語句以下:
RESTORE HEADERONLY FROM DISK = 'D:\Backup\MyDatabaseBackup.bak‘;
該語句執行後,產生如圖13.1所示的結果。
13.3.2 差別數據庫恢復
Ø 利用差別備份及其基礎備份所獲得的備份文件,將數據庫恢復到任何一次備份時的狀態。
【例13.5】利用差別備份,將數據庫恢復到指定的狀態。
本例中利用例13.4造成的備份文件MyDatabaseBackup.bak,將數據庫恢復到第3次差別備份時的數據庫狀態。
在例13.4中,一共對數據庫MyDatabase進行5次備份,其中第1次是完整備份,接着進行了4次差別數據庫備份,所以在備份文件MyDatabaseBackup.bak中造成了五個備份集。顯然,第3次差別備份所造成的備份集的位置(Position)是4,所以在利用備份集1(Position值爲1的備份集)來恢復數據庫後,接着要利用備份集4來恢復數據庫,便可知足本例的恢復要求。完整代碼以下:
USE master;
GO
ALTER DATABASE MyDatabase SET RECOVERY FULL;
GO
-- 先進行尾日誌備份,進入還原狀態
BACKUP LOG MyDatabase TO DISK = 'D:\Backup\MyDatabaseBackup.bak' WITH NORECOVERY;
GO
-- 利用備份集1(備份集1對應基礎備份,必須先對基礎備份進行恢復,即先令FILE = 1)
RESTORE DATABASE MyDatabase FROM DISK = 'D:\Backup\MyDatabaseBackup.bak'
WITH FILE = 1, NORECOVERY; -- 此處FILE = 1
GO
-- 利用備份集4(表示要將數據庫恢復到第3次差別備份時的數據庫狀態)
RESTORE DATABASE MyDatabase FROM DISK = 'D:\Backup\MyDatabaseBackup.bak'
WITH FILE = 4, NORECOVERY;
GO
RESTORE DATABASE MyDatabase WITH RECOVERY; -- 恢復數據庫(通過此步後,數據庫才真正恢復完畢)
GO
Ø 若是但願將數據庫恢復到第4次差別備份時的數據庫狀態,則只需將上述代碼中的「FILE = 4」改成「FILE = 5」便可,其餘狀況依此類推。
Ø 從上述代碼能夠看到,「恢復到第3次差別備份時的數據庫狀態」只須要第1個備份集和第4個備份集,而第2和3個備份集是不須要的,即它們是多餘的。所以,差別備份仍然出現較大的數據冗餘。
第13章 數據庫備份與恢復
• 13.1 備份和恢復
• 13.2 完整數據庫備份與恢復
• 13.3差別數據庫備份與恢復
• 13.4 事務日誌備份與恢復
• 13.5 一種備份案例
13.4.1 事務日誌備份
u事務日誌備份也簡稱日誌備份,包括建立備份時處於活動狀態的部分事務日誌,以及先前日誌備份中未備份的全部日誌記錄。日誌備份只能在完整模式和大容量日誌恢復模式下才能建立。使用日誌備份,能夠將數據庫恢復到故障點或特定的時點。建立日誌備份的頻率取決於用戶對數據丟失風險的容忍程度與用戶所能存儲、管理和潛在還原的日誌備份數量之間的平衡。因爲日誌備份並非對數據進行備份,而是對相關操做進行記錄,所以日誌備份集通常比其餘備份集要小得多。日誌備份的每一次建立都是對上一次備份以後的操做進行記錄,所以備份得越頻繁,所造成的備份集就越小。
u日誌備份也依賴於最近的一次完整數據庫備份,沒有這樣的完整數據庫備份,而僅僅利用日誌備份是沒法恢復數據庫的。在這一點上,日誌備份與差別數據庫備份很類似,但它們之間存在本質上的差異:每一第二天志備份都是對上一第二天志備份以後到如今爲止所進行的操做進行記錄(備份操做記錄,而不是數據自己),差別數據庫備份則是對自建立完整備份之後被更改的數據區進行備份(對數據自己進行備份)。
u建立日誌備份可利用BACKUP LOG語句來完成,下面經過例子對其進行說明。
【例13.6】對指定數據庫建立日誌備份。
Ø 日誌備份要依賴於最近一次完整數據庫備份,不然不能恢復數據庫。本例以數據庫MyDatabase爲例,介紹如何對其進行日誌備份。
Ø 本例中,先建立數據庫的完整備份,而後依次建立四個日誌備份。代碼以下:
-- 建立日誌備份2
BACKUP LOG MyDatabase TO DISK = 'D:\Backup\MyDatabase_Log.bak'
WITH DESCRIPTION = '3. 建立日誌備份2';
GO
-- 建立日誌備份3
BACKUP LOG MyDatabase TO DISK = 'D:\Backup\MyDatabase_Log.bak'
WITH DESCRIPTION = '4. 建立日誌備份3';
GO
-- 建立日誌備份4
BACKUP LOG MyDatabase TO DISK = 'D:\Backup\MyDatabase_Log.bak'
WITH DESCRIPTION = '5. 建立日誌備份4';
GO
13.4.2 事務日誌恢復
u 在利用日誌備份(事務日誌備份)恢復數據庫以前,先利用最近的完整數據庫備份來恢復數據庫,而後再利用日誌備份恢復數據庫。日誌備份恢復可利用RESTORE LOG語句來實現。
【例13.7】利用已有的日誌備份恢復數據庫到指定的狀態。
Ø 本例中,利用例13.6產生的備份文件對數據庫MyDatabase進行恢復,要求將之恢復到日誌備份3時的狀態。
Ø 例13.6中,一共進行了5次備份,其中第1次是完整數據庫備份,後面接着是4第二天志備份,即這些備份集依次是備份集一、備份集二、備份集三、備份集四、備份集5。這些備份集都保存在D:\Backup\MyDatabase_Log.bak文件中,可利用RESTORE HEADERONLY語句來查看此文件(備份文件或備份設備)中全部備份集的信息:
RESTORE HEADERONLY FROM DISK = 'D:\Backup\MyDatabase_Log.bak’;
能夠看到,上述日誌備份造成了如圖13.2所示的備份集。
Ø 要將數據庫恢復到第3第二天志備份時的狀態,就應該依次用備份集一、備份集二、備份集3和備份集4來恢復數據庫,而不是隻用備份集1和備份集4,這與差別數據庫恢復不一樣。代碼以下:
第13章 數據庫備份與恢復
• 13.1 備份和恢復
• 13.2 完整數據庫備份與恢復
• 13.3差別數據庫備份與恢復
• 13.4 事務日誌備份與恢復
• 13.5 一種備份案例
Ø 對於一個投入運行的數據庫系統,備份是一項重要的工做。數據備份時須要佔用機器資源,佔用CPU時間,於是會下降系統的運行效率,同時備份的數據會佔用磁盤空間。所以,若是備份頻率太高,則會影響系統的正常運行效率,會耗費大量的空間資源;若是備份頻率過低,則丟失數據的風險就比較大。如何設計一個有效的備份計劃,不是一件容易的事情。通常來講,實時性強的重要數據,如銀行數據等,通常須要較高的備份頻率;若是歷史性數據,如交易數據,則備份的頻率比較低,甚至不須要備份。
Ø 對於一個須要備份的數據庫系統而言,有些備份操做是帶有共性規律的,可爲制定系統備份計劃提供參考。好比,完整數據庫備份的頻率應該是最低,並且大多選擇在節假日、週末、凌晨進行,由於這時系統處於空閒狀態的概率比較高。其次是差別數據庫備份,它備份的數據量較完整數據庫備份少得多,所以頻率能夠高一些。頻率最高的是日誌備份,它記錄的是用戶對數據進行操做的信息,於是其執行時間和耗費的存儲空間都相對少一些。
Ø 從實現按期備份的技術層面看,咱們須要藉助一種機制和方法來按期執行咱們的備份代碼。在SQL Server 2014中,SQL Server代理可提供這樣的一種機制,它能夠按期執行SQL代碼或存儲過程,其最小執行時間間隔是1小時,或者能夠指定天天在某一個時間點上執行。下面經過一個例子來講明如何按期對數據庫系統進行備份。
【例13.8】制定一個備份程序,使得它能夠按期地對MyDatabase數據庫進行備份。備份的具體要求是:(1)每一個季度第一個週六的凌晨3:30作一次完整數據庫備份;(2)天天凌晨3:30作一第二天志備份。
– 先對這個備份要求作一個簡要的分析。SQL Server代理能夠天天在某一個時間點上執行SQL命令,所以咱們能夠將備份程序作成一個存儲過程,在天天凌晨3:30執行一次該存儲過程。在存儲過程當中,用代碼對是否爲「每一個季度第一個週六」進行判斷,根據判斷結果來決定是執行完整數據庫備份仍是差別數據庫備份。相關步驟以下:
(1)建立名爲pro_for_backup的存儲過程,其建立代碼及說明以下:
CREATE PROCEDURE pro_for_backup -- 定義存儲過程pro_for_backup
AS
BEGIN
ALTER DATABASE MyDatabase SET RECOVERY FULL; -- 切換到完整模式下
DECLARE @date SMALLDATETIME, @n int, @m int, @dws nvarchar(10);
DECLARE @s1 nvarchar(100), @s2 nvarchar(100);
DECLARE @fg int;
SET @date = GETDATE(); -- 獲取當前日期、時間
--下面語句獲取當前時間在當前月中的第幾周
SET @n = DATEPART(WEEK,@date)-DATEPART(WEEK,@date-DAY(@date)+1)+1;
SET @m =DateName(mm, @date); -- 提取月份
SET @dws = DateName(dw, @date); -- 提取當前星期(星期幾)
SET @s1 = '建立完整數據庫備份,時間:'+CONVERT(varchar(30), @date, 114);
SET @s2 = '建立日誌備份,時間:'+CONVERT(varchar(30), @date, 114);
SET @fg = 0;
IF @m=1 or @m=4 or @m=7 or @m=10 -- 每一個季度的第一個月
BEGIN
IF @n=1 and @dws=‘星期六’ -- 若是如今是當前月份中第一週星期六,則創 建完整數據庫備份
BACKUP DATABASE MyDatabase TO DISK = 'D:\Backup\MyDatabase_Log.bak’
WITH DESCRIPTION = @s1, FORMAT; -- 會覆蓋備份集中之前的備份數據
SET @fg = 1;
END
IF @fg = 0 -- 若是沒有作上述的徹底數據庫備份,則作日誌備份
BACKUP LOG MyDatabase TO DISK = 'D:\Backup\MyDatabase_Log.bak’
WITH DESCRIPTION = @s2;
END
(2)打開SSMS,在「對象資源管理器」中展開「SQL Server代理」節點(若是SQL Server代理沒有啓動,則先啓動),右擊其「做業」節點,在彈出的菜單中選擇「新建做業…」選項,而後打開「新建做業」對話框,如圖13.3所示。
(3)在對話框的左邊選擇「常規」項,而後在右邊的「名稱」文本框輸入做業的名稱(本身擬定),如「按期備份數據庫」,在「說明」文本框輸入必要的說明文字,如「每一個季度第一個週六的凌晨3:30作一次完整數據庫備份,天天凌晨3:30作一第二天志備份」。
(4)在圖13.3所示的對話框的左邊選擇「步驟」項,而後在打開的界面中點擊左下方的「新建」按鈕,進而打開「新建做業步驟」對話框。在此對話框中,輸入步驟的名稱,本例輸入「按期備份數據庫步驟」,類型選擇「Transact-SQL腳本(T-SQL)」,數據庫選擇「MyDatabase」,在「命令」文本框中輸入要執行的SQL命令,本例要執行的是存儲過程pro_for_backup,所以輸入「EXEC pro_for_backup」,結果如圖13.4所示。設置完後,點擊「肯定」按鈕。
(5)在圖13.3所示的對話框的左邊選擇「計劃」項,而後在打開的界面中點擊左下方的「新建」按鈕,進而打開「做業計劃屬性」對話框。在此對話框中,輸入計劃的名稱,如「按期備份數據庫計劃」,「計劃類型」一欄選擇「重複執行」一項,執行頻率選擇「天天」,執行間隔選擇最小值——1天,「天天頻率」選擇「執行一次」,時間設置爲3:30。設置結果如圖13.5所示。而後單擊「肯定」按鈕。
(6)返回「新建做業」對話框後,點擊「肯定」按鈕便可。
至此,備份程序的編寫及設置所有完成。此後,該備份程序會按照既定的要求對數據庫MyDatabase按期進行徹底數據庫備份和日誌備份。