差異備份的恢復問題

  

  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

 轉自bbs.dbfen.com 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章