如何恢复使用SQL Server 2008意外删除的数据库?
这个链接回答了一些与此相关的常见问题:
SQL SERVER – 没有或有备份还原数据库 – 还原和备份的一切
标语是:
您需要完整备份来回滚您的更改。 如果您没有完整备份,则无法恢复。 抱歉。
你有备份吗? 如果是的话,从这里恢复。
如果没有,你没有更多的select。 MDF和LDF文件被删除(参见DROP DATABASE )
这会有点长,希望能够比其他答案丰富一点。
当你删除一个数据库时,它下面的文件不会被移动到回收站,它们实际上被删除了。 “已删除”表示删除了NTFS文件系统用于描述位置和长度的目录条目,就操作系统而言,这些文件所在的磁盘空间可用于任何目的。 其他文件可能写在那里,它会覆盖你想“回来”的数据。
有可能通过第三方反删除工具“恢复”数据和日志文件。 问题在于这些实用程序通常不会将文件恢复为原来的100%,因为数据可能已经写入了文件以前所在的磁盘区域。 如果系统在删除数据库后文件被删除后继续运行一段时间,则情况尤其如此。 (你最好的,但不是很好,下注之后立即closures系统,我猜这是没有发生的。)
如果这些文件没有被反删除实用程序正确地恢复,那么您的数据和/或数据库文件的内部结构将被损坏。 SQL Server可能会注意到这些文件重新联机(使用附加命令),然后将数据库标记为可疑。 你会马上回到你身边,没有一个工作的数据库。
即使SQL Server使数据库联机成功,这也不能保证您的数据没有被损坏。 在使用attach命令将一个可能不友好的数据库联机后,您应该首先执行DBCC CHECKDB()。 如果该命令运行时没有发现问题,那么您可能是确定的(并且应立即进行备份)。 更有可能发现无法修复的腐败现象。
如果你一定要把数据拿回来,互联网上的文章就会讨论各种各样的英雄,试图从腐败的数据库中提取尽可能多的非腐败数据。 你可以给他们一个镜头,或者打电话给一个专家,甚至是微软(他可能只是把你指向他们的合作伙伴)。
尽pipe从技术的angular度来看“英雄”是一件有趣的事情,但最好的办法是避免出现必须通过不寻常的方式来获取数据的情况。 (对于不全面pipe理数据库的人来说,这是真的(事实上是三重的))最简单的做法是定期备份数据,通过任何必要的方式来testing恢复过程。 磁盘空间看起来似乎很昂贵,直到您意识到通过第三方专家获取数据的成本有多高。
一个可能的解决scheme(这将只在立即完成时才起作用):
如果这不起作用,那么你唯一的select是联系一些专业的数据恢复公司。
如果意外删除的事务是在Begin事务中执行的并且没有提交,可以使用fn_dblog()函数进行恢复。 你可以应用下面的命令查看你的意外删除的数据。
SELECT [Current LSN], [Transaction ID], [Operation], [Context], [AllocUnitName] FROM fn_dbLog(NULL, NULL) WHERE [Operation] = 'LOP_DELETE_ROWS'
但是,这个过程太耗费时间。 这可以通过使用一个免费的SQL ldf查看器轻松完成,它将为您提供更合适的结果,并且只需点击几下即可恢复已删除的数据库logging。