完全備份是指整個數(shù)據(jù)的完整備份,差異備份則指現(xiàn)在數(shù)據(jù)與上次完整備份后的差異數(shù)據(jù)備份;而事務(wù)日志備份則是備份日志文件.
根據(jù)以上的說明,一般在安排調(diào)度時就是完全備份的間隔期最長,差異備份其次,事務(wù)日志的最短.比如一周進行一次完整備份,一天進行一次差異備份,每四小時進行一次事務(wù)日志備份.當(dāng)然安排執(zhí)行時須根據(jù)具體實際情況來定.
備份:可以直接備份,也可利用維護計劃,還可利用備份設(shè)備.要想周期性的自動執(zhí)行,最好是利用作業(yè).下面介紹的就是備份設(shè)備+作業(yè)進行備份.
可以在企業(yè)管理器中可視化進行,也可利用T-SQL編寫.一般后者更靈活.
當(dāng)數(shù)據(jù)有丟失或其它系統(tǒng)故障需要恢復(fù)時,一般恢復(fù)順序為:
1.備份當(dāng)前的事務(wù)日志(如果還能備份的話);
2.恢復(fù)最近一次的完整備份;
3.恢復(fù)離最近一次的差異備份;
4.順序恢復(fù)最近一次差異備份之后的每一個事務(wù)日志備份
5.恢復(fù)第一步備份的當(dāng)前事務(wù)日志;
注意:1.如果數(shù)據(jù)沒有損壞,原來數(shù)據(jù)文件還完好無損,請直接附加數(shù)據(jù)庫.
2.在進行恢復(fù)完整備份時,就須指定norecovery.直到最后所有的事務(wù)日志恢復(fù)完全才可recovery結(jié)束.
還有一種為文件,文件組備份,該備份還原更特殊,更靈活。做這種備份的情況是該文件上的數(shù)據(jù)比較重要,改動比較頻繁。而在恢復(fù)時,只要恢復(fù)受損的所在文件或文件組及其相應(yīng)的事務(wù)日志,對于大型數(shù)據(jù)庫來說,將能大大恢復(fù)加快速度。其缺點是比較難于管理。必須注意文件的完整性及事務(wù)日志備份的覆蓋點。
下面示例為數(shù)據(jù)庫DB05102的完全備份、差異備份、事務(wù)日志備份及其還原操作。呵,建作業(yè)時用的是企業(yè)管理器。因為那樣方便多了,當(dāng)然如果只能用代碼編寫時,那再麻煩也只能硬著頭皮寫啦^_^
1.建備份設(shè)備:
use master
alter database pubs
set recovery simple
go
go
if exists(select name from sysdevices where name='DB05102FBK')
exec sp_dropdevice 'DB05102FBK'
exec sp_addumpdevice 'disk','DB05102FBK','F:\0509\Backup\DB05102FBK' --完全備份設(shè)備
go
if exists(select name from sysdevices where name='DB05102DBK')
exec sp_dropdevice 'DB05102DBK'
exec sp_addumpdevice 'disk','DB05102DBK','F:\0509\Backup\DB05102DBK' --差異備份設(shè)備
go
if exists(select name from sysdevices where name='DB05102LBK')
exec sp_dropdevice 'DB05102LBK'
exec sp_addumpdevice 'disk','DB05102LBK','F:\0509\Backup\DB05102LBK' --事務(wù)日志備份設(shè)備
go
exec sp_addumpdevice 'disk','DB05102LBK2','F:\0509\Backup\DB05102LBK2' --當(dāng)前事務(wù)日志備份設(shè)備
go
2.在企業(yè)管理器中新建如下三種作業(yè),安排調(diào)度為:
完全備份每1天執(zhí)行1次;步驟中的T-SQL 語句為:backup database DB05102 to DB05102FBK
差異備份每天每隔4小時執(zhí)行1次;其中的T-SQL語句為:
backup database DB05102 to DB05102DBK with differential
事務(wù)日志備份每天每隔1小時執(zhí)行1次:其中的t-sql語句為:
backup log DB05102 to DB05102LBK. 注意數(shù)據(jù)庫在創(chuàng)建時,默認(rèn)恢復(fù)模式為simple.而要備份事務(wù)日志的話,必須將其改為full 或 bulk_logged.即alter database DB05102 set recovery Bulk_logged.當(dāng)然這個語句只執(zhí)行一次就行了.沒必要每次執(zhí)行事務(wù)日志備份都帶進去
3.還原數(shù)據(jù)庫:
備份當(dāng)前活動事務(wù)日志:
backup log DB05102 to DB05102LBK2
with no_truncate
go
還原上一次的完全備份.file為要還原的備份集,一次備份產(chǎn)生一個備份集,norecovery說明恢復(fù)未結(jié)束.直到最后一個日志恢復(fù)方指定為recovery或不指定 (默認(rèn)為recovery) .
restore database DB05102
from DB05102FBK
with file=4,norecovery
go
.還原上面完全備份后的離現(xiàn)在最近一次的差異備份
restore database DB05102
from DB05102dbk
with file=29,norecovery
go
----.還原上面的差異備份后的所有事務(wù)日志備份.必須按順序執(zhí)行.
restore log DB05102
from DB05102lbk
with file=115,norecovery
go
restore log DB05102
from DB05102lbk
with file=116,norecovery
go
restore log DB05102
from DB05102lbk
with file=117,norecovery
go
還原當(dāng)前備份的事務(wù)日志備份.
restore log DB05102
from DB05102lbk2
with file=8
go