MsSql

关注公众号 jb51net

关闭
首页 > 数据库 > MsSql > SQLServer数据库恢复

SQLServer数据库误操作恢复的方法

作者:鲤籽鲲

本文主要介绍了SQLServer数据库误操作恢复的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

在日常开发工作中,有可能会存在数据库的误操作,比如不小心删除了一个表或者删除了一堆数据,这个时候我们就需要将数据库进行恢复,恢复到误操作以前的状态,而这篇文章就是主要如何在误操作之后,恢复数据库的数据。

一、恢复数据实例

1.创建初始数据

use master
if exists (select * from sys.databases where name='test') 
drop database test;

create database test;

use test
create table UserInfo
(
id int,
name varchar(50),
nickname varchar(50),
);
go

insert into UserInfo values (1,'张三','小张');
insert into UserInfo values (2,'张三2','小张');
insert into UserInfo values (3,'李四','小李');
insert into UserInfo values (4,'王五','小王');
insert into UserInfo values (5,'赵六','小赵');

select * from UserInfo;

2.保证数据恢复的前提条件

前提1 - 数据库创建时便已设置恢复模式为完整

对于任何环境下,新建数据库后,我们都需要先检查数据库的恢复模式,确认数据库的恢复模式是【完整恢复模式】,这是数据库数据得以恢复的基础。如果等到出问题,再想到这个就为时已晚了。
修改恢复模式如下图所示:

选中数据库,然后右键菜单=》选择【属性】=》属性页选择【选项】=》恢复模式哪一项,选择【完整】=》点击【确定】

数据库一般默认恢复模式就是【完整】恢复模式。

脚本检查恢复模式:SELECT recovery_model,recovery_model_desc FROM sys.databases WHERE name ='test';

如果查询结果如下,则表示数据恢复模式配置没有问题。

前提2 - 至少做过一次完整的备份

数据库数据恢复是需要基于数据的完整备份上进行的,如果没有一次完整的数据备份,那么数据备份无从谈起,所以,创建完一次数据库后,需强制性做一次完整的备份。

数据完整备份操作如下图所示:


选中数据库=》右键菜单,选择【任务】=》选择【备份】=》备份类型,选择【完整】=》确定

扩展内容:可以通过一下sql查询所有的数据库备份信息

SELECT database_name,recovery_model,name, backup_finish_date,type FROM msdb.dbo.backupset

如:本人刚才操作了两次数据完整备份和一次事务日志备份,查询结果如下,
type为D表示数据备份,L表示事务日志备份:

3.模拟不小心误操作

再次强调:数据恢复的前提条件中修改备份模式以及强制做一次完整的数据和事务日志备份,是我们在出现问题之前必须做过的操作,否则就没有什么恢复可言了。
现在我们模拟做一下误操作:

--模拟误操作 2022-11-23 14.25 开始的误操作,记一下误操作事件,以便后续演示数据恢复
--本意删除张三2的,但是条件不当,将不该删除的数据也删除了
delete from UserInfo where nickname='小张';
insert into UserInfo values (110,'错误数据','小错误');

--不小心新建了一个表格
select * into UserInfo2 from UserInfo;

现在我们比对一下误操作前后数据

4.开始恢复

出现误操作之后,具体恢复步骤如下:

1、首先将数据库限制为单个用户访问

出现误操作后,我们需要切断其他用户对数据库在进行操作产生数据,造成更大的问题,因此需要先将数据库限制为单个用户访问,与外界隔绝开。
具体操作如下:

当我们将限制访问设置为【SINGLE_USER】后,我们会发现 数据库后面会附加上【单个用户】标志。

2、做一次事务日志备份(备份日志尾部)

如果无法备份,则查询一下谁在占用:

SELECT * FROM sys.sysprocesses WHERE dbid=DB_ID('test')

然后使用kill 语句将占用者清除即可,如 kill 56,56代表占用者的spid
完成以上操作后,继续进行备份。

3、还原完整数据备份

完成上述事务日志的备份后,我们就需要将数据进行还原。

4、还原事务日志备份

还原完完整数据备份后,我们需要还原事务日志,因为数据库最终需要根据事务日志与完整备份的数据进行比对后进行数据的恢复操作。

至此,数据已经恢复成功。

5、最后恢复数据库的限制访问设置

将限制访问,从【SINGLE_USER】修改为【MULTI_USER】即可

到此这个数据恢复的完整流程结束。

二、恢复数据原理

1.数据库文件类型

数据库中的文件类型:

类型作用
mdf (primary data file)主要数据文件,数据库系统的可实时操作/读取的数据文件,也可作为物理备份文件使用
ndf (secondary data files)次要数据文件
ldf (Log data files)事务日志文件,用于记录数据库的事务日志信息
bak数据库备份文件

2.使用bak恢复数据原理

首先我们要了解 事务日志中,记录了数据库自创建之初数据库所有的操作日志。

例如:

总结

到此这篇关于SQLServer数据库误操作恢复的方法的文章就介绍到这了,更多相关SQLServer数据库恢复内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

参考

SQLServer 2008以上误操作数据库恢复方法——日志尾部备份
数据库误操作恢复实现原理

您可能感兴趣的文章:
阅读全文