程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
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:\test.bak' 
insert  into  test..t  select  2 
再進行一次完整備份 
backup  database  test  to  disk='c:\test.bak' 
insert  into  test..t  select  3 
此時用  restore  database  test  from  disk='c:\test.bak'  with  file=1 
結果為  1,  此為正確 
用  restore  database  test  from  disk='c:\test.bak'  with  file=2 
結果為  1, 
2  此也為正確 
當表t中為1,2,3的時候,在插入一條紀錄結果為1,2,3,4然後進行一次差異備份 
backup  database  test  to  disk='c:\test.bak'  with  differential 
然後往執行delete  from  t  刪除所有紀錄 
我現在想恢復最後的那次差異備份結果為1,2,3,4),用語句改如何實現呢? 
---------------------------------------------------------------   
下面的是詳細的過程,在我的電腦上測試成功:   
--清除環境,防止現有的數據影響測試結果 
exec  master..xp_cmdshell  'del  c:\text.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:\test.bak' 
go  
--插入數據2 
insert  into  test..t  select  2 
go 
--再進行一次完整備份 
backup  database  test  to  disk='c:\test.bak' 
go 
--插入3,4 
insert  into  test..t  select  3 
insert  into  test..t  select  4 
go 
--差異備份: 
backup  database  test  to  disk='c:\test.bak'  with  differential  
--刪除數據庫 
drop  database  test  
--還原數據庫和差異數據庫備份 
--還原完整備份 
restore  database  test  from  disk='c:\test.bak'  with  file=2,norecovery 
--還原差異備份的內容 
restore  database  test  from  disk='c:\test.bak'  with  file=3,recovery   
--顯示恢復後的數據 
select  *  from  test..t 
--------------------------------------------------------------- 
都已經說的好明白了,怎麼可能會不行呢? 
前段時間我就做過類似程序的! 
必須說明的是:在恢復差異備份時,必須恢復最後一次的完整備份!!切記) 
而且下面的兩個語句必須同時執行,即放在一個事務中。   
restore  database  test  from  disk='c:\test.bak'  with  file=離你要恢復的差異備份最近一次的完整備份號,norecovery   
restore  database  test  from  disk='c:\test.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:\test.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:\test.bak' 
insert  test..t  select  2 
backup  database  test  to  disk='c:\test.bak' 
insert  test..t  select  3 
insert  test..t  select  4 
backup  database  test  to  disk='c:\test.bak'  with  differential 
delete  test..t 
go  
--下面開始恢復:  
restore  database  test  from  disk='c:\test.bak'  with  file=2,norecovery  --對應你最後一次的完整備份
restore  database  test  from  disk='c:\test.bak'  with  file=3  --對應你要還原的差異備份  
go  
select  *  from  test


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