【问题标题】:Restore SQL Server DB without transaction log在没有事务日志的情况下还原 SQL Server DB
【发布时间】:2011-12-07 10:24:35
【问题描述】:

给定一个 SQL Server 2008 .bak 文件,有没有办法从 .bak 文件中恢复 data file only无需事务记录

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

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

我需要一种方法来告诉 SQL Server 只恢复 .bak 文件中的数据,而不是事务日志。有什么办法吗?

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

【问题讨论】:

  • 作为后期说明,恢复时间也是一个问题,特别是如果您正在对数据库进行开发和手动测试并定期更换它们

标签: sql-server restore transaction-log


【解决方案1】:

事务日志是备份的一个组成部分。您不能告诉 SQL Server 忽略事务日志,因为我们无法同时恢复和缩小事务日志文件。但是,您可以查看DBA post 来破解该过程,尽管根本不建议这样做

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

免责声明:我作为支持工程师在 ApexSQL 工作

【讨论】:

    【解决方案2】:

    不,需要事务日志。

    选项 1:

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

    选项 2:

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

    关于缩小日志文件命令的文档是available here

    【讨论】:

    • 谢谢。我无法对 .bak 文件做任何事情,所以猜测这将是找到一台有足够磁盘空间的机器的情况。
    • 出于兴趣,有人知道为什么 MS 没有提供仅恢复数据而不是事务日志的选项吗?我认为恢复的数据库中的 TL 如此大的唯一原因是 .bak 文件必须包含一个标志,上面写着“请在恢复时为 TL 保留这么多空间”,而且似乎没有恢复过程原则上不应忽略此类标志的逻辑原因。所以我很好奇为什么没有那个选项。对于我的特定 .bak 文件,TL 所需的空间是 50GB,尽管这几乎完全是空白空间。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        这是我所做的:--

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

        重启服务。

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

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

        分离数据库。

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

        单击恢复,它应该将其全部恢复,而不会损坏日志文件。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多