SQLSERVER 日誌恢復

SQLSERVER 日誌恢復
有時開發過程中由於不小心或者程序出現錯誤導致錯誤刪除數據,或者由於計算機以外引起數據遭到破壞,這時候可以採用日誌進行恢復。
下面我們以爲數據庫HIS_YB名稱爲例子說明如何利用數據庫日誌進行數據恢復工作。
注意SQL SERVER7 的TRUNCATE LOG ON CHECKPOINT屬性設置TRUE 或者SQLSERVER2000設置爲簡單模式,
SQLSERVER不增長日誌,那麼就無法利用日誌進行恢復了。下面我詳細闡述如何利用日誌進行數據恢復。
1、假設數據庫的名稱爲HIS_YB,備份數據庫/日誌時間分別如下:
┌───────────┬───────────────┬─────────────┐
│ 備份時間 │事件(EVENT) │ 備份名稱(NAME)   │
├───────────┼───────────────┼─────────────┤
│2005-12-21 08:00:00 │Backup database his_yb │ c:/his_yb2108.bak  │
├───────────┼───────────────┼─────────────┤
│2005-12-21 10:00:00 │Backup log his_yb to │ c:/his_yb2110.log  │
├───────────┼───────────────┼─────────────┤
│2005-12-21 12:00:00 │Backup log his_yb to │ c:/his_yb2112.log  │
├───────────┼───────────────┼─────────────┤
│2005-12-21 14:00:00 │Backup database his_yb │ c:/his_yb2114.bak  │
├───────────┼───────────────┼─────────────┤
│2005-12-21 16:00:00 │Backup log his_yb to │ c:/his_yb2116.log  │
├───────────┼───────────────┼─────────────┤
│2005-12-21 18:00:00 │Backup log his_yb to │ c:/his_yb2118.log  │
├───────────┼───────────────┼─────────────┤
│2005-12-21 20:00:00 │failure 錯誤操作,數據損壞 │ c:/his_yb2120.log  │
└───────────┴───────────────┴─────────────┘

2、利用備份His_yb2108.bak恢復數據到19點鐘

--利用完全備份恢復數據
restore database his_yb from disk=’c:/his_yb2108.bak’
with norecovery,
MOVE ’his_yb_data’ TO ’c:/his_yb.mdf’,
MOVE ’his_yb_Log’ TO ’c:/his_yb.ldf’
go
--依次恢復日誌
--恢復日誌
restore log his_yb from disk=’c:/his_yb2110.log’
WITH norecovery
go
restore log his_yb from disk=’c:/his_yb2112.log’
WITH norecovery
go
restore log his_yb from disk=’c:/his_yb2116.log’
WITH norecovery
go
restore log his_yb from disk=’c:/his_yb2118.log’
WITH norecovery
go
restore log his_yb from disk=’c:/his_yb2120.log’
with recovery, stopat=’2005-12-21 19:00:00.000’
go

3、利用最近的數據庫進行恢復

--利用完全備份恢復數據
restore database his_yb from disk=’c:/his_yb2114.bak’
with norecovery,
MOVE ’his_yb_data’ TO ’c:/his_yb.mdf’,
MOVE ’his_yb_Log’ TO ’c:/his_yb.ldf’
--依次恢復日誌
go
restore log his_yb from disk=’c:/his_yb2116.log’
WITH norecovery
go
restore log his_yb from disk=’c:/his_yb2118.log’
WITH norecovery
go
restore log his_yb from disk=’c:/his_yb2120.log’
with recovery, stopat=’2005-12-21 19:00:00.000’
go

4、恢復到12點,可以利用最早的備份恢復
--利用完全備份恢復數據
restore database his_yb from disk=’c:/his_yb2108.bak’
with norecovery,
MOVE ’his_yb_data’ TO ’c:/his_yb.mdf’,
MOVE ’his_yb_Log’ TO ’c:/his_yb.ldf’
go
--依次恢復日誌
--恢復日誌
restore log his_yb from disk=’c:/his_yb2110.log’
WITH recovery

注意:利用日誌恢復的前提是在期間沒有使用shrink過日誌或者數據庫。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章