如何恢复数据库

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

在本机操作,Debug的时候,一切似乎都在掌控之中。可是提交到服务器之后,一切显地都无比陌生。因为不熟悉SQL,准确来说就只会点Select,Update,Delete,Insert而已。昨天不小心误删了一张数据不多但是不在人工处理范围内的一张表内的数据。

因为知道SQL Server是有日志这种东西的,事后我表现地无比淡定,在事发一个小时以内。一个小时之后,我发现我无法掌控这一事件了。

上网查找了恢复数据的办法。有必要啰嗦一下。

 

问题1:

无论是远程端还是服务器端,都无法对数据库(假设数据库叫Test)进行除‘增删查改’的其它操作,譬如分离,脱机,还原...错误提示是

e.g.1 “无法分离 Test 数据库 因为它当前正在使用。”

e.g.2 “因为数据库正在使用,未获得对数据的排他访问权,操作异常终止”

反正嘛,就是说你丫不能阻止别人的访问。可我们就是要这样做的...只好跟它说拜拜了。

 

说拜拜的方法就是关掉所有访问数据库Test的进程。

复制代码
createproc  killspid (@dbnamevarchar(20))
as
begin
declare@sqlnvarchar(500)
declare@spidint
set@sql='declare getspid cursor for select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec(@sql)
open getspid
fetchnextfrom getspid into@spid
while@@fetch_status<>-1
begin
exec('kill '+@spid)
fetchnextfrom getspid into@spid
end
close getspid
deallocate getspid
end

--用法
use master
exec killspid '数据库名'
复制代码

PS:

代码我是这样理解的,定义一段杀死访问数据库进程的存储过程。写一段获取进程ID的代码,循环杀死每一个进程。最后调用存储过程。

虽然不了解存储过程,但是意思就是这样的吧。

问题2:

没有备份数据库,那该如何恢复数据呢

有个软件叫做Log Explorer 这个东西可以根据数据库的日志回到过去的任何一个时刻。

View Code

Log Explorer for SQL Server 是个好东西,但是这根本无法解决我的问题。数据库在服务器端,学校根本不会让我安装一个软件在服务器上面。而且我证实过,这个软件必须要在服务器端装服务器端软件的。所以,这个对于我来说,是泡汤的。但是不代表这不是一个利器。

 

最后我用了一个很蛋疼的方法解决了。

1.分离数据库,备份一个Test;

2.将数据库附加回去,用自带的恢复方式恢复到一个很久以前的状态;

3.将需要的那张表复制到备份的那个数据库;

4.将备份的那个数据库挂回去,原数据库删了。

 

这是一个很蛋疼而且碰巧那张表没被改的方法。

头一次知道DBA的重要性。

我的方法是一个很偶然的东西,希望大家分享一下真正能解决恢复问题的办法。当然,每隔一段时间备份是绝对没有错的。

 

方法

  另外发现一个比较有技术性的可行的方法

  1,如果误操作之前存在一个全库备份(或已有多个差异备份或增量备份),首先要做的事就是进进行一次日志备份

  (如果为了不让日志文件变大而置trunc. log on chkpt.选项为1那你就死翘了)

    backup log dbName to disk='fileName'

----注意:是日志备份!

  2,恢复一个全库备份,注意需要使用with norecovery,如果还有其他差异或增量备份,则逐个恢复
    

restore database dbName from disk='fileName' with norecovery


3,恢复最后一个日志备份即刚做的日志备份,指定恢复时间点到误操作之前的时刻
    

restore log dbName from disk='fileName'
with stopat='date_time'

 

完整代码

View Code

  经过验证,这才叫有技术性!我那纯属“邓艾的屯‘田’”小孩子过家家。。。

 

参考的资料:

http://blog.163.com/liushui19860112@126/blog/static/132373046201052841232492/

http://blog.csdn.net/voyage_mh1987/article/details/4133798

http://kenwu.blog.hexun.com/32603385_d.html

本文转自 Ron Ngai 博客园博客,原文链接:http://www.cnblogs.com/rond/archive/2012/02/28/2372502.html  ,如需转载请自行联系原作者

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
人工智能 自然语言处理 BI
草料二维码表单功能:轻松收集和管理数据
表单作为草料二维码的高级功能之一,可用于收集格式统一的数据。你可以通过组合姓名、图片、检查项等组件搭建出电子表单,关联到二维码中,扫码填写表单即可更快速、规范的收集数据。 这些数据保存在账号下形成动态档案,可以导出Excel或PDF进行存档;也可以根据企业要求自定义PDF导出格式。
496 2
|
存储 编译器 数据库
【C/C++ 数据结构 】线索二叉树全解析:从数学原理到C++实现
【C/C++ 数据结构 】线索二叉树全解析:从数学原理到C++实现
352 0
|
机器学习/深度学习 数据采集 算法
Machine Learning机器学习之随机森林(Random Forests)
Machine Learning机器学习之随机森林(Random Forests)
|
自动驾驶 物联网 5G
波束跟踪技术在5G中的重要性及其应用
波束跟踪技术在5G中的重要性及其应用
304 0
|
自然语言处理 编译器 程序员
【Qt底层之 元对象的编译】Qt 元对象系统及其编译流程解析
【Qt底层之 元对象的编译】Qt 元对象系统及其编译流程解析
765 4
|
存储 自然语言处理 数据挖掘
VOC数据洞察在淘宝详情页的应用与实践
VOC数据洞察在淘宝详情页的应用与实践
562 0
|
消息中间件 运维 中间件
阿里开源消息中间件RocketMQ的前世今生
昨天,我们将分布式消息中间件RocketMQ捐赠给了开源软件基金会Apache。 孵化成功后,RocketMQ或将成为国内首个互联网中间件在Apache上的顶级项目。
16491 119
|
供应链 算法 搜索推荐
商业分析:SheIn是怎样成功的?
SheIn,中文名希音。听名字你可能以为这是一家外国公司,实际上这是一家中国公司,总部在南京,主营业务是跨境女装电商,销售市场都在国外。2021年的销售额超过1000亿人民币,目前估值为500亿美金。
1286 0
商业分析:SheIn是怎样成功的?
|
存储 JSON 定位技术
城市POI数据爬取-百度地图版
目前百度地图的最新版为地图检索V2.0服务。详细介绍可以通过开发文档-web服务Api-地点检索V2.0获取。
|
存储 缓存 算法
【操作系统--MMU内存管理单元】Linux环境下C语言详解(附代码)
【操作系统--MMU内存管理单元】Linux环境下C语言详解(附代码)
463 0