top
Loading...
數據庫中有關差異備份的恢復問題

A : 情況是這樣的















create  database  test  create  table  t(a  int)  insert  into  test..t  select  1

然后進行一次完整備份

backup  database  test  to  disk='c:est.bak'  insert  into  test..t  select  2

再進行一次完整備份

backup  database  test  to  disk='c:est.bak'  insert  into  test..t  select  3

此時用

restore  database  test  from  disk='c:est.bak'  with  file=1

結果為 1, 此為正確

restore  database  test  from  disk='c:est.bak'  with  file=2

結果為 1,

2 此也為正確

當表t中為1,2,3的時候,在插入一條紀錄結果為1,2,3,4然后進行一次差異備份

backup  database  test  to  disk='c:est.bak'  with  differential

然后往執行delete from t 刪除所有紀錄

我現在想恢復最后的那次差異備份(結果為1,2,3,4),用語句改如何實現呢?

下面的是詳細的過程,在我的電腦上測試成功:

--清除環境,防止現有的數據影響測試結果

exec  master..xp_cmdshell  'del  c:ext.bak'  if  exists(select  *  from  master..sysdatabases  where  name='test')  drop  database  test  go

--創建數據庫

create  database  test go

--打開創建的數據

use  test  go

--創建測試表

create  table  t(a  int)

--切換回master數據庫

use  master  go

--插入數據1

insert  into  test..t  select  1  go

--然后進行一次完整備份

backup  database  test  to  disk='c:est.bak'  go

--插入數據2

insert  into  test..t  select  2  go

--再進行一次完整備份

backup  database  test  to  disk='c:est.bak'  go

--插入3,4

insert  into  test..t  select  3  insert  into  test..t  select  4  go

--差異備份:

backup  database  test  to  disk='c:est.bak'  with  differential

--刪除數據庫

drop  database  test

--還原數據庫和差異數據庫備份

--還原完整備份

restore  database  test  from  disk='c:est.bak'  with  file=2,norecovery

--還原差異備份的內容

restore  database  test  from  disk='c:est.bak'  with  file=3,recovery

--顯示恢復后的數據

select  *  from  test..t

都已經說的好明白了,怎么可能會不行呢?

前段時間我就做過類似程序的!

必須說明的是:在恢復差異備份時,必須恢復最后一次的完整備份!!(切記)

而且下面的兩個語句必須同時執行,即放在一個事務中。

restore  database  test  from  disk='c:est.bak'  with  file=離你要恢復的差異備份最近一次的完整備份號,norecovery    restore  database  test  from  disk='c:est.bak'  with  file=你要還原的差異備份號,recovery

具體的備份號可以從下面得到:(你可以認真研究一下backupfile,backupset,backmediaset,backupmediafamily幾個表,可以發現規律)

select  backup_start_date  as  備份時間,position  as  備份號,  case  type    when  'D'  then  '完整備份'  when  'I'  then  '差異備份'  end  as  備份類型    from  msdb..backupset  where  database_name='test' and  media_set_id  in    (select  distinct  media_set_id  from  msdb..backupmediafamily  where  physical_device_name='c:est.bak')  order  by  position

如果還不行的話,可以給我留言'

---執行下面的序列:

create  database  test  go  use  test  go  create  table  test..t(a  int)  insert  test..t  select  1  backup  database  test  to  disk='c:est.bak' insert  test..t  select  2  backup  database  test  to  disk='c:est.bak'  insert  test..t  select  3  insert  test..t  select  4  backup  database  test  to  disk='c:est.bak'  with  differential  delete  test..t  go

--下面開始恢復:

restore  database  test  from  disk='c:est.bak'  with  file=2,norecovery  --對應你最后一次的完整備份restore  database  test  from  disk='c:est.bak'  with  file=3  --對應你要還原的差異備份   go   select  *  from  test
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗