更改列的数据类型会填充事务日志

Ale*_*don 3 sql-server-2008 sql-server alter-table transaction-log

运行此代码:

ALTER TABLE npidata
ALTER COLUMN npi varchar(20)
Run Code Online (Sandbox Code Playgroud)

给出这个错误:

消息 9002,级别 17,状态 4,第 2 行
数据库“SalesDWH”的事务日志已满。要找出无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列

我正在将NPI列的数据类型从更改varchar(80)varchar(20)

下面的代码给了我同样的错误信息:

insert into npidata1 select * from npidata
Run Code Online (Sandbox Code Playgroud)
  • log_reuse_wait_desc 显示 NOTHING
  • 恢复模式是 SIMPLE
  • autogrowth 被设定为 NONE
  • autoshrink 被设定为 true

我还可以做些什么?我的理解是日志应该在每次变得太大时截断。我究竟做错了什么?

Rem*_*anu 5

您要做的第一件事就是将 AUTOSHRINK 更改为false. 绝对没有理由拥有它true。请参阅自动收缩:将其关闭.

您尝试的两种操作都需要在单个事务中更新数据大小。单个事务需要那么多日志,与恢复模型无关。您必须增加日志大小以适应您的事务。