动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   数据库 → 阅读文章
  

 差异备份的恢复问题

作者来源:CSDN  
阅读 1822 人次 , 2006-3-18 11:48:00 

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



 本文Tags备份  恢复  
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:Mysql 数据库双机热备的配置
· 下一篇:解决PHP存取MySQL 4.1乱码问题
· 如何消除Oracle数据库的安全隐患(1)
· MySQL的管理工具:phpMyAdmin使用简介
· 数据仓库设计的21条原则
· 取汉字拼音首字母的存储过程
· 关于shared pool的深入探讨(一)


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077