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