我有一个23亿行,大小为76GB的大型数据库。
我的问题是我希望将列类型转换为smalldatetime
,但在此操作期间,.ldf文件变得如此之大以至于占用了我的整个磁盘空间(它达到了350gb)然后查询出口错误。
有没有办法让.ldf变小?
我从选项中缩小了我的.ldf。
数据库恢复模型设置为简单。
答案 0 :(得分:3)
添加smalldatetime类型的新可为空列。然后缓慢(例如,批量为10-100k行)通过基于旧列值设置其值来填充该列。一旦所有行在新列中都有值,请删除旧列并将新值重命名为旧列。
这将确保没有任何事务变得足以严重影响您的日志文件。
答案 1 :(得分:0)
这是最终代码: 我现在运行它所以我会知道它是100%好的tommorow,但它似乎工作
WHILE (2 > 1)
BEGIN
BEGIN TRANSACTION
UPDATE TOP ( 10000 ) [ais].[dbo].[imis position report]
SET [time2] = convert(smalldatetime, left(date, 19))
IF @@ROWCOUNT = 0
BEGIN
COMMIT TRANSACTION
BREAK
END
COMMIT TRANSACTION
-- 1 second delay
WAITFOR DELAY '00:00:01'
END -- WHILE
GO