是否可以使用 SQL Server 2017 进行部分事务日志备份?我没有足够的磁盘空间来进行完整备份

sdo*_*ble 6 sql-server sql-server-2017

继承数据库服务器进行维护,发现事务日志为92GB。我的计划是对其进行备份并将其恢复到正常大小,然后修复它。问题是我的计算机上没有足够的磁盘空间来进行本地备份,然后卸载。有没有一种方法可以运行指定大小或时间段的备份,以便我可以分阶段进行?

Jos*_*ell 20

不,您不能进行部分日志备份来将这项工作拆分为多个文件。

能做什么取决于你的目标。

  • 如果您需要维护日志备份链,您唯一的选择是配置更多存储(本地或通过网络共享)并执行完整的日志备份
  • 如果您不需要维护日志备份链,并且您的目标只是将此文件恢复到可管理的大小,那么您有多种选择。不过,您需要做的要点是:
    • “截断”事务日志(通过切换到简单恢复模型,或执行备份日志TO DISK = 'NUL',或者可能进行许多其他操作)
    • 将日志文件缩小到适合您的工作负载的大小(使用SHRINKFILE命令)
    • 如果您切换到 SIMPLE 恢复模式,您应该立即切换回 FULL*
    • 无论您采取上述截断方法如何,您都需要通过进行完整备份然后进行日志备份来重新初始化备份链,以便在恢复方面恢复良好状态

*顺便说一句,如果您故意不进行日志备份,并且不打算开始,则应该将数据库保留在简单恢复模型中。否则日志文件将再次增长。


Aar*_*and 16

假设这是一个独立实例并且数据库不是 AG 的一部分,您应该能够放弃当前日志链并重新开始,方法是:

  • 切换到简单恢复模式
  • CHECKPOINT;两次
  • DBCC SHRINKFILE(filename, 1);
  • ALTER DATABASE db MODIFY FILE(name = filename, size = <some appropriate size>);
    • 如果我希望文件很大,我通常会分多个步骤执行此操作 - 例如首先到 4GB,然后到 8GB,等等。
    • 您不想让文件变得很小,这只意味着它必须再次增长,并且日志文件的增长是昂贵且具有破坏性的
  • 切换回完全恢复模式
  • 进行完整备份
  • 创建足够定期进行日志备份的计划,以便这种情况不会再次发生,并且您保持在 RPO/RTO 范围内,但不要太频繁,以免您需要管理数千个日志文件
  • 找到一些磁盘空间,您可以在不在这台机器上进行备份...如果该机器消失并带走您的数据库和您在本地进行的备份,那么备份就没有多大意义
  • 完整阅读这篇文章:


AMt*_*two 10

不,不存在“部分事务日志备份”的概念。

您是否需要维护事务日志链以进行恢复,或者保留 92GB 的事务日志备份?

如果您只想摆脱它并重新开始,并且可以自信地说“我不需要执行时间点恢复到现在之前的时间点!” 然后你就可以重新开始了。

您可以通过备份到 NUL 来有效地丢弃整个内容:

BACKUP DATABASE MyDatabaseWithHugeTLog
    TO DISK = 'NUL:'; --Sends it to nowhere
Run Code Online (Sandbox Code Playgroud)

然后你就可以缩小事务日志以使其不那么大:

USE MyDatabaseWithHugeTLog
DBCC SHRINKFILE(MyDatabaseWithHugeTLog_Log,10000);
Run Code Online (Sandbox Code Playgroud)

请注意,您可能需要多次备份/收缩/备份/收缩才能将日志缩小到所需的大小。有效地缩小日志只会删除文件的尾部,因此如果有一部分正在使用,您可能需要将该活动部分环绕到开头以缩小到所需的大小。

然后,您就破坏了执行时间点恢复的能力,因为我们将日志发送到NUL. 因此,您需要进行全新的完整备份或差异备份,以便为将来的恢复提供一个起点。

BACKUP DATABASE MyDatabaseWithHugeTLog
    TO DISK \\SomeServer\MyBackupShare\MyDatabaseWithHugeTLog_YYYYMMDD_HHMISSMS;
Run Code Online (Sandbox Code Playgroud)


小智 0

您可以备份到网络驱动器。