有谁知道任何可以帮助恢复删除的表和存储过程的工具?
没有进行备份,并且此数据库意外与另一个数据库同步,并且在此数据库中创建的新表被删除。
谢谢
如果数据库处于完全恢复模式并且有事务日志备份或事务日志从未被截断,您可以尝试使用第三方日志阅读器,例如ApexSQL Log或SQL Log Rescue(免费但仅限 sql server 2000)。
用于读取事务日志的其他选项没有很好记录的功能 DBCC LOG。
如果存在完整的事务链,这意味着针对该表执行的先前 CREATE 或 ALTER 表仍在事务日志中的某处。不幸的是,如果您的事务日志非常大,尤其是没有第三方工具的情况下,找到这些信息并不是一件容易的事。
如果没有备份,您也可以从 SQL Server 日志中恢复删除的对象。
Select Convert(varchar(Max),Substring([RowLog Contents 0]
,33
,LEN([RowLog Contents 0]))) as [Script]
from fn_dblog(NULL,NULL)
Where [Operation]='LOP_DELETE_ROWS' And [Context]='LCX_MARK_AS_GHOST'
And [AllocUnitName]='sys.sysobjvalues.clst'
我搜索了“sql server restore drop table”并提出了一个有用的论坛答案。
http://www.eggheadcafe.com/community/aspnet/13/11519/are-you-sure-you-dont-ha.aspx
“在 SQL Server 中创建数据库时,默认设置为完全备份。因此,通过恢复事务备份,您的表应该可用。尝试通过右键单击数据库名称进入“恢复数据库”选项企业管理器并选择所有任务。”
不过,我确实质疑这是否会恢复表或仅恢复数据。
RedGate 有一些成本相当低的软件,称为“SQL Log Rescue”,应该可以帮助解决这个问题。查看此 SQL Server Central 文章: http ://www.sqlservercentral.com/articles/Product+Reviews/sqlrescuereview/2086/
编辑:RedGate 软件确实需要完整备份,所以这无济于事。我刚刚抓住了那个。
但也许事务日志会帮助您恢复表结构,即使它实际上无法恢复表本身。
你的数据库是哪种恢复模式?
简短的回答:如果没有备份,您就会丢失数据。这就是备份的全部意义所在。
长答案:如果恢复模式是完整的,并且您从未进行过完整备份,那么它实际上就像在简单恢复模式中一样运行。这意味着您不能进行事务日志备份,更糟糕的是:您的事务日志在每个检查点都被截断。这意味着即使您删除的表在事务日志中,它现在几乎肯定会被更新的事务覆盖并永远丢失。没有任何工具可以帮助你。
如果您了解 sql db 结构的内部结构,您可以使用 DBCC PAGE 进行取证,并希望这些范围尚未被其他对象数据覆盖,但这需要真正的专业知识 - 您可以聘请一位。您还可以检查您的表的事务日志记录是否已经被 fn_dblog() 覆盖(可能是)。您可以使用服务器端跟踪来确定删除表的确切时间。
底线:拥有自动备份是必不可少的。只有完全恢复模式才能启用时间点恢复,您可以使用它来将表恢复到 drop 命令之前的某个点。
这对我有用:
Select Convert(varchar(Max), Substring([RowLog Contents 0]
, 33
, LEN([RowLog Contents 0]))) as [Script]
from fn_dblog(NULL, NULL)
Where [Operation] = 'LOP_DELETE_ROWS' And [Context] = 'LCX_MARK_AS_GHOST'
And [AllocUnitName] = 'sys.sysobjvalues.clst'