A : 情況是這樣的
create database test
create table t(a int)
insert into test..t select 1
然后進(jìn)行一次完整備份
backup database test to disk='c: est.bak'
insert into test..t select 2
再進(jìn)行一次完整備份
backup database test to disk='c: est.bak'
insert into test..t select 3
此時(shí)用 restore database test from disk='c: est.bak' with file=1
結(jié)果為 1, 此為正確
用 restore database test from disk='c: est.bak' with file=2
結(jié)果為 1,
2 此也為正確
當(dāng)表t中為1,2,3的時(shí)候,在插入一條紀(jì)錄結(jié)果為1,2,3,4然后進(jìn)行一次差異備份
backup database test to disk='c: est.bak' with differential
然后往執(zhí)行delete from t 刪除所有紀(jì)錄
我現(xiàn)在想恢復(fù)最后的那次差異備份(結(jié)果為1,2,3,4),用語(yǔ)句改如何實(shí)現(xiàn)呢?
---------------------------------------------------------------
下面的是詳細(xì)的過(guò)程,在我的電腦上測(cè)試成功:
--清除環(huán)境,防止現(xiàn)有的數(shù)據(jù)影響測(cè)試結(jié)果
exec master..xp_cmdshell 'del c: ext.bak'
if exists(select * from master..sysdatabases where name='test')
drop database test
go
--創(chuàng)建數(shù)據(jù)庫(kù)
create database test
go
--打開(kāi)創(chuàng)建的數(shù)據(jù)
use test
go
--創(chuàng)建測(cè)試表
create table t(a int)
--切換回master數(shù)據(jù)庫(kù)
use master
go
--插入數(shù)據(jù)1
insert into test..t select 1
go
--然后進(jìn)行一次完整備份
backup database test to disk='c: est.bak'
go
--插入數(shù)據(jù)2
insert into test..t select 2
go
--再進(jìn)行一次完整備份
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
--刪除數(shù)據(jù)庫(kù)
drop database test
--還原數(shù)據(jù)庫(kù)和差異數(shù)據(jù)庫(kù)備份
--還原完整備份
restore database test from disk='c: est.bak' with file=2,norecovery
--還原差異備份的內(nèi)容
restore database test from disk='c: est.bak' with file=3,recovery
--顯示恢復(fù)后的數(shù)據(jù)
select * from test..t
---------------------------------------------------------------
都已經(jīng)說(shuō)的好明白了,怎么可能會(huì)不行呢?
前段時(shí)間我就做過(guò)類似程序的!
必須說(shuō)明的是:在恢復(fù)差異備份時(shí),必須恢復(fù)最后一次的完整備份!!(切記)
而且下面的兩個(gè)語(yǔ)句必須同時(shí)執(zhí)行,即放在一個(gè)事務(wù)中。
restore database test from disk='c: est.bak' with file=離你要恢復(fù)的差異備份最近一次的完整備份號(hào),norecovery
restore database test from disk='c: est.bak' with file=你要還原的差異備份號(hào),recovery
具體的備份號(hào)可以從下面得到:(你可以認(rèn)真研究一下backupfile,backupset,backmediaset,backupmediafamily幾個(gè)表,可以發(fā)現(xiàn)規(guī)律)
select backup_start_date as 備份時(shí)間,position as 備份號(hào),
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
如果還不行的話,可以給我留言~
---------------------------------------------------------------
---執(zhí)行下面的序列:
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
--下面開(kāi)始恢復(fù):
restore database test from disk='c: est.bak' with file=2,norecovery --對(duì)應(yīng)你最后一次的完整備份
restore database test from disk='c: est.bak' with file=3 --對(duì)應(yīng)你要還原的差異備份
go
select * from test