差异备份的恢复问题

20mrzhang

20mrzhang

2016-02-19 19:25

下面,图老师小编带您去了解一下差异备份的恢复问题,生活就是不断的发现新事物,get新技能~

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 

再进行一次完整备份 

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

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然后进行一次差异备份 

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

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   

--差异备份: 

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

展开更多 50%)
分享

猜你喜欢

差异备份的恢复问题

编程语言 网络编程
差异备份的恢复问题

Microsoft SQL Server 7.0 备份及恢复相关问题

SQLServer
Microsoft SQL Server 7.0 备份及恢复相关问题

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

复习一下sql server的差异备份

编程语言 网络编程
复习一下sql server的差异备份

再谈MySQL数据库备份恢复和乱码问题

MySQL mysql数据库
再谈MySQL数据库备份恢复和乱码问题

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL备份和恢复

编程语言 网络编程
MySQL备份和恢复

脱机备份与恢复实战

编程语言 网络编程
脱机备份与恢复实战

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

连接mysql的javabean实例+简单分页

连接mysql的javabean实例+简单分页

win8版怎么禁用U盘自动播放?

win8版怎么禁用U盘自动播放?
下拉加载更多内容 ↓