2009-06-18 9 views
0

SQL Server 2005データベースから大きなバイナリ列を削除するには、結果の.mdfおよび.ldfファイルのサイズを最小限に抑えるにはどうすればよいでしょうか?SQL Server 2005で大量のデータを削除する

私たちのアプリは、ユーザーが自分の文書をアップロードできるようにするために使用されました。これらは、文書テーブルの列にBLOBとして格納されていました。時間が経つにつれ、この表はデータベース全体のサイズの90%を超えて増加しました。

私たちはこれまで以上に文書を保存したり変更したりしています。私は今この列のデータをゼロにしてデータベースを管理可能なサイズに戻したいと思っています(ディスク容量はわずかです)。従来のアプリであるため、互換性を維持してテーブルの構造を変更しないようにしたいと考えています。

最も明白な方法のような何かを行うことです。

update documents set content = 0x0

をしかし、膨大な量で.LDFを吹き飛ばすようです。特定の症状に対処

、私はその後、(backup log mydb with truncate_only)ログを切り捨てるか、おそらくdbcc shrinkdatabase(mydb)またはdbcc shrinkfile(mydb_log, 20)を試みるが、私はこれらの厄介な断片化などを引き起こす可能性があり、長期的には最高ではないかもしれません聞いていたかもしれないのどちらか。

の内容がの列以外のすべてを含む2番目の表を作成し、データをコピーしてから最初にtruncateにコピーする方がよいでしょうか?

どのような考えにも感謝します。

乾杯

答えて

0

はい、最初のマイナスコンテンツのカラムから2番目のテーブルを作成するために、あなたのアイデアは、元の表は、おそらく最も効率的である切り捨てます。

2

が列落としてみてください:実験から

ALTER TABLE foo 
DROP COLUMN foo.name 
+1

他の場所が必要な場合は、ログ – jle

+0

を切り捨てて(nullで)列を再作成してください – pkmiec

0

を、これに特効薬はないようです。

どちらの提案でも、.ldfサイズが大幅に増加することなく大容量のコンテンツを削除できますが、後で.mdfのサイズを縮小する唯一の方法は、ページの断片化を犠牲にするdbcc shrinkdatabaseのようなものです。

関連する問題