プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
初歩的な質問かもしれませんが、よろしくお願いします。

SQL Server 2000 を使用しています。
比較的大きいサイズのデータベース「A」があります。
Dataフォルダ内のサイズは次の通りです。
・A.mdf 50MB
・A_1.mdf 4.4GB
・A_log.ldf 1.2GB
この「A」を別の用途で使用したいため、全てのテーブルのデータを削除しましたが、Dataフォルダ内のサイズがほとんど変わりません。
プロパティのデータベースの圧縮で見ると、空き容量が98%と表示されているので、無駄な領域が多いのは分かるのですが、実際に圧縮をかけても小さくなりませんでした。
方法が悪いのかもしれませんので、データベースを圧縮する手順を教えて頂ければ幸いです。
よろしくお願いします。

A 回答 (3件)

データベースの圧縮はデータベースファイルとトランザクションログファイルを合わせて処理するはずですので、まずトランザクションログをバックアップします。


圧縮というのはファイルの末尾から行われるものなので、いくら空き容量が大きくても末尾の方が使われていたら圧縮できません。トランザクションログのポインタは通常末尾にあります。

本当はお勧めではないですが、ログが1.2GBと大きいですし、ログの中身は不要のようですから、クエリアナライザで
BACKUP LOG (データベース) WITH TRUNCATE_ONLYを実行してもいいかと思います。ただし、ログを切り捨てるこのオプションは将来バージョンではサポートされなくなります。
実行後に圧縮を掛けてみてください。

圧縮をするときに「圧縮する前にページをファイルの先頭に移動する」にチェックを入れて実行してみてください。

余談ですが、トランザクションログについては、もし不要ならばデタッチして削除する方法もあります。

この回答への補足

回答ありがとうございます。
早速教えて頂いたクエリ実行後、圧縮してみました。
すると、
・A_1.mdf 4.4GB → 2GB
・A_log.ldf 1.2GB → 1GB
まで小さくなりましたが、まだ大きい状態です。
そこで改めてプロパティを確認したところ、
・A_1.mdfの「割り当てた領域(MB)」→2000
・A_log.ldfの「割り当てた領域(MB)」→1000
となっていました。
もしかすると、昔「A」を作成したときの設定がこうなっていたのかもしれませんが、この「割り当てた領域」を縮小することは可能でしょうか?もし方法がございましたら教えてください。

補足日時:2008/08/08 12:08
    • good
    • 0

やり方としては問題ありません。


ファイルの圧縮はファイルを個別に圧縮するDBCC SHRINKFILEの機能で、こちらで圧縮することもよくあります。
    • good
    • 0
この回答へのお礼

何度も回答を頂き、大変感謝いたします。
今回は大変勉強させて頂きました。
本当にありがとうございました。

お礼日時:2008/08/11 16:28

圧縮をするときに「圧縮する前にページをファイルの先頭に移動する」にチェックを入れて実行したんですよね。


であれば、DBCC SHIRINKDATABASEには、NOTRUNCATEとTRUNCATE_ONLYの2種類があって、私の理解ではチェックを入れれば両方やってくれるはずだったのですが。。
念のためチェックを入れて圧縮、チェックを入れないで圧縮をそれぞれ1回ずつやってみてもらえますか(割り当てた領域も本来は小さくなるはずです)

この回答への補足

なんとか小さくすることは出来ました。

1.データベースを右クリック→「すべてのタスク」→「データベース圧縮」を選択
2.「圧縮操作」の「圧縮する前にページをファイルの先頭に移動する」にチェック
3.「OK」を押す
この手順ではじめやってましたが、No.1の回答補足のサイズが限界でした。(2のチェックを入れないバージョンも試してみましたが同じでした)

しかし、上記手順1,2の後に
3.「ファイルの圧縮」欄の「ファイル」ボタン選択
4.「圧縮操作」欄の「圧縮先のファイル」指定で、サイズを指定する。
この手順を加えたところ、4で指定したサイズ(50MB)まで小さくなりました。

手順的にいかがでしょうか^^;
本当にお手数をおかけしてしまい申し訳ありませんm(_ _)m

補足日時:2008/08/08 19:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!