鉴于 SQL Server 2008 .bak
文件,是否可以从.bak
文件中恢复数据文件 没有交易日志?
我问的原因是这个数据库的事务日志文件大小很大 - 超出了我现有的磁盘空间。
我对交易日志没兴趣,对任何未完成的交易没兴趣。通常,我只是将日志缩小为零,一旦我恢复了数据库。但是,当我没有足够的磁盘空间来创建日志时,这无济于事。
我需要的是告诉SQL Server只恢复.bak
文件中的数据而不是事务日志的方法。有没有办法做到这一点?
请注意,我无法控制.bak
文件的生成 - 它来自外部源。在生成.bak
文件之前缩小事务日志不是一个选项。
答案 0 :(得分:9)
事务日志是备份的组成部分。您不能告诉SQL Server忽略事务日志,因为没有办法让我们说同时恢复和收缩事务日志文件。但是,你可以看看DBA post来破解这个过程,虽然不建议这样做
或者,您可以尝试使用某些第三方工具进行还原,尤其是可以节省大量空间和时间的虚拟还原过程。查看ApexSQL Restore,RedGate虚拟还原,Idera虚拟数据库。
免责声明:我为ApexSQL工作,担任支持工程师
答案 1 :(得分:7)
不,需要事务日志。
选项1:
选项可能是将其还原到您有足够空间的计算机上。然后在还原的副本上将日志记录更改为批量记录或简单,缩小日志,对此新副本执行另一个备份操作,然后使用该日志以使用现在小得多的事务日志还原到目标计算机。
选项2:
或者,也许外部源的联系人可能会在将事务日志发送给您之前缩小事务日志(如果由于大量事务而导致日志很大,这可能无效)。
缩小日志文件命令的文档为available here。
答案 2 :(得分:4)
对于ServerFault或DBA站点来说,这确实是一个问题,但简短的回答是“否”,您只能恢复完整的.bak文件(不考虑“奇异”场景,如文件组或零碎恢复)。你没有说“巨大”意味着什么,但磁盘空间便宜;如果真的添加更多不是一个选项,那么你需要找到一种从外部源获取数据的替代方法。
答案 3 :(得分:2)
这可能无效,因为您无法控制.bak文件的生成,但如果您可以说服您的源分离数据库然后直接向您发送.mdf文件的副本,则可以附加.mdf和您的服务器将自动创建一个新的空事务日志文件。
请参阅sp_detach_db和sp_attach_db(或CREATE DATABASE database_name FOR ATTACH,具体取决于您的sql server版本)。
答案 4 :(得分:0)
我知道这是一个旧线程,但是当我遇到事务日志损坏问题时,我偶然发现了它,这是我如何在没有任何数据丢失的情况下解决它(虽然我确实有停机时间!)
这是我做的: -
停止sql server实例服务 制作受影响的数据库.mdf文件和.ldf文件的副本(如果你有一个.ndf文件,也要复制它!) - 只是为了确保,如果它不起作用,你可以随时把它们放回去你。
重启服务。
登录sql management studio并将数据库模式更改为simple,然后进行完整备份。
再次更改数据库类型,再次进行完整备份,然后进行事务日志备份。
分离数据库。
右键单击数据库并单击“还原”,从下拉列表中选择数据库名称,选择后面创建的完整数据库备份(不是从简单模式中获取的备份),并选择事务日志备份。
单击“还原”,它应该将其全部放回,而不会在日志文件中出现任何损坏。
这对我没有任何错误,我的备份之后都正常工作,没有更多的事务日志错误。