sqlserver 误删数据库恢复
本文为转载
原文:https://blog.csdn.net/xwnxwn/article/details/53537841
由于长时间从事企业应用系统开发,前往用户现场升级、调试系统是比较常做的事情,但是就在周一,由于同事的失误在毫无知觉的情况下误删了生产数据库几乎所有的数据。当我发现的那一刻,感觉头发都立起来了,心想这他娘的是要领盒饭了。
为了迅速恢复系统的使用,在当时的情况下立即关闭相关系统的访问入口,前后共花费不到五分钟。经过思考,立即将最近的一次备份文件进行还原,从而保证了系统的正常运行,但是此举也不可避免的可能会丢掉某些数据。
另外事情已经发生,如何做才能为以后的数据恢复做准备呢,以下是自己的观点:
1、务必冷静,事情已经发生不可慌乱。
2、立即查看当前时间,最好能够精确到秒,并做记录。
3、应立即向直接上级反映此事,不可隐瞒,防止事态扩大。
4、如果权限允许,应当立即停止相关应用,防止有新的数据写入数据库。
事后一直不放心,当下次再出现这种情况的时候,该如何对数据进行数据恢复,尽可能的减小损失呢(做不到完全避免损失),因此从网上查阅大量资料并进行整理。
之前生产数据库使用的是sqlserver2000和2005,当时也出现过误删数据的情况,用Log Exlorer For SQL很轻松就恢复了数据,现在数据库升级到2012了这个工具无法使用了,因此只能采用其他办法,在此需要特别鸣谢CSDN一位大神的文章,网址:http://blog.csdn.net/dba_huangzj/article/details/8491327
原文是SQLSERVER2008R2,本次试验环境是2012版本。根据文章中过程的介绍,进行了整个过程的操作,但是还是未能一遍完成,现在在自己的操作过程中进行总结,并分享。
在此构建一个新的数据库模拟数据恢复全过程。
1、构建新数据库以及写入一些数据



2、做一次完整备份,这个是前提,没有一份完整备份文件是无法进行接下来的操作的。

注意:如上图所示,恢复模式一定要说完整,如果是其他类型那恐怕就没有下文了。一般来讲新建数据库的时候,默认不要去改恢复模式这个属性。
3、写入一条新数据

4、删除数据,让悲剧重现,记住此时要记录时间点,在现实中往往会由于慌乱忘记记录,但是希望看了这个文章之后能够记住此事。

好既然悲剧已经发生,也有了心理准备和恢复前准备,此刻最好看一下系统时间。接下来就要演示如何进行数据恢复。
5、做事务日志备份,做事务日志备份需要注意一下一点,如图所示

备份模式请选择事务日志,备份路径自行决定

进入选项,将可靠性第1、2勾选,事务日志选择第二个,压缩属性可以不选择.点击确定备份成功,此时数据库将显示为正在还原状态
注意:如果备份失败,请检查该数据库是否正在被占用,如果是请kill。
6、还原完整备份
数据库处于正在还原状态,右键数据库--任务--还原--文件和文件组,选择最近的一次完整备份。此时,需要在“选项”中选择第二种还原方式,具体如下图。
如上图,勾选完整数据备份文件。

如上图,恢复状态选择第二种,从字面意思就知道为什么要选择这种。
7、接着还原备份的事务日志
完整备份还原完毕,接着要对事务日志进行还原,右键数据库--任务--还原--事务日志,如下图:
还原事务日志的时候需要特别注意“时间点”这个设置,其他不需要设置。
时间点选择为误删数据的时间点之前就可以恢复出误删的数据,所以之前强调要查看一下时间。如下图所示

点击确定,在确定等待还原成功,数据库变成可用状态。此时后再查询,如下图:

如果查询发现数据不是你想要的,那么可以重复上述的操作,从备份事务日志开始,然后最后选择时间点的时候在缩小范围。
以上,完整的演示了个人在恢复数据过程中的总结。当然前提是允许这样干,当然大型电子商务系统、高并发系统应该不适用,肯定也不会出现误删数据的情况,都有对应的解决方案避免此类情况发生。
sqlserver 误删数据库恢复的更多相关文章
- SQLSERVER最简单的同名数据库恢复过程.
一. 冷备份恢复 1. net stop mssqlserver # 如果是安装的默认数据库实例 关闭 sqlserver的数据库 2. copy sqlserver的数据文件 主要是mdf 数据文件 ...
- 解剖SQLSERVER 第一篇 数据库恢复软件商的黑幕(有删减版)
解剖SQLSERVER 第一篇 数据库恢复软件商的黑幕(有删减版) 这一系列,我们一起来解剖SQLSERVER 在系列的第一篇文章里本人可能会得罪某些人,但是作为一位SQLSERVER MVP,在我 ...
- Sqlserver 数据库恢复常见错误及解决(网站转载 留着备用)
数据库恢复常见错误及解决 2009-04-13 11:25 1145人阅读 评论(0) 收藏 举报 数据库databasesqlserverusermicrosoftsql server 在sqlSe ...
- SqlServer 通过日志恢复数据库
前期工作 查看数据属性,确保下条件: 1.数据库属性->选项->恢复模式=完整 2.建好库以后.一个数据库完整的数据备份 3.到出事期间日志没有你间断 4.记录出事的准确时间 一.数据准备 ...
- SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法
SQLSERVER误删Windows登录用户验证方式使用Windows身份验证的解决方法 今天看到这篇文章:没有了SA密码,无法Windows集成身份登录,DBA怎么办? 想起来之前着急哥问我的一个问 ...
- SQLSERVER误删Windows登录用户
SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法 SQLSERVER误删Windows登录用户验证方式使用Windows身份验证的解决方法 今天看到这篇 ...
- 用友金蝶SQL数据库误格式化恢复 SQL数据库修复 SQL数据库恢复 工具 方法
用友金蝶SQL数据库误格式化恢复 SQL数据库修复 SQL数据库恢复 硬盘误格式化.重分区.重装操作系统覆盖 SQL数据解决方法 [客户名称]:贵州铜仁市开天驾驶人培训中心 [软件名称]:用友T3普及 ...
- sqlserver 附加数据库失败,错误提示:5拒绝访问 解决办法
sqlserver 附加数据库失败,错误提示:5拒绝访问 解决办法 金刚 sqlserver 附加数据库 拒绝访问 今天把项目拷贝到新硬盘里,发现在附加数据库中提示:操作系统错误5:"5拒绝 ...
- 从SQLSERVER/MYSQL数据库中随机取一条或者N条记录
从SQLSERVER/MYSQL数据库中随机取一条或者N条记录 很多人都知道使用rand()函数但是怎麽使用可能不是每个人都知道 建立测试表 USE [sss] GO ,NAME ) DEFAULT ...
随机推荐
- javascript学习笔记(六):对象、内置对象
创建对象 对象属性赋值的方式 <!DOCTYPE html> <html> <head lang="en"> <meta chaset=& ...
- weblogc SessionData.getNextId性能问题
参考:https://www.cnblogs.com/lemon-flm/p/7396627.html weblogic运行中持续报weblogic.servlet.internal.session. ...
- Python图片识别找坐标(appium通过识别图片点击坐标)
***如果只想了解图片相似度识别,直接看第一步即可 ***如果想了解appium根据图片识别点击坐标,需要看第一.二.三步 背景|在做UI测试时,发现iOS自定义的UI控件,appium识别不到. ...
- 算法之LOWB三人组之插入排序
插入排序 思想:类似于抽扑克牌,共有8张扑克牌,手里默认有一张,桌面上有7张,我们每次从桌面上抽一张和手里的牌进行比较,如果比手里的牌大,则直接放到手里的牌的后面,如果比手里的牌小,则放到手里的牌的前 ...
- VM虚拟机的配置文件(.vmx)损坏
为了禁用时间同步,使用sublime修改vmx文件 文件第一行为.encoding = "GBK" 修改完毕,无法打开虚拟机,报 VM虚拟机的配置文件(.vmx)损坏错误 因为su ...
- 【Django】ModuleNotFoundError: No module named 'books_ordersschool'
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x00000 ...
- Linux 字符设备驱动及一些简单的Linux知识
一.linux系统将设备分为3类:字符设备.块设备.网络设备 1.字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面向流的设备,常见 ...
- 恶性肿瘤预测Python程序(逻辑回归)
from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge,LogisticRegression from sklearn ...
- NumPy 从数值范围创建数组
NumPy 从数值范围创建数组 这一章节我们将学习如何从数值范围创建数组. numpy.arange numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下: ...
- String int 相互转换
String->int: int i = Integer.parseInt(s) int->String: String s = Integer.toString(i)