赞
踩
在日常开发工作中,有可能会存在数据库的误操作,比如不小心删除了一个表或者删除了一堆数据,这个时候我们就需要将数据库进行恢复,恢复到误操作以前的状态,而这篇文章就是主要如何在误操作之后,恢复数据库的数据。
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;
对于任何环境下,新建数据库后,我们都需要先检查数据库的恢复模式,确认数据库的恢复模式是【完整恢复模式】,这是数据库数据得以恢复的基础。如果等到出问题,再想到这个就为时已晚了。
修改恢复模式如下图所示:
选中数据库,然后右键菜单=》选择【属性】=》属性页选择【选项】=》恢复模式哪一项,选择【完整】=》点击【确定】
数据库一般默认恢复模式就是【完整】恢复模式。
脚本检查恢复模式:SELECT recovery_model,recovery_model_desc FROM sys.databases WHERE name ='test';
如果查询结果如下,则表示数据恢复模式配置没有问题。
数据库数据恢复是需要基于数据的完整备份上进行的,如果没有一次完整的数据备份,那么数据备份无从谈起,所以,创建完一次数据库后,需强制性做一次完整的备份。
数据完整备份操作如下图所示:
选中数据库=》右键菜单,选择【任务】=》选择【备份】=》备份类型,选择【完整】=》确定
扩展内容:可以通过一下sql查询所有的数据库备份信息
SELECT database_name,recovery_model,name, backup_finish_date,type FROM msdb.dbo.backupset
如:本人刚才操作了两次数据完整备份和一次事务日志备份,查询结果如下,
type为D表示数据备份,L表示事务日志备份:
再次强调:数据恢复的前提条件中修改备份模式以及强制做一次完整的数据和事务日志备份,是我们在出现问题之前必须做过的操作,否则就没有什么恢复可言了。
现在我们模拟做一下误操作:
--模拟误操作 2022-11-23 14.25 开始的误操作,记一下误操作事件,以便后续演示数据恢复
--本意删除张三2的,但是条件不当,将不该删除的数据也删除了
delete from UserInfo where nickname='小张';
insert into UserInfo values (110,'错误数据','小错误');
--不小心新建了一个表格
select * into UserInfo2 from UserInfo;
现在我们比对一下误操作前后数据
出现误操作之后,具体恢复步骤如下:
出现误操作后,我们需要切断其他用户对数据库在进行操作产生数据,造成更大的问题,因此需要先将数据库限制为单个用户访问,与外界隔绝开。
具体操作如下:
当我们将限制访问设置为【SINGLE_USER】后,我们会发现 数据库后面会附加上【单个用户】标志。
如果无法备份,则查询一下谁在占用:
SELECT * FROM sys.sysprocesses WHERE dbid=DB_ID('test')
然后使用kill 语句将占用者清除即可,如 kill 56,56代表占用者的spid
完成以上操作后,继续进行备份。
完成上述事务日志的备份后,我们就需要将数据进行还原。
还原完完整数据备份后,我们需要还原事务日志,因为数据库最终需要根据事务日志与完整备份的数据进行比对后进行数据的恢复操作。
至此,数据已经恢复成功。
将限制访问,从【SINGLE_USER】修改为【MULTI_USER】即可
到此这个数据恢复的完整流程结束。
数据库中的文件类型:
类型 | 作用 |
---|---|
mdf (primary data file) | 主要数据文件,数据库系统的可实时操作/读取的数据文件,也可作为物理备份文件使用 |
ndf (secondary data files) | 次要数据文件 |
ldf (Log data files) | 事务日志文件,用于记录数据库的事务日志信息 |
bak | 数据库备份文件 |
首先我们要了解 事务日志中,记录了数据库自创建之初数据库所有的操作日志。
例如:
2022-10-10 创建了数据库,此时我们第一次做了完整备份bak(包含数据+日志)
2022-10-11 我们又做了一次完整备份bak(包含数据+日志)
2022-10-12
因此我们需要做的第一个操作先还原2022-10-11的完整数据备份
然后还原2022-10-12 12:05事务日志备份,并且设置还原的时间点
最后数据库系统会根据完整数据以及事务日志备份和设置的还原时间点去恢复数据。
以上就是今天要分享的内容,希望以上内容可以帮助到你。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。