1

私は 23 億行と 76 GB のサイズの大きなデータベースを持っています。

私の問題は、列の型をに変換したいのですsmalldatetimeが、この操作中に .ldf ファイルが大きくなりすぎてディスク領域全体 (最大 350 GB) が必要になり、クエリがエラーで終了することです。

.ldf を小さく保つ方法はありますか?

オプションから .ldf を縮小しました。

データベース復旧モデルはシンプルに設定されています。

4

2 に答える 2

3

smalldatetime 型の新しい null 許容列を追加します。次に、古い列の値に基づいて値を設定することにより、その列にゆっくりと (つまり、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 に答える