天天看點

SQL Server的備份

SQL Server 備份和還原操作發生在資料庫的恢複模式的上下文中。 恢複模式旨在控制事務日志維護。 “恢複模式”是一種資料庫屬性,它控制如何記錄事務,事務日志是否需要(以及允許)備份,以及可以使用哪些類型的還原操作。 有三種恢複模式:簡單恢複模式、完整恢複模式和大容量日志恢複模式。通常,資料庫使用完整恢複模式或簡單恢複模式。可以在執行大容量操作之前切換到大容量日志恢複模式,以補充完整恢複模式。資料庫可以随時切換為其他恢複模式。

下表概述了這三種恢複模式。

恢複模式

說明

工作丢失的風險

能否恢複到時點?

簡單(SIMPLE)

無日志備份。

最新備份之後的更改不受保護。 在發生災難時,這些更改必須重做。

完全(FULL)

需要日志備份。

資料檔案丢失或損壞不會導緻丢失工作。

正常情況下沒有。

如果日志尾部損壞,則必須重做自最新日志備份之後所做的更改。

SQL Server的備份

 注意

大容量日志(BULK_INSERT)

是完整恢複模式的附加模式,允許執行高性能的大容量複制操作。

如果在最新日志備份後發生日志損壞或執行大容量日志記錄操作,則必須重做自該上次備份之後所做的更改。

否則不丢失任何工作。

可以恢複到任何備份的結尾。 不支援時點恢複。

檢視或更改資料庫的恢複模式

連接配接到相應的 Microsoft SQL Server 資料庫引擎 執行個體之後,在對象資料總管中,單擊伺服器名稱以展開伺服器樹。

展開“資料庫”,然後根據資料庫的不同,選擇使用者資料庫,或展開“系統資料庫”,再選擇系統資料庫。

右鍵單擊該資料庫,再單擊“屬性”,這将打開“資料庫屬性”對話框。

在“選擇頁”窗格中,單擊“選項”。

目前恢複模式顯示在“恢複模式”清單框中。

也可以從清單中選擇不同的模式來更改恢複模式。可以選擇“完整”、“大容量日志”或“簡單”。如下圖所示:

SQL Server的備份

我們建議備份磁盤應不同于資料庫資料和日志的磁盤。 這是資料或日志磁盤出現故障時通路備份資料必不可少的。

連接配接到相應的 Microsoft SQL Server 資料庫引擎執行個體之後,在對象資料總管中,單擊伺服器名稱以展開伺服器樹。

展開“伺服器對象”,然後右鍵單擊“備份裝置”。

單擊“建立備份裝置”。 将打開“備份裝置”對話框。

輸入裝置名稱。

若要确定目标位置,請單擊“檔案”并指定該檔案的完整路徑。

若要定義新裝置,請單擊“确定”。

若要備份至新裝置,右鍵裝置名稱,選擇"back up a database",然後再具體的對話框中選擇需要備份的資料庫。如下圖所示:

SQL Server的備份
SQL Server的備份

問題:sql server從2點開始備份,4點備份完。那麼進行完整還原的時候,恢複到的是哪一個時間點。是2點,還是4點,或者是其他時間點。

解答:首先,恢複到的是4點。這是因為在進行full database backup的時候,會有一個開始備份的LSNs,在full database backup 完成的時候,又有一個備份完成的LSNe。在備份完成以後,資料庫會redo從LSNa到LSNb這一段log record。是以回複到的是4點。

執行如下指令

查詢結果如下所示:

SQL Server的備份

這說明進行backup的時候會被記錄到log record中。

不允許在顯式或隐式事務中使用 BACKUP 語句。

無法在早期版本的 SQL Server 中還原較新版本的 SQL Server 建立的備份。

預設情況下,為 sysadmin 固定伺服器角色以及 db_owner 和 db_backupoperator 固定資料庫角色的成員授予 BACKUP DATABASE 和 BACKUP LOG 權限。

SQL Server的備份

右鍵資料庫AdventureWorks2012->tasks->back up,如下圖所示:

SQL Server的備份

backup type:full,表示完全備份

backup component:database

backup set->name:預設

backup set will expire:after:0,表示永遠不失效。

destination:disk,表示備份到磁盤

點選add選擇備份裝置或者指定備份路徑,如下圖所示:

SQL Server的備份

我們這裡選擇的是前面建立的backup device:mybackupdisk。

注意:我們可以指定多個backup device。指定多個備份裝置可以節約備份時間。并行寫入。

完成上述配置以後并确定備份,我們就可以在磁盤目錄”d:\backup\backup1.bak"下找到我們的備份檔案,一共有189MB。

  當差異備份的大小增大時,還原差異備份會顯著延長還原資料庫所需的時間。 是以,建議按設定的間隔執行新的完整備份,以便為資料建立新的差異基準。 例如,您可以每周執行一次整個資料庫的完整備份(即完整資料庫備份),然後在該周内執行一系列正常的差異資料庫備份。

操作步驟跟3.4節完整備份資料庫一樣,隻是将buckup type類型改成Differential而已。destination可以依然選擇完整備份的那一個device,不過要求是NOINIT,而不能是INIT,因為如果是INIT的話會覆寫原來的完整備份。

右鍵選擇資料庫TSQL2012->tasks->restore->database,出現如下圖所示内容:

SQL Server的備份

如上圖所示,出現了我們之前建立的完整備份和差異備份。

如果資料庫使用完整恢複模式或大容量日志恢複模式,則必須足夠頻繁地備份事務日志,以保護資料和避免事務日志變滿。 這将截斷日志,并且支援将資料庫還原到特定時間點。

操作步驟跟3.4節完整備份資料庫一樣,隻是将buckup type類型改成Transaction Log而已。然後選擇Option選項,我們重點看一下Transaction Log選項。對于例行的日志備份,請保留預設選項“通過删除不活動的條目截斷事務日志(Truncate the transaction log)”。如下圖所示:

SQL Server的備份

若要備份日志尾部(即活動的日志),請選中“備份日志尾部,并使資料庫處于還原狀态(Back up the tail of the log, and leave database in the restoring state)”。

注意:事務日志備份與結尾日志備份就隻差了一個關鍵字NORECOVERY,資料庫備份可以有多個事務日志,但是隻有一個結尾日志。一般結尾日志多用在資料庫恢複的時候。在資料庫恢複中,恢複事務日志并不能說明資料庫已經恢複完成,但是一旦恢複了結尾日志,這表明資料庫恢複工作完成。

SQL Server的備份

由上圖可見,備份中多出我們上述定義的事務日志:Transaction Log Backup of TSQL2012和結尾日志:Transaction Tail-Log Backup of TSQL2012。