1

我有一个包含 23 亿行和 76GB 大小的大型数据库。

我的问题是我想将列类型转换为smalldatetime但在此操作期间 .ldf 文件变得如此之大以至于占用了我的整个磁盘空间(它达到了 350gb)然后查询退出并出现错误。

有什么办法可以让 .ldf 变小吗?

我从选项中缩小了我的 .ldf。

数据库恢复模式设置为简单。

4

2 回答 2

3

添加一个新的 smalldatetime 类型的可为空列。然后慢慢地(例如,10-100k 行的批次)通过根据旧列值设置其值来填充该列。一旦所有行在新列中都有值,删除旧行并将新行重命名为旧行名称。

这将确保没有事务变得大到足以严重影响您的日志文件。

于 2013-01-15T22:33:47.143 回答
0

这是最终代码:我现在运行它,所以明天我会知道它是否 100% 好,但它似乎可以工作

 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
于 2013-01-16T01:24:41.400 回答