就像“Nikita”建议的那样,您可以将恢复模式更改为简单,这样就不会在事务日志中跟踪更改......但是,如果这是一个生产数据库,您可能正在播放日志传送,或者???,这需要使用事务日志将更改复制到另一台服务器...如果是这种情况,那么您需要了解导致事务日志填满的原因,以及如何在不禁用事务日志的情况下进行补救.
听起来您正在使用 SSMS 进行更改,而更改的性质要求 SSMS:
- 从更改的表中删除所有外键、索引等
- 将表中的所有数据复制到#temp 表中
- 使用建议的更改创建一个新表
- 将#temp表中的所有数据复制到新创建的表中
- 丢弃旧表
- 将新表重命名为旧表的名称
- 重新创建所有索引、外键等。
SSMS 脚本插入BEGIN TRANSACTION
并COMMIT TRANSACTION
贯穿整个脚本,因此如果出现故障,希望您的表和数据不会被破坏。但是由于它还GO
在整个脚本中插入,因此错误可能会导致问题,特别是因为它所做的最后一件事是删除原始表,然后将新创建的表重命名为原始表名。
听起来事务日志在脚本完成运行之前已填满。如果您无法将生产数据库更改为简单的恢复模式(例如,因为它会中断日志传送等),那么您需要以一种不会填满事务日志的方式运行脚本。
我建议:
- 首先在没有 150 万行的开发/测试服务器上构建和测试脚本,以确保脚本完全按照您的意愿执行。
- 修改脚本并添加
COMMIT
关键位置,以便在脚本继续运行时可以回收事务日志中的空间。
- 一次将 100,000 条记录从 #temp 表复制回新创建的表,
COMMIT
每个块之间都有一个。
- 在生产环境运行之前,在开发/测试服务器上再次测试修改后的脚本。
- 在运行脚本之前备份您的生产数据库...