程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 差異備份的恢復問題

差異備份的恢復問題

編輯:關於MYSQL數據庫

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved