如何恢复数据库

在本机操作,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

时间: 2024-09-16 21:42:11

如何恢复数据库的相关文章

Dell R710服务器磁盘恢复数据库一例(记录)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://koumm.blog.51cto.com/703525/1722703 现场环境有两台06年产早过保Dell R710服务器,RHEL5.4操作系统,一台应用服务器,一台Oracle数据库服务器,硬件配置,操作系统一样,独立阵列卡. 一次机房停电,空调不工作,机房服务器UPS供电,因温度太高纷纷关机\死机,数据库服务器关机并报黄灯. E1000 Failsafe voltage

没有数据库日志文件恢复数据库方法两则

恢复|数据|数据库 方法一 1.新建一个同名的数据库 2.再停掉sql server(注意不要分离数据库) 3.用原数据库的数据文件覆盖掉这个新建的数据库 4.再重启sql server 5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名) 6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用 数据库的脚本创建一个新的数据库,并将数据导进去就行了. USE MASTERGOSP_CONFIGURE ALLOW UPDATES,1

sqlserver2005没有log日志文件时恢复数据库的方法

SQLServer2005数据库日志文件损坏的情况下如何恢复数据库呢?下面我们来详细分析... 在某些偶然的情况下, 会引起SQL Server 2005数据库日志文件的损坏,比如:硬件故障.计算机非正常重启或关机. 当SQL Server 2005数据库日志文件损坏时,可能会出现以下情况: 1.在SQL Server Management Studio中显示数据库处于置疑(suspect)状态. 2.事件日志可能会出现如下错误信息:Could not redo log record (2173

使用一个新的名称来恢复数据库

可以通过使用新名称的方式来获得数据库的恢复,这往往能够满足商业的需要.当使用不同名称来恢复数据库的时候,你将不得不设置数据库中每一个文件的新位置.如果你早先不知道数据库中有哪些文件,可以运行RESTORE FILELISTONLY声明来获得数据库文件的数量和名称.运行RESTORE FILELISTONLY可以为你提供文件的信息,比如文件的逻辑名称.物理名称.文件是数据文件还是日志文件等.接着,执行RESTORE DATABASE声明,包括数据库的新名称.将要存储的文件备份.如果你要处理日志文件

没有日志,只有MDF文件如何恢复数据库

恢复|数据|数据库 由于种种原因,我们如果当时仅仅备份了mdf文件,那么恢复起来就是一件很麻烦的事情了. 如果您的mdf文件是当前数据库产生的,那么很侥幸,也许你使用sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但是会出现类似下面的提示信息 设备激活错误.物理文件名 'C:\Program Files\Microsoft SQL Server\MSSQL\data\test_Log.LDF' 可能有误. 已创建名为 'C:\Program Files

Oracle RMAN还原与恢复讲解(四)如何在非归档模式中还原与恢复数据库

如果数据库在noarchivelog模式下,我们将从完全的脱机备份中恢复这个数据库,并且不可能实现时间点恢复. 1.还原的准备工作 如果在noarchivelog 模式中运行数据库并且假定拥有数据库的一个备份,就可以非常容易地执行数据库的完全恢复. 首先要清理所有的数据文件,以及旧的重做日志和控制文件. 虽然不是一定要这么做,但由于使用了noarchivelog模式,我们希望一切从头开始. 清理完数据文件,控制文件和重做日志后,就可以开始启动恢复进程. 首先,可以从最近生成的备份中恢复控制文件,

Oracle 10g中用RMAN恢复数据库功能增强

我们知道在Oracle 10g R2以前的版本中,如果使用RMAN恢复数据库,临时表空间的临时文件是不会自动恢复的. 这曾经引发了一系列的麻烦,很多DBA在恢复完成之后忘记添加临时文件,经常到应用出错时才能发现. 从Oracle 10g R2开始,使用RMAN恢复数据库之后,Oracle会自动重新创建临时文件,由于临时文件是Sparse File,所以创建会非常迅速,通常你不会感觉得到. 以下是我曾经恢复的一段日志,其中记录了Oracle的恢复处理过程: Thu Sep 14 22:52:06

asp.net 备份和恢复数据库的方法

 这篇文章主要介绍了asp.net 备份和恢复数据库的方法示例,需要的朋友可以参考下    代码如下: /**********************************************************************************    *  * 功能说明:备份和恢复SQL Server数据库  * 作者: 刘功勋;  * 版本:V0.1(C#2.0);时间:2007-1-1  * 当使用SQL Server时,请引用 COM组件中的,SQLDMO.dll

mysql字符集导致恢复数据库报错问题解决办法

恢复数据库报错:由于字符集问题,最原始的数据库默认编码是latin1,新备份的数据库的编码是utf8,因此导致恢复错误. [root@hk byrd]# /usr/local/mysql/bin/mysql -uroot -p'admin' t4x < /tmp/11x-B-2014-06-18.sql ERROR 1064 (42000) at line 292: You have an error in your SQL syntax; check the manual that corre

SQL Server 2005恢复数据库详细图文教程_mssql2005

不少需要用到sql2005的程序,有很多新手还是会操作,这里写个详细的图文教程送个菜鸟们,高手请飘过.适用于独立主机的朋友使用,如果你还没安装,请按照这个教程来安装 SQL Server 2005图文安装教程,超详细 下面是SQL Server 2005恢复数据库的详细过程 1:打开SQL Server Management Studio并登录,这个一般在开始--程序里面找到 2:鼠标右键单击数据库--新建数据库 3:弹出来的框里,填写数据库名称,我这里填写的是sqlqtdy,这个根据自己需求来