標籤:多個 使用者模式 資料庫 alter 修改 distinct ack 丟失 比較
原文:sql server 備份與恢複系列三 簡單復原模式下的備份與還原
一.概述
前面講了備份的一些理論知識,這篇開始講在簡單復原模式下的備份與還原。在簡單模式下是不能做記錄備份的,發生災難後,資料庫最後一次備份之後做的資料修改將是全部丟失的,所以在生產環境下,資料又很重要,一般不建議使用這種模式。 例如對一個資料庫有5次完整資料備份,時間是t5, 之後發生災難,就會部丟失。
當資料庫越來越大,完整備份時間會越來越長,為了減少丟失風險,引入差異備份。例如示範:在第一次建立資料庫完整備份後,建立了三次差異備份,之後再建立完整備份,從而建立新的差異基底。不管是完整備份還是差異備份,一般只能在晚間進行。如果資料比較龐大又不允許長時間資料丟失,那簡單復原模式是不能滿足的。
二.備份示範
在簡單復原模式下主要的備份是完整備份和差異備份。我這裡有TestLog庫,庫裡有二個表。假設周日做一次完整備份,周一到周六晚上每天做一次差異備份,到第二周的周日時開始新的基準線。如下所示
use testexec sp_addumpdevice ‘disk‘, ‘BackupTestDevice‘,‘F:\SqlService\backup\BackupTestBackup.bak‘
--設定復原模式為簡單恢複
ALTER DATABASE TestLog SET RECOVERY simple
go-- 做一次完整備份到備份裝置中(備份基準) 假設在周日晚上backup database TestLog to BackupTestDevicego
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
在備份裝置中查看備份組
-- 通過指令碼查看
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是1restore database TestLog from BackupTestDevice with file=1, norecovery --新基準file是8, 恢複到差異備份檔案9 restore database TestLog from BackupTestDevice with file=9, recovery
總結:對於簡單復原模式,沒有記錄備份,恢複只需要一個完整Database Backup,以及最後一個差異備份。 對於多個差異備份檔案,在還原時不需要LSN的連續性(在同一個基準內)。
sql server 備份與恢複系列三 簡單復原模式下的備份與還原