數據庫的備份與還原:

數據庫的備份一般都會同時擁有三種:完全備份、差異備份、事務日誌備份

完全備份是指整個數據的完整備份,差異備份則指現在數據與上次完整備份後的差異數據備份;而事務日誌備份則是備份日誌文件.
根據以上的說明,一般在安排調度時就是完全備份的間隔期最長,差異備份其次,事務日誌的最短.比如一週進行一次完整備份,一天進行一次差異備份,每四小時進行一次事務日誌備份.當然安排執行時須根據具體實際情況來定.

備份:可以直接備份,也可利用維護計劃,還可利用備份設備.要想週期性的自動執行,最好是利用作業.下面介紹的就是備份設備+作業進行備份.
可以在企業管理器中可視化進行,也可利用T-SQL編寫.一般後者更靈活.

當數據有丟失或其它系統故障需要恢復時,一般恢復順序爲:
1.備份當前的事務日誌(如果還能備份的話);
2.恢復最近一次的完整備份;
3.恢復離最近一次的差異備份;
4.順序恢復最近一次差異備份之後的每一個事務日誌備份
5.恢復第一步備份的當前事務日誌;

注意:1.如果數據沒有損壞,原來數據文件還完好無損,請直接附加數據庫.
       2.在進行恢復完整備份時,就須指定norecovery.直到最後所有的事務日誌恢復完全才可recovery結束.

還有一種爲文件,文件組備份,該備份還原更特殊,更靈活。做這種備份的情況是該文件上的數據比較重要,改動比較頻繁。而在恢復時,只要恢復受損的所在文件或文件組及其相應的事務日誌,對於大型數據庫來說,將能大大恢復加快速度。其缺點是比較難於管理。必須注意文件的完整性及事務日誌備份的覆蓋點。

下面示例爲數據庫DB05102的完全備份、差異備份、事務日誌備份及其還原操作。呵,建作業時用的是企業管理器。因爲那樣方便多了,當然如果只能用代碼編寫時,那再麻煩也只能硬着頭皮寫啦^_^


1.建備份設備:
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'  --完全備份設備
go
if exists(select name from sysdevices where name='DB05102DBK')
exec sp_dropdevice 'DB05102DBK'
exec sp_addumpdevice 'disk','DB05102DBK','F:/0509/Backup/DB05102DBK'     --差異備份設備
go
if exists(select name from sysdevices where name='DB05102LBK')
exec sp_dropdevice 'DB05102LBK'
exec sp_addumpdevice 'disk','DB05102LBK','F:/0509/Backup/DB05102LBK'      --事務日誌備份設備
go
exec sp_addumpdevice  'disk','DB05102LBK2','F:/0509/Backup/DB05102LBK2'   --當前事務日誌備份設備
go


2.在企業管理器中新建如下三種作業,安排調度爲:
  完全備份每1天執行1次;步驟中的T-SQL 語句爲:backup database DB05102 to DB05102FBK
  差異備份每天每隔4小時執行1次;其中的T-SQL語句爲:

            backup database DB05102 to DB05102DBK with differential
  事務日誌備份每天每隔1小時執行1次:其中的t-sql語句爲:

            backup log DB05102 to DB05102LBK. 注意數據庫在創建時,默認恢復模式爲simple.而要備份事務日誌的話,必須將其改爲full 或 bulk_logged.即alter database DB05102 set recovery Bulk_logged.當然這個語句只執行一次就行了.沒必要每次執行事務日誌備份都帶進去

3.還原數據庫:

備份當前活動事務日誌:
backup log DB05102 to DB05102LBK2
with no_truncate                    
go


還原上一次的完全備份.file爲要還原的備份集,一次備份產生一個備份集,norecovery說明恢復未結束.直到最後一個日誌恢復方指定爲recovery或不指定 (默認爲recovery) .
restore database DB05102
from DB05102FBK
with file=4,norecovery  
go 


.還原上面完全備份後的離現在最近一次的差異備份                              
restore database DB05102
from DB05102dbk
with file=29,norecovery
go


----.還原上面的差異備份後的所有事務日誌備份.必須按順序執行.
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


還原當前備份的事務日誌備份.
restore log DB05102
from DB05102lbk2
with file=8
go

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章