中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > Mysql
数据库中有关差异备份的恢复问题
作者:eqreq 时间:2007-06-20 17:06 出处:csdn 责编:月夜寒箫
              摘要:数据库中有关差异备份的恢复问题

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
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有