还原没有事务日志的SQL Server数据库

给定一个SQL Server 2008的.bak文件,有没有办法从.bak文件中恢复数据库而没有事务日志?

我问的原因是这个数据库的事务日志文件的大小是巨大的 – 超过了我已经可用的磁盘空间。 我对事务日志没有兴趣,对任何未完成的事务没有兴趣,所以通常我只是在恢复数据库时将日志缩小到零。 但是当我没有足够的磁盘空间来创build日志时,这并没有帮助。 我需要的是一种告诉SQL Server只从.bak文件中恢复数据的方法,而不是事务日志。 有没有办法做到这一点?

请注意,我无法控制.bak文件的生成 – 它来自外部源。 所以在生成.bak文件之前缩小事务日志不是一个选项。

这实际上是ServerFault或DBA站点的一个问题,但简短的回答是否定的,你只能恢复完整的.bak文件(抛开“异国情调”的情况,如文件组或零碎的恢复)。 你不说什么“巨大”的意思,但磁盘空间是便宜的; 如果添加更多真的不是一个选项,那么你需要find一个从外部来源获取数据的替代方法。

事务日志是备份的一个组成部分。 您不能告诉SQL Server忽略事务日志,因为没有办法让我们同时恢复和缩小事务日志文件。 不过,你可以看一下DBA的post来破解这个过程,尽pipe它不被推荐

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

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

不,交易日志是必需的。

选项1:

一个选项可能是将其恢复到您有足够空间的机器上。 然后在已还原的副本上将日志logging更改为批量日志logging或简单日志logging,收缩日志,在此新副本上执行另一个备份操作,然后使用该备份操作还原到目标计算机,并使用小得多的事务日志。

选项2:

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

关于收缩日志文件的命令的文档可以在这里find 。

这可能无法正常工作,因为您无法控制.bak文件的生成,但是如果您可以说服您的源代码分离数据库,然后直接向您发送.mdf文件的副本,则可以将.mdf和你的服务器会自动创build一个新的空的事务日志文件。

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

我知道这是一个古老的线程,但当我遇到事务性日志损坏问题时,我偶然发现了这个问题,这里是我如何避免任何数据丢失(虽然我确实有停机时间!)

这是我做的:

停止sql服务器实例服务复制受影响的数据库.mdf文件和.ldf文件(如果您有一个.ndf文件,也要复制该文件!) – 只要可以确定,如果它没有为你工作。

重新启动服务。

login到SQLpipe理工作室,并将数据库模式更改为简单,然后进行完整备份。

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

分离数据库。

右键单击数据库,然后单击还原,从下拉列表中select数据库名称,select以后创build的完整数据库备份(不是从简单模式中取得的),还可以select事务日志备份。

点击恢复,它应该把它放回日志文件没有任何损坏。

这工作对我来说没有任何错误,我的备份后来都正常工作,没有更多的事务日志错误。