拯救你的数据 通过日志恢复MSSQL数据

所属分类: 数据库 / MsSql 阅读数: 854
收藏 0 赞 0 分享

这段时间看了关于在SQL server 中通过日志和时间点来恢复数据。也看了一些网上的例子,看如何通过日志来恢复数据。
前提条件:
数据库的故障恢复改为非简单模式,去掉自动关闭和自动收缩两个选项    
如果是简单模式:类似下面的语句操作数据就不会记录到日志中:  select * into t from [表名]
这时为保证数据的完整要将数据库的恢复模式改成“完整”
测试环境:   

1、建立数据库和测试表        

create database zp

create table [zping.com](
 id int,
 name varchar(20)
)

2、插入测试数据

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的可视化操作,下面是生成的代码:
[code]BACKUP DATABASE [zp] TO  DISK = N'C:\k.bak' WITH NOFORMAT, NOINIT, 
NAME = N'zp-完整 数据库 备份', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO[code]

查看数据:

注意:这时我们做一个完整备份

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

deletefrom[zping.com]where(id=1orid=2)

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

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

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

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

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

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

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

1、这时对数据库事务日志做备份(注意,如果没做个数据库完整备份,是不能做事务日志备份的)

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

这时我们看到,有两个还原的数据库备份,因为我对zp数据库备份了两次,两次的备份的数据文件都一样。这里我们选择最近时间的备份。

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

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

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

确定后,出现下面情况:

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

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

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

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

总结:

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助。

更多精彩内容其他人还在看

SQL Server正确删除Windows认证用户的方法

这篇文章主要给大家介绍了关于SQL Server正确删除Windows认证用户的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL Server具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

SQL Server查看login所授予的具体权限问题

在SQL Server数据库中如何查看一个登录名(login)的具体权限呢,下面脚本之家小编给大家带来了SQL Server查看login所授予的具体权限问题,感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

Mysql8.0.17安装教程【推荐】

本文通过图文并茂的形式给大家介绍了Mysql8.0.17安装,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C# ling to sql 取多条记录最大时间

这篇文章主要介绍了C# ling to sql 取多条记录最大时间,文中通过实例代码给大家介绍了sql 查询相同记录下日期最大的 一条,代码简单易懂,需要的朋友可以参考下
收藏 0 赞 0 分享

sql server编写archive通用模板脚本实现自动分批删除数据

这篇文章主要介绍了sql server编写archive通用模板脚本实现自动分批删除数据,需要的朋友可以参考下
收藏 0 赞 0 分享

SQL Server怎么找出一个表包含的页信息(Page)

这篇文章主要给大家介绍了关于SQL Server是如何找出一个表包含的页信息(Page)的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL Server具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

SQLyog连接MySQL8.0报2058错误的完美解决方法

这篇文章主要介绍了SQLyog连接MySQL8.0报2058错误的完美解决方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

SQL SERVER日志进行收缩的图文教程

这篇文章主要给大家介绍了关于SQL SERVER日志进行收缩的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用SQL SERVER具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

SqlServer中批量update语句

我现在想把S_USER表中的ACCOUNT批量修改成S_PERSON的ACCOUNT,那么就可以参考下面的语句,要找到对应的字段
收藏 0 赞 0 分享

SqlServer AS的用法

本篇文章简要分析,在SQL SERVER中,AS的基本用法,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多