SQL Server数据误删恢复攻略:完整备份与第三方工具双重保障

创始人
2024-12-18 10:37:44
0 次浏览
0 评论

sqlserver数据库数据误删,请问有办法恢复吗?

SQLServer数据意外删除后的恢复策略通常基于两个关键原则。
如果满足前提条件,可以通过SQL语句实现简单的恢复。
否则,需要第三方工具。
前提条件1是在任何意外删除之前至少有一个数据库的完整备份。
前提条件2是数据库恢复模型是“完整”的。
如果满足先决条件1和2,则恢复过程分为三步:第一步:备份当前数据库的事务日志,语句为:BACKUPLOG[数据库名]TOdisk=N'备份文件名'WITHNORECOVERY。
步骤2:恢复意外删除之前的完整备份。
语句为:RESTOREDATABASE[数据库名]FROMDISK=N'完整备份文件名'WITHNORECOVERY,REPLACE。
第三步:将数据库恢复到误删除前的时间点。
语句为:RESTORELOG[database]FROMDISK=N'第一步日志备份文件名'WITHSTOPAT=N'误删除前的时间点',RECOVERY。

如果第一个条件不存在,只满足第二个条件,则需要使用第三方工具,例如“HiFormat数据恢复大师”。
步骤如下:第一步:打开“格式化数据恢复大师”,选择合适的恢复模式。
步骤2:选择删除前文件保存的位置,然后单击“开始扫描”。
第三步:扫描完成后,找到所需的文件,然后单击“恢复”。
第四步:设置文件保存路径并完成数据恢复。
如果不满足第二个条件,则无法进行数据恢复,因此确保数据库恢复模式设置为“Full”非常重要。

sqlserver删除数据错误能还原吗

1.如果LOG文件完整,则可以恢复。
但一般情况下,数据库的整个状态都会恢复到数据被意外删除之前的状态。
我们建议您备份当前的数据库。

2.SQL2008中提供了具体方法。
其他版本的SQLServer可能会参考该操作。

最常用的是日志队列备份恢复方法。
以下环境为2008R2。
此方法适用于2008及以上版本。
其实2005版本也可以用,2000版本很少用,没有测试过。
(SQL2008之前,可以使用第三方工具LogExploer。

步骤:

(1)检查数据库恢复模型,如图:

p>

或者使用脚本检查:

IFLECTrecovery_model,recovery_model_descFROMsys.databasesWHEREname='AdventureWorks'结果如下:

确保数据库恢复模型不能至少为[简单]。
如果不是完整模式,请将其更改为完整模式。
如果在编辑之前删除数据,则无法恢复。

(对于主要生产数据库环境,我们强烈建议使用【完全恢复模型】,尽管对于其他两种(BULK_LOGGED)、简单(SIMPLE)),生成的日志完全恢复模式会很大,但是当出现问题时,会觉得自己没什么)

(2)要求之前已经满足了至少一次完整备份。
由于所有备份类型均基于全备份,因此如果没有至少一次全备份,其他备份类型将无效。
因此,在创建新数据库后,强烈建议执行完整备份。

使用以下语句查看大约已备份的数据库:

SELECTdatabase_name,recovery_model,nameFROMmsdb.dbo.backupset

(3)确保其他人不再连接数据库,然后备份日志尾部:

首先创建一些数据:

/*使用这里以微软AdventureWorks示例数据库为例*/USEAdventureWorksGOIFOBJECT_ID('testRestore')ISNOTNULLDROPTABLEtestRestoreGOCREATETABLEtestRestore(idINTIDENTITY(1,1),NAMEVARCHAR(50));--输入测试数据:INSERTINTOtestRestore(Name)SELECT'test1'UNIONALLSELECT'test2'UNIONALLSELECT'test3'UNIONALLSELECT'test4'UNIONALLSELECT'test5'UNIONALLSELECT'test6'UNIONALLSELECT'test7'UNIONALLSELECT'test8'SELECT*FROMtestRestore检查结果:

然后进行删除操作来定位何时发生时,我添加了一个waitfor命令,使其在某个时间发生,以便恢复准确:

USEAdventureWorksGOWAITFORTIME'21:45'DELETEFROMdbo.testRes。

现在让我们看一下数据:

USEAdventureWorksGOSELECT*FROMdbo.testRestore

p>

《<<<<<<<<<<下面是重点key〉〉〉〉〉〉〉〉》

要备份注册表,最重要的是选择【备份日志尾部】

然后在【选项】页面选择:除【交易日志】外,其他红框内的地方强烈建议被检查。
并确保没有其他人连接到数据库,因为在备份日志结束时,数据库将被恢复并拒绝来自其他会话的连接。
如果不断开其他连接,则无法进行备份被执行。

按确定,您也可以使用上面的[脚本]来生成语句:

USEMasterGOBACKUPLOG[AdventureWorks]TODISK=N'E:\AdventureWorks.bak'WITHNO_TRUNCATE,NOFORMAT,NOINIT,NAME=N'AdventureWorks-事务日志备份'、跳过、NOREWIND、NOUNLOAD、NORECOVERY、压缩、STATS=10、CHECKSUMGOdeclare@backupSetIdasintselect@backupSetId=positionfrommsdb..backupsetwheredatabase_name=N'AdventureWorks'andbackup_set_id=(selectmax(backup_set_id)frommsdb..backupsetwheredatabase_name=N'AdventureWorks')if@backupSetIdisnullbeginraiserror(N'验证失败。
找不到数据库“AdventureWorks”的备份信息。
',16,1)endRESTOREVERIFYONLYFROMDISK=N'E:\AdventureWorks。
bak'WITHFILE=@backupSetId,NOUNLOAD,NOREWINDGO

此时数据库会处于【正在恢复】状态

如果发现无法进行备份,可以使用如下语句检查并终止spid:

SELECT*FROMsys.sysprocessesWHEREdbid=DB_ID('AdventureWorks')执行结果如下:

然后使用kill语句杀。

然后继续备份,然后恢复,如图。
首先恢复完整备份,选择最新的,那么只有最新的备份才会被识别选择最新的,否则无法恢复。

还有一个注意事项,记得选择如下图:

然后恢复日志文件,这是最重要的一步:

所以:

(图中数据在晚上10.20被删除,只需指定误删除之前的时间点即可)由于尾日志备份是最后一个备份文件,所以这里选择红色部分:

完成后点击确定,再次查看表数据已成功恢复。

******************************************************************************

摘要:

1。
方法看似有点繁琐,但实际操作起来并不算太难。

2.再次强调,首先备份您的本地环境。
无论失败的影响有多么严重,当时的情况都应该保留。
如果不是重要的生产数据,就忘记它。

3.建议严格遵循以上提示,在实际使用重要数据库之前,建议在正式操作前先在测试数据库中进行练习和了解。

进一步提醒,这种方法的缺点是:

1如果出错后有很多其他人执行了该操作,恢复后,其他人的操作数据会被删除,所以发生错误操作后,应该考虑停止其他人对数据库的操作。

2.该方法对于数据库必须是唯一的。
操作过程中,其他人无法使用和连接数据库。

sql数据库删除了怎么恢复数据

恢复sqlserver中误删除的数据并不困难,可以从事务日志中恢复。
不过,这种恢复需要两个前提条件:1、数据库在误删除之前至少有一份完整备份。
2.数据库恢复模式为“完整”。
对于这两个前提条件,会出现三种情况:情况一、如果这两个前提条件都存在,通过SQL语句只需三步就可以恢复(参考文章),不需要第三方工具。
a)备份当前数据库事务日志:backuplog[数据库名称]todisk=n'备份文件名'withnorecoveryb)恢复误删除前的全量备份:restoredatabase[数据库名称]fromdisk=n'完整备份文件名'withnorecovery,replacec)恢复将数据库恢复到误删除之前的时间点:restorelog[database]fromdisk=n'第一步日志备份文件的名称'withstopat=n'之前的时间点意外删除',恢复情况2.如果第一个先决条件不存在,则第二个先决条件存在并且需要使用第三方工具。
情况三:如果不满足第二个前提条件,则无法进行恢复。
因此,请确保将数据库恢复模式设置为“完整”。
我现在面临的是第二种情况,我必须寻找第三方工具。
我首先找的是logexplorerforsqlserver,它不支持sqlserver2008。
然后,我找到了sqllogrescue,它不支持sqlserver2008。
然后找到了systoolssqlrecovery,支持sqlserver2008,但是需要购买demo版本,没有数据恢复功能。
最后我在officerecovery.com找到了recoveryforsqlserver,虽然也是商业软件,需要购买,但是演示版只要数据库文件不超过24gb就可以恢复数据。
幸运的是,我朋友的数据库文件不大,我用它来恢复误删除的数据。
下面分享一下使用recoveryforsqlserver的恢复步骤:1.运行recoveryforsqlserver2.点击菜单中的file>recover,选择要恢复的数据库的数据文件(.mdf)3.next>next,进入恢复配置界面,选择自定义(选择您可以选择在自定义后从日志中恢复意外删除的数据)。
4、接下来进入恢复选项窗口,选择searchfordeletedrecords,选择要恢复的数据库的日志文件路径(logfilepath)。
5.接下来,选择目标文件夹(destinationfolder),该文件夹用于存放恢复过程中生成的sql语句和bat文件。
6、点击start开始恢复操作(在上一步选择的目标文件夹中生成对应的sql文件和bat文件),然后出现sqlserverdatabasecreationutility窗口。
7.接下来,选择存储恢复数据的目标数据库。
8.next,选择importavailiabledatafrombothdatabaseandlogfiles9.next,next,然后完成数据恢复!

sqlserver数据库数据被删除了怎么还原

在SQLServer中恢复意外删除的数据并不困难。
可以从事务日志中检索它们。
不过,这种恢复需要两个前提条件:1、数据库在误删除之前至少有一份完整备份。
2.数据库恢复模式为“Full”。
对于这两个前提条件,会出现三种情况:情况一、如果这两个前提条件都存在,通过SQL语句只需三步就可以恢复(参考文章),不需要第三方工具。
a)备份当前数据库的事务日志:BACKUPLOG[数据库名称]TOdisk=在备份文件名称中'WITHNORECOVERYb)恢复误删除之前的完整备份:RESTOREDATABASE[数据库名称]FROMDISK=在备份文件名称中'NORESTORE,REPLACEc)将数据库恢复到该点误删除前的时间点:RESTORELOG[database]FROMDISK=N第一步备份日志文件名'WITHSTOPAT=N'误删除前的时间点',RECOVERY场景2.如果第一步先决条件第一个不存在,则第二个先决条件存在,并且需要第三方工具。
情况三:如果不满足第二个前提条件,则无法进行恢复。
因此,请确保将数据库恢复模式设置为“完整”。
我现在面临的是第二种情况,我必须寻找第三方工具。
我首先找的是LogExplorerforSQLServer,它不支持SQLServer2008。
后来发现是SQLLogRescue,不支持SQLServer2008。
然后我找到了SysToolsSQLRecovery,它支持SQLServer2008,但是必须购买。
Demo版没有数据恢复功能。
最后我在officerecovery.com上找到了RecoveryforSQLServer,虽然也是商业软件,必须购买,但是Demo版只要数据库文件不超过24Gb就可以恢复数据。
幸运的是,我朋友的数据库文件不大,我用它来恢复误删除的数据。
让我们分解一下使用RecoveryforSQLServer进行恢复的步骤:1.运行RecoveryforSQLServer2.单击菜单上的“文件”>“恢复”,然后选择要恢复的数据库的数据文件(.mdf)3.下一步>下一步,进入恢复配置界面,选择自定义(选择您可以选择恢复误删除的数据选择自定义后注册)。
4、接下来进入恢复选项窗口,选择Searchfordeletedrecords并选择要恢复的数据库的日志文件路径(logfilepath)。
5.接下来,选择目标文件夹(DestinationFolder),该文件夹用于保存恢复过程中创建的SQL语句和bat文件。
6.单击“开始”,开始恢复操作(在上一步选择的目标文件夹中生成相应的SQL文件和Bat文件),然后出现“SQLServerDatabaseCreationUtility”窗口。
7.接下来,选择存储恢复数据的目标数据库。
8.下一步,选择从数据库和日志文件导入可用数据9.下一步,下一步,然后完成数据恢复!
热门文章
1
Python中的format()方法:字... formatformat在python中的含义2222.22E+00Format...

2
Python编程入门:全面解析Pytho... python的基本语法基本的Python语法如下:1.变量的定义。在编程语言中,...

3
Python爱心绘制教程:使用turtl... python的爱心代码教程(python画爱心代码)绘制心形的Python代码我...

4
Python字符串大小写转换方法全解析 python中字母的大小写转换怎么实现?在Python中,大小写转换由内置函数处...

5
Python字典:轻松获取最小值键与计算... python在一个字典里,返回值最小元素对应的键,救解在Python字典中,如果...

6
Python字符串去重空格:strip(... Python去除字符串中空格(删除指定字符)的3种方法在Python编程中,处理...

7
Python数组元素数量计算技巧分享 Python输出数组有多少个元素?简介:在本文中,首席CTO笔记将向您介绍Pyt...

8
简述python中pass的作用 pass语句的作用在许多编程语言中,包括Python;PASS语句用于在代码块中...

9
Python def 关键字详解:函数定... def是什么意思编程?戴夫是什么意思?def是Python中的函数定义关键字,用...

10
python不区分大小写的方法 Python字符串不区分大小写在Python中,字符串操作默认区分大小写。但有时...