MS Access .mdb ファイルを使用するアプリケーションを配布しています。MS Access でファイルを開くと、ファイル サイズが大幅に縮小することに気付いた人がいます。これは、ファイルが圧縮に適していることを示していますが、ユーザーが圧縮を行うための手段は提供していません。
それで、私の質問は、それは問題ですか?気にしますか?ユーザーがデータベースを圧縮しないと、どのような問題が発生する可能性がありますか?
MS Access .mdb ファイルを使用するアプリケーションを配布しています。MS Access でファイルを開くと、ファイル サイズが大幅に縮小することに気付いた人がいます。これは、ファイルが圧縮に適していることを示していますが、ユーザーが圧縮を行うための手段は提供していません。
それで、私の質問は、それは問題ですか?気にしますか?ユーザーがデータベースを圧縮しないと、どのような問題が発生する可能性がありますか?
データベースを小さくするだけでなく、テーブルのインデックスを再計算し、テーブルを最適化してアクセスを高速化します。また、Access のバグやクラッシュが原因で発生する可能性がある、データベースで発生するはずのない不整合も検出されます。
ただし、完全にリスクがないわけではありません。Access 2007 のバグにより、プロセス中にデータベースが削除されることがあります。
したがって、一般的には良いことですが、適切なバックアップルーチンと組み合わせてください. バックアップを作成すると、「回復不能」な圧縮および修復の問題から回復し、データ損失を最小限に抑えることができます。
特にデータベース アプリケーションでレコードの更新、削除、挿入が頻繁に行われる場合は、定期的にデータベースを圧縮して修復してください。これにより、データベース ファイルのサイズが最小限に抑えられるだけでなく (データベース操作とネットワーク通信の高速化に役立ちます)、データベースのハウスキーピングも実行されるため、データの安定性にさらに大きなメリットがあります。ただし、データベースを圧縮する前に、圧縮で問題が発生した場合に備えて、ファイルのバックアップを作成してください。
Jet はデータベースを圧縮してファイル内のコンテンツを再編成し、データ、テーブル、またはインデックスに割り当てられた各 4 KB "ページ" (Access 95/97 の場合は 2KB) の領域が連続した領域に配置されるようにします。Jet は、削除済みとしてマークされたレコードからスペースを回復し、クラスター化されたインデックスのように、各テーブルのレコードを主キー順に書き換えます。これにより、データベースの読み取り/書き込み操作が高速になります。
Jet は、圧縮中にテーブルの統計情報も更新します。これには、各テーブルのレコード数の特定が含まれます。これにより、インデックスを使用するか、レコードが少ない場合はテーブル全体のスキャンを使用して、Jet が最適な方法でレコードをスキャンできるようになります。圧縮後、格納された各クエリを実行して、Jet がこれらの更新されたテーブル統計を使用して再最適化するようにします。これにより、クエリのパフォーマンスが向上します。
Access 2000、2002、2003、および 2007 は、必要に応じて圧縮と修復操作を組み合わせます。修理プロセス:
1 - 不完全なトランザクションをクリーンアップします
2 - システム テーブルのデータを実際のテーブル、クエリ、およびインデックスのデータと比較し、誤りを修復します
3 - 複数ページのレコードへのポインターの紛失など、非常に単純なデータ構造の誤りを修復します (常に成功するとは限らず、破損した Access データベースを保存するために「修復」が常に機能するとは限らないのはそのためです)。
4 - VBA プロジェクトの構造に関する欠落情報を置き換えます
5 - フォーム、レポート、およびモジュールを開くために必要な不足している情報を置き換えます
6 - フォーム、レポート、およびモジュールの単純なオブジェクト構造の誤りを修復します
ユーザーがデータベースを圧縮/修復しない場合に発生する可能性のある悪いことは、肥大化によりデータベースが遅くなり、不安定になる可能性があることです。つまり、破損しています。
Access データベース (MS JET データベースとも呼ばれます) の圧縮は、ハード ドライブの最適化に少し似ています。アクセス (または、より正確には、MS JET データベース エンジン) は、スペースの再利用にあまり適していません。そのため、レコードが更新、挿入、または削除されると、スペースが常に再利用されるとは限りません。代わりに、新しいスペースが追加されます。データベース ファイルの最後に付けられ、代わりに使用されます。
一般的な経験則では、[Access] データベースが書き込まれる (更新、変更、または追加される) 場合は、圧縮を許可する必要があります。そうしないと、サイズが大きくなります (追加したデータだけでなく、 、 それも)。
だから、あなたの質問に答えるには:
ADO を使用して Microsoft Access データベースを圧縮する方法に関するこの記事は、この機能をアプリに追加する場合の出発点として役立ちます。
ネイトに反論する: 古いバージョンでは、データベースが壊れていました。そのため、適切なバックアップ体制が不可欠です。それを自動的に行うために、アプリに何もコーディングしません。ただし、顧客がデータベースの実行速度が非常に遅いことに気付いた場合、必要に応じて技術サポート担当者がそれについて説明することができます (もちろん、適切なバックアップが必要です)。
データベースが非常に大きくなり、圧縮が必要になり始めている場合は、MS-SQL に移行する時期かもしれません。
データベースを圧縮する方法をユーザーに提供します。圧縮すると 60 ~ 80 メガバイトに縮小されるときに、データベースが 600 メガバイト以上に成長するのを見てきました。
また、アプリケーションのVistaDB(http://www.vistadb.net/)またはSQL Compact(http://www.microsoft.com/sql/editions/compact/ )を調べることを強くお勧めします。これらはあなたのアプリにぴったりではないかもしれません...しかし一見の価値があります。
ほとんどの場合、Access データベース ファイルは時間の経過とともに破損することがわかりました。それらを圧縮して修復すると、しばらくそれを抑えることができます。
それは本当に重要です!mdb ファイルは、耐えられないサイズに達するまで、データを操作するたびにサイズが大きくなり続けます。ただし、インターフェイスを介して圧縮メソッドを提供する必要はありません。次のコードを mdb ファイルに追加して、ファイルを閉じるたびに圧縮することができます。
Application.SetOption (「自動圧縮」), 1
ユーザーに解凍方法を提供せず、そもそも生のサイズが問題にならない場合は、気にしないでください。