54

给定一个SQL Server 2008 .bak文件,有没有办法只从文件中恢复数据文件.bak而不需要事务日志

我问的原因是这个数据库的事务日志文件大小很大——超过了我随时可用的磁盘空间。

我对交易日志不感兴趣,对任何未完成的交易也不感兴趣。通常,一旦我恢复了数据库,我就会简单地将日志缩小到零。但是,当我没有足够的磁盘空间来创建日志时,这无济于事。

我需要的是一种方法来告诉 SQL Server 只从.bak文件中恢复数据,而不是事务日志。有没有办法做到这一点?

请注意,我无法控制.bak文件的生成——它来自外部来源。.bak在生成文件之前收缩事务日志不是一种选择。

4

5 回答 5

9

事务日志是备份的一个组成部分。您不能告诉 SQL Server 忽略事务日志,因为我们无法同时恢复和缩小事务日志文件。但是,您可以查看DBA 帖子来破解该过程,尽管完全不推荐

或者,您可以尝试一些第三方工具进行恢复,特别是可以节省大量空间和时间的虚拟恢复过程。查看ApexSQL 还原、RedGate 虚拟还原、Idera 虚拟数据库。

免责声明:我为 ApexSQL 工作,担任支持工程师

于 2014-02-07T21:00:50.590 回答
7

不,事务日志是必需的。

选项1:

一个选项可能是将其还原到您确实有足够空间的机器上。然后在恢复的副本上将日志记录更改为批量记录或简单,缩小日志,在这个新副本上执行另一个备份操作,然后使用它来恢复到具有现在小得多的事务日志的目标机器。

选项 2:

或者,外部来源的联系人可能会在将事务日志发送给您之前缩小事务日志(如果由于大量大事务而导致日志很大,这可能不起作用)。

有关缩小日志文件的命令的文档可在此处获得

于 2011-12-07T13:44:49.453 回答
4

对于 ServerFault 或 DBA 站点来说,这确实是一个问题,但简短的回答是否定的,您只能恢复完整的 .bak 文件(撇开文件组或零碎恢复等“奇异”场景)。您没有说“巨大”是什么意思,但是磁盘空间很便宜;如果添加更多确实不是一种选择,那么您需要找到另一种从外部来源获取数据的方法。

于 2011-12-07T13:33:18.507 回答
2

这可能不起作用,因为您无法控制 .bak 文件的生成,但如果您可以说服您的来源分离数据库,然后直接向您发送 .mdf 文件的副本,您可以附加 .mdf 和您的服务器会自动创建一个新的空事务日志文件。

请参阅 sp_detach_db 和 sp_attach_db(或 CREATE DATABASE database_name FOR ATTACH,具体取决于您的 sql server 版本)。

于 2013-08-26T21:02:46.027 回答
0

我现在知道这是一个旧线程,但是当我遇到事务日志损坏问题时,我偶然发现了它,这就是我在没有任何数据丢失的情况下解决它的方法(虽然我确实有停机时间!)

这是我所做的:--

停止 sql server 实例服务 复制受影响的数据库 .mdf 文件和 .ldf 文件(如果您有 .ndf 文件,也复制它!) - 可以肯定的是,如果没有,您可以随时将它们放回去不适合你。

重新启动服务。

登录 sql management studio 并将数据库模式更改为简单,然后进行完整备份。

再次更改数据库类型并再次进行完整备份,然后进行事务日志备份。

分离数据库。

右键单击数据库并单击还原,从下拉列表中选择数据库名称,选择稍后创建的完整数据库备份(不是从简单模式中获取的备份),并选择事务日志备份。

单击还原,它应该将其全部恢复,而日志文件中没有任何损坏。

这对我有用,没有错误,之后我的备份都正常工作,并且没有更多的事务日志错误。

于 2016-05-27T16:00:32.347 回答