sql server 備份與恢復系列三 簡單恢復模式下的備份與還原


一.概述

  前面講了備份的一些理論知識,這篇開始講在簡單恢復模式下的備份與還原。在簡單模式下是不能做日志備份的,發生災難后,數據庫最后一次備份之后做的數據修改將是全部丟失的,所以在生產環境下,數據又很重要,一般不建議使用這種模式。 例如對一個數據庫有5次完整數據備份,時間是t5,  之后發生災難,就會部丟失。

  當數據庫越來越大,完整備份時間會越來越長,為了減少丟失風險,引入差異備份。例如下圖演示:在第一次建立數據庫完整備份后,建立了三次差異備份,之后再建立完整備份,從而建立新的差異基准。不管是完整備份還是差異備份,一般只能在晚間進行。如果數據比較龐大又不允許長時間數據丟失,那簡單恢復模式是不能滿足的。

二.備份演示

  在簡單恢復模式下主要的備份是完整備份和差異備份。我這里有TestLog庫,庫里有二個表。假設周日做一次完整備份,周一到周六晚上每天做一次差異備份,到第二周的周日時開始新的基准線。如下所示

use test
exec sp_addumpdevice 'disk', 'BackupTestDevice','F:\SqlService\backup\BackupTestBackup.bak'

  

--設置恢復模式為簡單恢復
 ALTER DATABASE TestLog SET RECOVERY simple
go
-- 做一次完整備份到備份設備中(備份基准) 假設在周日晚上 backup database TestLog to BackupTestDevice go

go
--差異備份 周一晚
backup database TestLog to BackupTestDevice with differential 
go
--差異備份 周二晚
backup database TestLog to BackupTestDevice with differential 
go
--差異備份 周三晚
backup database TestLog to BackupTestDevice with differential 
go
--差異備份 周四晚
backup database TestLog to BackupTestDevice with differential 
go
--差異備份 周五晚
backup database TestLog to BackupTestDevice with differential 
go
--差異備份 周六晚
backup database TestLog to BackupTestDevice with differential 
go
--完整備份 周日晚(新基准)
backup database TestLog to BackupTestDevice 
--差異備份 周一晚
backup database TestLog to BackupTestDevice with differential 

 在備份設備中查看備份集
  

-- 通過腳本查看

select distinct s.first_lsn,s.last_lsn,s.database_backup_lsn,s.position,
s.backup_finish_date,s.type,y.physical_device_name,s.backup_size
from msdb..backupset as s inner join
msdb..backupfile as f on f.backup_set_id=s.backup_set_id inner join
msdb..backupmediaset as m on s.media_set_id=m.media_set_id inner join
msdb..backupmediafamily as y on m.media_set_id=y.media_set_id
where s.database_name='TestLog'
order by s.position asc

 

三. 還原演示

   將一個數據庫還原,需要構造一個正確的還原順序。在還原過程中,備份文件結尾使用norecovery事務不恢復(正在還原。。)不可讀寫,在最后一個備份文件結尾使用recovery事務恢復。數據庫恢復正常。

-- 切換到master庫
use master
--設置單用戶模式(否則執行下面報錯:“因為數據庫正在使用,所以無法獲得對數據庫的獨占訪問權”)
ALTER DATABASE TestLog SET OFFLINE WITH ROLLBACK IMMEDIATE
-- 從備份恢復一個全備份 ,norecovery(正在還原...)不可讀寫. file指備份集位置號
restore database TestLog from BackupTestDevice with file=1, norecovery 

  

-- 恢復到差異備份文件3,跳過差異備份2 ,看是否備份成功
restore database TestLog from BackupTestDevice  with file=3, recovery

  

-- 備份結束之后,結束單用戶模式
ALTER  database  TestLog  set   online  

 下面在來演示還原差異文件,使用舊基准。還原看會怎么樣

-- 從舊基准中恢復一個全備份 ,norecovery(正在還原...)不可讀寫. file是1
restore database TestLog from BackupTestDevice with file=1, norecovery 

--新基准file是8, 恢復到差異備份文件9 
restore database TestLog from BackupTestDevice  with file=9, recovery

 

 總結:對於簡單恢復模式,沒有日志備份,恢復只需要一個完整數據庫備份,以及最后一個差異備份。 對於多個差異備份文件,在還原時不需要LSN的連續性(在同一個基准內)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM