データベースの圧縮について

このQ&Aのポイント
  • データベースの圧縮方法を教えてください
  • SQL Server 2000で大きいデータベースを圧縮する方法を知りたい
  • データベースの無駄な領域を圧縮する手順を教えてください
回答を見る
  • ベストアンサー

データベースの圧縮について

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

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

データベースの圧縮はデータベースファイルとトランザクションログファイルを合わせて処理するはずですので、まずトランザクションログをバックアップします。 圧縮というのはファイルの末尾から行われるものなので、いくら空き容量が大きくても末尾の方が使われていたら圧縮できません。トランザクションログのポインタは通常末尾にあります。 本当はお勧めではないですが、ログが1.2GBと大きいですし、ログの中身は不要のようですから、クエリアナライザで BACKUP LOG (データベース) WITH TRUNCATE_ONLYを実行してもいいかと思います。ただし、ログを切り捨てるこのオプションは将来バージョンではサポートされなくなります。 実行後に圧縮を掛けてみてください。 圧縮をするときに「圧縮する前にページをファイルの先頭に移動する」にチェックを入れて実行してみてください。 余談ですが、トランザクションログについては、もし不要ならばデタッチして削除する方法もあります。

chaozux
質問者

補足

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

その他の回答 (2)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

やり方としては問題ありません。 ファイルの圧縮はファイルを個別に圧縮するDBCC SHRINKFILEの機能で、こちらで圧縮することもよくあります。

chaozux
質問者

お礼

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

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

圧縮をするときに「圧縮する前にページをファイルの先頭に移動する」にチェックを入れて実行したんですよね。 であれば、DBCC SHIRINKDATABASEには、NOTRUNCATEとTRUNCATE_ONLYの2種類があって、私の理解ではチェックを入れれば両方やってくれるはずだったのですが。。 念のためチェックを入れて圧縮、チェックを入れないで圧縮をそれぞれ1回ずつやってみてもらえますか(割り当てた領域も本来は小さくなるはずです)

chaozux
質問者

補足

なんとか小さくすることは出来ました。 1.データベースを右クリック→「すべてのタスク」→「データベース圧縮」を選択 2.「圧縮操作」の「圧縮する前にページをファイルの先頭に移動する」にチェック 3.「OK」を押す この手順ではじめやってましたが、No.1の回答補足のサイズが限界でした。(2のチェックを入れないバージョンも試してみましたが同じでした) しかし、上記手順1,2の後に 3.「ファイルの圧縮」欄の「ファイル」ボタン選択 4.「圧縮操作」欄の「圧縮先のファイル」指定で、サイズを指定する。 この手順を加えたところ、4で指定したサイズ(50MB)まで小さくなりました。 手順的にいかがでしょうか^^; 本当にお手数をおかけしてしまい申し訳ありませんm(_ _)m

関連するQ&A

  • データ圧縮

    SQLServer2000にデータ量の大きなテーブルがあり、 そのデータ量を大幅に減らして、 圧縮をかけてもldfやmdfファイルは小さくなりませんでした。 圧縮前にページを先頭に移動や 個別に圧縮などをしてもファイルサイズは変わりませんでした。 圧縮をかける前になにかしないとデータ領域は小さくならないのでしょうか?

  • データベースのアタッチができなくなりました

    SQLServer2000 logデータを書き込む領域がなくなりましたというエラーメッセージが出ましたので、 logファイルを削除するためにデータベースをデタッチしました。 このときに何かのメッセージが出ましたが、強引にデタッチをしました。 logファイルを削除し、データベースをデタッチしようとしたところ、 「ログファイルとして指定したファイル名が間違っています。新しいログファイルが作成されます。続行しますか?」というメッセージが出ました。 「はい」を選択すると 「エラー 1813 新しいデータベース’データベース名’を開けませんでした。CREATE DATABASEは中断されます。デバイスアクティブ化エラー物理ファイル名’C:\Program Files\Microsoft SQL Server|MSSQL\Data\データベース名_log_LDFは正しくありません。’」 というメッセージが出て、アタッチに失敗してしまいます。 データベースを復元しましたが、logファイルが無いためか、一ヶ月以上前の時点までしか復元できません。 ldfファイルはありません。(ゴミ箱の中にも) mdfファイルは残っていますので何とかなると期待しています。 大変困っています。 どなたか解決方法をご存知でしょうか。 ご教授よろしくお願いいたします

  • SQLServer7.0のLDF圧縮

    お世話になってます。 あるサーバー(サーバーA)上のSQLServer7.0で作成したバックアップファイルを 復元先のサーバー(サーバーB)に復元したところ、MDFファイルが3GBに対し、 LDFファイルが100GBありました。 LDFファイルのサイズを圧縮しようと、SQLServer7.0のメニューで、    1. フルバックアップ  2. トランザクションログの切り捨て  3. 圧縮  ※以下「1.」、「2.」、「3.」を何度か繰り返し。 を行ってみましたが、300MB程度減っただけで、それ以上は小さくなりませんでした。  SHRINKDATABASE  や  TRUNCATE も試してみましたが、サイズ、変わりませんでした。 他に試すことはありますでしょうか?

  • SQL server 2005・メンテナンスプランに関する質問です。

    SQL server 2005・メンテナンスプランに関する質問です。 SQL server 2005において、メンテナンスプランで毎日データベースの圧縮と バックアップ、不要データの削除を行っています。 不要データ削除により、バックアップファイルは日に日に小さくなって おり、 メンテナンスプラン開始日より約7GB小さくなっているのですが、 肝心の データベース本体(mdfファイル)は全く小さくなっていません。 データベースを右クリックし、タスク-圧縮を選ぶと、使用可能な空き領域が 7GBと表示されるので、不要データの削除により空き領域は増えているもの の、メンテナンスプランの圧縮時にその空き領域の解放が行われていない ようです。 そこで、質問ですが、メンテナンスプランの圧縮タスクで空き領域を解放する には下記の設定以外に何か特別な設定が必要なのでしょうか? 圧縮後に残す空き領域は10%、解放された領域はオペレーティングシステム に返すよう設定しています。 ※SQLのログで気になるのは、圧縮のメンテナンスプランは毎日実行され、 正常に実行されましたと記述されているのですが、実行時間が数十秒しか かかっていないのです。 20GBのデータベースの圧縮で数十秒しかかかっていないというのは実際には 正常に実行されていないのでしょうか? よろしくお願いします。

  • *log.LDFもデータベースの容量に計算されますか。

    現在、SQL Server Express Edtion 2005を使って、開発を行っています。 このエディションの制限として、データベースの最大容量は4Gまでです。データベースの容量は*.mdfだけですか、*.mdfと*.LDFの合計となりますでしょうか。 ご存知の方は、ぜひ教えてください。

  • SQLserver2005より、SQLにて各データベースのプロパティに

    SQLserver2005より、SQLにて各データベースのプロパティにあるサイズと使用可能領域の値を取得したいのですが、そのようなSQLはありますでしょうか。

  • 【SQL Server2005】mdfファイルが壊れた後のトランザクションログバックアップ

    OS:Windows Server 2003、DB:SQL Server 2005 Developer Edition を使用しています。 データファイル:test.mdf、ログファイル:test_log.ldfでtestデータベースを構成後、SQL Serverサービスを停止し、test.mdfファイルの名前を変更、test.mdfが壊れたものと仮定します。 その後、SQL Serverサービスを起動すると、testデータベース上にmdfファイルが見つからないエラーが発生します。 この状態でトランザクションログを救出するため、SQL Server Management Studioでトランザクションログバックアップを実行させます。 しかし、この際、右クリックのメニューからバックアップを選択することができず、トランザクションログバックアップができません。 この状態でトランザクションログバックアップを行うにはどのようにすればよいのでしょうか。 どなたかご存知の方がいらっしゃれば教えてください。

  • Oracle7データベースの入っているフォルダを圧縮した際の問題について

    Windows NT4.0 SP3(Server)にてOracle7のデータベースの入っているフォルダを圧縮(フォルダのプロパティよりフォルダごと圧縮するにチェック)した場合にデータベースが壊れてアクセスできなくなることはありますか。 (Windowsの圧縮機能はファイルを壊すことがあると聞いたので不安になってます。) データベースにアクセスする時間が掛かる(レスポンスが悪くなる)ことは、承知の上です。

  • SQL Server 2000の物理ファイルデータ破損からの復旧について

    こんにちは。アべです。 SQL Server 2000の物理ファイルデータ破損からの復旧について アドバイスを頂きたいと思い、登校させて頂きました。 経緯 データベースサーバがOS毎、緊急停止し、故障しました。 DBサーバのファイルを他のサーバに接続して復旧をかけると 下記のようなエラーになり困っております。 現在は、バックアップもない状態であり、どうしても mdfファイルとldfファイルから復旧をかけたいと考えております。 何か他にやったほうがいい復旧手順や オプションはルのでしょうか? 何かアドバスがあればご教授をお願い致します。 壊れたところ以外のデータでも復旧できると助かります。 存在するファイルは、mdfファイルとldfファイルのみで、 バックアップありません。 すみませんが、宜しくお願い致します。 ↓やって見たこと アタッチを2000、2005(SP3)、2008(SP1)で実施してみましたが、失敗しました。 EXEC sp_attach_db @dbname = N'HOGE', @filename1 = N'F:\SQLData\HOGE\HOGEBACKData.mdf', @filename2 = N'F:\SQLData\HOGE\HOGEBACK_log.LDF' メッセージ 824、レベル 24、状態 6、行 1 SQL Server で、一貫性に基づいた論理 I/O エラーが検出されました: 正しくないページ (必要な署名: 0xaaaaaaaa、実際の署名: 0x3ee6da2a)。このエラーは、ファイル 'F:\SQLData\HOGE\HOGEBACK_log.LDF' のオフセット 0000000000000000 にあるデータベース ID が 0 のページ (0:0) の 読み取り 中に発生しました。SQL Server エラー ログまたはシステム イベント ログ内の別のメッセージで詳細情報が報告されることもあります。このエラー状態は深刻で、データベースの整合性を損なう可能性があるので、すぐに解決する必要があります。完全なデータベース一貫性確認 (DBCC CHECKDB) を実行してください。このエラーには多くの要因があります。詳細については、SQL Server Books Online を参照してください。 ↓ログをリビルドで復旧もやってみましたが、これも駄目でした。 CREATE DATABASE HOGE ON PRIMARY (FILENAME = 'F:\SQLData\HOGE\HOGEBACKData.mdf') FOR ATTACH_REBUILD_LOG ファイル アクティブ化エラー。物理ファイル名 "D:\DATA\SQLDATA\HOGEBACK_log.LDF" が正しくない可能性があります。 データベースが明確にシャットダウンされなかったので、ログを再構築できません。 メッセージ 1813、レベル 16、状態 2、行 1 新しいデータベース 'HOGE' を開けませんでした。CREATE DATABASE は中止されます。 以上

  • データベース復元時に指定する論理ファイル名とは?

    こんにちはtmgmです。 SQLServerのEnterpriseManagerにてデータベースを復元しようとする際に、設定の中で論理ファイル名と物理ファイル名(.mdf、.ldf)を決めますよね。物理ファイル名は実際にフォルダに格納されるいわば物理的なファイル(MDFファイルやLDFファイル)だというのはわかるんですが、論理ファイル名というのがいまいちわかりません。 論理ファイルというのはいったいなんなんでしょうか? お分かりになる方ご返答宜しく御願いします。