SQL Server数据误删恢复攻略:完整备份与第三方工具双重保障
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.下一步,下一步,然后完成数据恢复!
相关文章

免费Python自学网站盘点:新手入门到...
2024-12-17 02:47:13
Python数组操作技巧:冒号与逗号使用...
2025-01-28 23:54:25
Python高阶内置函数详解与实战技巧
2025-01-06 09:58:53
Python编程:判断5位正整数是否为回...
2025-02-03 15:35:36
Python strfind()详解:轻...
2025-01-11 15:57:43
Python为何不采用switch语句:...
2024-12-17 02:10:07
Python time库:时间操作与格式...
2025-01-12 22:21:49
Python函数全解析:从定义到调用,一...
2024-12-17 00:29:20
Python字符串操作47法全解析:掌握...
2025-03-28 04:02:56