我有一个用于 Web 服务器上的开发和测试目的的数据库。我想做的是在包含大约 50,000 条记录的表中添加一列(请注意,我不是数据库管理员)。我正在通过 SSMS 使用我们的提供商提供的凭据进行连接并执行下一个查询
ALTER TABLE MyTable
ADD MyCol BIT
CONSTRAINT MyConstraint DEFAULT 1 NOT NULL
我得到的错误是:
消息 9002,级别 17,状态 4,第 2 行
数据库“my_db”的事务日志已满。要找出日志中的空间不能被重用的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列
如果我执行
SELECT log_reuse_wait_desc, *
FROM sys.databases WHERE name ='my_db'
GO
与 Add MyCol 一起批处理时,log_reuse_wait_desc 将是 ACTIVE_TRANSACTION。如果我将其作为单独的命令执行,它将是 CHECKPOINT
数据库的恢复模式设置为简单。我在互联网上搜索了一个解决方案,人们要么建议将恢复模式设置为简单(已经是),要么备份一个日志文件然后缩小它,一些专家认为这是非常糟糕的做法。
那么我需要做什么才能将简单的 NOT NULL 列添加到包含数据的表中?
编辑:这是解决方案,如果有人不想通读所有答案:
要获取事务日志的大小,我是这样做的:
sp_helpdb 'YouDatabaseName'
在结果窗口中,您将获得日志文件的大小(我的是 8MB)。要将其增加到更大的值,请使用以下查询:
ALTER DATABASE YourDatabaseName
MODIFY FILE(NAME = YourDatabaseLogName, SIZE=128MB);
GO
并且错误将消失。