通过日志恢复MSSQL数据例子
  biE3E3UjTjeg 2024年01月22日 15 0

     这段时间看了关于在SQL server 中通过日志和时间点来恢复数据。也看了一些网上的例子,看如何通过日志来恢复数据。 

    前提条件:

数据库的故障恢复改为非简单模式,去掉自动关闭和自动收缩两个选项

如果是简单模式:

“完整”

    测试环境:    

       1,建立数据库和测试表         

create database zp

create table [zping.com](

 id int,

 name varchar(20)

)

   插入测试数据:   

insert into [zping.com](id,name)
values(1,'zping.com1')
insert into [zping.com](id,name)
values(2,'zping.com2')
insert into [zping.com](id,name)
values(3,'zping.com3')
insert into [zping.com](id,name)
values(4,'zping.com4')

  备份数据库,可以通过sql server的可视化操作,下面是生成的代码:

BACKUP DATABASE [zp] TO  DISK = N'C:\k.bak' WITH NOFORMAT, NOINIT,  
NAME = N'zp-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

   查看数据: 

通过日志恢复MSSQL数据例子_数据

  

这时我们做一个完整备份

 这时可能一不小心删除了一些数据。我们模拟一下:(假定删除了1,2的数据) 

delete from [zping.com] where (id=1 or id =2)

注意:要记住大体的删除时间

 

  这时发现删除错误了,怎么把数据找回来啊。方法有两个:

       1,通过Log Explorer 查找进行恢复数据(我网站有此工具)

       2,另一种方法通过恢复日志(指定时间点恢复)来恢复数据。

 

    说明:第一个方法可以在线操作。

            第二个方法必须停止数据库或者再另一个数据库恢复(前提是必须有一个完全备份和日志备份)

  

   这里我们来讨论第二中方法指定时间点恢复:

如果没做个数据库完整备份,是不能做事务日志备份的

 

     这时新建一个数据库zp(将以前的数据库改名),恢复数据库

 

通过日志恢复MSSQL数据例子_数据_02

这里我们选择最近时间的备份

 

  默认在数据库的设置如下:是追加到备份集里,所以会有两个备份,如下图:

 

通过日志恢复MSSQL数据例子_数据_03

 

在”选项“里设置”不回滚“事务, 

   注意:通过事务日志还原数据库,必须选择"不回滚"事务

   确定后:出现下面情况:

 

通过日志恢复MSSQL数据例子_数据_04

这时发现,数据库一直是”正在还原“,这时还原数据库事务日志,

   1,“常规”里选择时间,(刚删除的时间)

   2,“选项”里将恢复状态设置为”回滚未提交“事务

通过日志恢复MSSQL数据例子_数据_05

   

 

  确定后,查询数据库,发现数据回来了。

 

  总结

   1, 这是一般大型网站数据安全的一个办法,因为数据库比较大(可能有几百G)数据,做一次完整备份时间很长,而且影响数据库服务器的性能,为保证数据安全,大多采用完整备份+事务日志备份来保证数据安全。例如:一天做一次或者2天做一次完整备份,几个小时内做一次日志备份。(当然可以用写一个job来实现)

   2,如SQL server 2005里的镜像就是采用的这种事务日志同步的方法保证数据的同步。

   3,如果恢复的日志数据出现”LSN“太早和太晚说明了事务日志间的不连续。这时要注意备份的时间和顺序。

 

 



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: 对比库表结构,生成SQL 下一篇: BCP 实例
  1. 分享:
最后一次编辑于 2024年01月22日 0

暂无评论

推荐阅读
biE3E3UjTjeg