太坑了,我把数据给删了

“大坑啊,数据被我误删了。”从事数据库相关工作的过程中,我想应该很多人会有过和我一样的遭遇吧?尤其是在进行update或者delete操作的时候,忘记了where条件。这些毁灭性的操作,足以使你不能淡定。然后就开始到baidu、csdn、csblogs等等找恢复方案。网上呢,也是众说纷纭,一时间,你又崩溃了。这个时候要学会淡定,否则,会让你心碎的。

幸好,还可以数据恢复

出现这类问题之后,我们的目的就是想找回误操作之前的数据,在SSMS2008之前,有个很出名的工具LogExploer,但是好像是收费的(反正,我是对收费的工具,都是避而远之)。除了这之外,我们还可以使用日志备份的功能,来完成数据恢复。

下面我们来讲解用日志备份的方法来恢复数据(有图有真相哦)。

准备工作:

1.运行下面的代码,创建RecoverDemo数据库,和TestTable表。

1 USE [RecoverDemo]
 2 GO
 3 /****** Object:  Table [dbo].[TestTable]    Script Date: 10/22/2014 17:00:36 ******/
 4 SET ANSI_NULLS ON
 5 GO
 6 SET QUOTED_IDENTIFIER ON
 7 GO
 8 SET ANSI_PADDING ON
 9 GO
10 CREATE TABLE [dbo].[TestTable](
11     [A] [varchar](50) NULL
12 ) ON [PRIMARY]
13 GO
14 SET ANSI_PADDING OFF
15 GO
16 INSERT [dbo].[TestTable] ([A]) VALUES (N'a1')
17 INSERT [dbo].[TestTable] ([A]) VALUES (N'a2')
18 INSERT [dbo].[TestTable] ([A]) VALUES (N'a3')
19 INSERT [dbo].[TestTable] ([A]) VALUES (N'a4')
20 INSERT [dbo].[TestTable] ([A]) VALUES (N'a5')
21 INSERT [dbo].[TestTable] ([A]) VALUES (N'a6')
22 INSERT [dbo].[TestTable] ([A]) VALUES (N'a7')
23 INSERT [dbo].[TestTable] ([A]) VALUES (N'a8')
24 INSERT [dbo].[TestTable] ([A]) VALUES (N'a9')
25 INSERT [dbo].[TestTable] ([A]) VALUES (N'a10')

2.然后做一次完整备份,至于步骤就没必要说了吧。(恢复数据的前提是,该数据库至少做过一次完整备份)

提示:因为所有类型的备份都是基于完整备份的,如果没有至少一次的完整备份,其他的备份都是多余的,所以一定要在建完数据库后做一次完整备份。

3.确认数据库的恢复模式为完整。

sql server数据库还原 无日志文件 sqlserver日志恢复数据_SQL Server

sql server数据库还原 无日志文件 sqlserver日志恢复数据_数据_02

提示:在生产环境中,都强烈建议使用【完整恢复模式】,即使说相对于其他两中恢复模式,完整恢复模式产生的日志会很大,但是在出现问题的时候,这都不算什么了。

4.执行下面脚本,向TestTable中添加数据。

1 INSERT [dbo].[TestTable] ([A]) VALUES (N'a11')
 2 INSERT [dbo].[TestTable] ([A]) VALUES (N'a12')
 3 INSERT [dbo].[TestTable] ([A]) VALUES (N'a13')
 4 INSERT [dbo].[TestTable] ([A]) VALUES (N'a14')
 5 INSERT [dbo].[TestTable] ([A]) VALUES (N'a15')
 6 INSERT [dbo].[TestTable] ([A]) VALUES (N'a16')
 7 INSERT [dbo].[TestTable] ([A]) VALUES (N'a17')
 8 INSERT [dbo].[TestTable] ([A]) VALUES (N'a18')
 9 INSERT [dbo].[TestTable] ([A]) VALUES (N'a19')
10 INSERT [dbo].[TestTable] ([A]) VALUES (N'a20')

检查结果:select * from TestTable

sql server数据库还原 无日志文件 sqlserver日志恢复数据_数据_03

灾难发生了

1.我们误操作删除(delete from TestTable)了TestTable中的数据。

这个时候,你就该不淡定了。

别急!我们来恢复数据

之前的那些都算是抛砖引玉吧,接下来才是我们重点想讲述的。

1.做日志备份,记住一定要选择【备份日志尾部】。

sql server数据库还原 无日志文件 sqlserver日志恢复数据_数据_04

 

然后在【选项】中,严格按照红色框中的选择项进行勾选,否则,你可能会哭的。并且保证数据库不要有连接,因为有链接,日志备份是备份不了的。

sql server数据库还原 无日志文件 sqlserver日志恢复数据_SQL Server_05

2.日志备份后数据库会处于【正在还原状态...】

sql server数据库还原 无日志文件 sqlserver日志恢复数据_数据_06

日志备份后就可以进行数据还原了

3.先要还原完整备份,注意一定要选择最后那一次的完整备份,否则是还原不了的。

sql server数据库还原 无日志文件 sqlserver日志恢复数据_数据库_07

sql server数据库还原 无日志文件 sqlserver日志恢复数据_数据恢复_08

4.最后一步就是还原日志备份了,选择恢复的时间点不必太在意,只要填写你误操作之前的时间点,就可以了。

sql server数据库还原 无日志文件 sqlserver日志恢复数据_数据恢复_09

sql server数据库还原 无日志文件 sqlserver日志恢复数据_数据_10

sql server数据库还原 无日志文件 sqlserver日志恢复数据_恢复数据_11

哈哈,数据还原成功了。

sql server数据库还原 无日志文件 sqlserver日志恢复数据_数据库_12

 后事之师

1.在进行危险操作的的时候一定要,谨慎谨慎,以免造成不必要的麻烦。

2.一定要养成备份的习惯,千万不要因为嫌弃日志文件过于庞大,就将恢复模式设为【简单】,甚至是删除日志文件,到那个时候神仙恐怕也就不了你了。