天天看點

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

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

一.概述

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

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

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

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

二.備份示範

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

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

  

sql server 備份與恢複系列三 簡單恢複模式下的備份與還原
--設定恢複模式為簡單恢複
 ALTER DATABASE TestLog SET RECOVERY simple
go
-- 做一次完整備份到備份裝置中(備份基準) 假設在周日晚上
backup database  TestLog to BackupTestDevice
go      
sql server 備份與恢複系列三 簡單恢複模式下的備份與還原
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 with differential 
go
--差異備份 周一晚
backup database TestLog to BackupTestDevice with differential       

 在備份裝置中檢視備份集

sql server 備份與恢複系列三 簡單恢複模式下的備份與還原
-- 通過腳本檢視      

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

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

三. 還原示範

   将一個資料庫還原,需要構造一個正确的還原順序。在還原過程中,備份檔案結尾使用norecovery事務不恢複(正在還原。。)不可讀寫,在最後一個備份檔案結尾使用recovery事務恢複。資料庫恢複正常。

-- 切換到master庫
use master      
--設定單使用者模式(否則執行下面報錯:“因為資料庫正在使用,是以無法獲得對資料庫的獨占通路權”)
ALTER DATABASE TestLog SET OFFLINE WITH ROLLBACK IMMEDIATE      
-- 從備份恢複一個全備份 ,norecovery(正在還原...)不可讀寫. file指備份集位置号
restore database TestLog from BackupTestDevice with file=1, norecovery       
sql server 備份與恢複系列三 簡單恢複模式下的備份與還原
sql server 備份與恢複系列三 簡單恢複模式下的備份與還原
-- 恢複到差異備份檔案3,跳過差異備份2 ,看是否備份成功
restore database TestLog from BackupTestDevice  with file=3, recovery      
sql server 備份與恢複系列三 簡單恢複模式下的備份與還原
sql server 備份與恢複系列三 簡單恢複模式下的備份與還原
-- 備份結束之後,結束單使用者模式
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      
sql server 備份與恢複系列三 簡單恢複模式下的備份與還原

 總結:對于簡單恢複模式,沒有日志備份,恢複隻需要一個完整資料庫備份,以及最後一個差異備份。 對于多個差異備份檔案,在還原時不需要LSN的連續性(在同一個基準内)。