2012-03-30 10 views
1

私は約6Gbのデータベースで作業しています。すべての非ユニコード列をユニコードに変換する必要があります。すべてのvarcharをnvarcharに変更します。非常に大きなデータベースファイルを引き起こすデータ型を変更するためのテーブルを変更

ALTER TABLE mytable ALTER COLUMN mycolumn nvarchar(...)のようなALTER文を使用してスクリプトを作成しましたが、後でデータベースサイズが大きく増加することがわかりました。 .mdfファイルは70Gb以上になり、私を驚かせました。私はユニコードがvarcharのx2倍のスペースを取っていることを知っていますが、データベースがすべてvarcharで変換されたとしても、最大サイズは12Gbと予想されます。

私はそれが未割り当て領域だったかどうかを確認するために、データベースとファイルを縮小しようとしたが、この持っていたほとんど効果とsp_spaceusedは、未割り当て領域の過剰量がないことを示しました。

データベースが非常に大きくなった理由を知っている人はいますか?私はこれが何を引き起こしたのか理解したいと思っています。

以前のデータベースからスクリプトを作成し、すべてのデータをインポートする新しいデータベースを作成し、その結果が1Gbのサイズの増加であったため、列データ型をUnicodeに変更できました。列データ型はこのような成長を引き起こしました。

答えて

5

拡大したサイズがログファイルにあるかどうか確認しましたか?これが問題の場合は、dbのバックアップを作成して切り捨てます。これが最も可能性の高い問題です。

+0

返信ありがとうございます。残念ながら、それは.mdfファイルではなく、.ldfファイル大規模に成長している。 – Stefg

+0

テーブルに低い充填率のインデックスがクラスタ化されているかどうかを確認します。いくつかの大きなものでDBCC DBREINDEXを作成し、結果を確認してください。 nvarcharが非常に大きく、塗りつぶし係数が低い場合は、テーブル用に多くのスペアスペースを確保できます。これは、clusterd索引にのみ適用されます。 – JotaBe

+0

あなたは正しかったJotaBe ...それはログファイルでした!私はデータベースの復元に間違いを犯し、ログファイルをデータファイルがあったディレクトリとログディレクトリのデータファイルに入れました。それでそれを説明すると、私は2つのファイルを混乱させていました。ご協力いただき誠にありがとうございます。 – Stefg

1

このように増加すると、大きなオーバーヘッドが発生します。 SQLは内部的に列のコピーを作成しているため、増やすことができます。しかし、実際には70GBが大きすぎます

また、割り当てられたまたは実際のデータサイズは約70GBですか? に違いがあります。あなたのデータベースファイルの自動拡張プロパティを確認してください。数GBまたは非常に大きなパーセンテージが設定されていれば、それは説明されます

+0

ディエゴに感謝します。私はそれを確認しましたが、自動成長は10MBでしたが、データとログファイルで間違いを犯しました。それが、ログファイルではなく成長していたデータファイルだと私に信じさせた混乱でした。 – Stefg

関連する問題