限制SQL Server日志文件的增长率

时间:2013-01-15 22:30:11

标签: sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012

我有一个23亿行,大小为76GB的大型数据库。

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

有没有办法让.ldf变小?

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

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

2 个答案:

答案 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