成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

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

2010-08-28 10:50:01來源:西部e網作者:

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
主站蜘蛛池模板: 海伦市| 万年县| 福泉市| 红桥区| 霍林郭勒市| 区。| 江油市| 正阳县| 华阴市| 武陟县| 渝中区| 廊坊市| 吐鲁番市| 云南省| 招远市| 中方县| 黎川县| 河南省| 辉南县| 伊宁县| 巴彦县| 特克斯县| 新龙县| 佳木斯市| 新宾| 灵石县| 东丰县| 静海县| 遵化市| 南和县| 桦南县| 和田县| 西畴县| 尖扎县| 东阿县| 泊头市| 阳朔县| 达拉特旗| 甘肃省| 江山市| 平武县|