MS Access .mdb ファイルの圧縮を考慮する必要があるのはなぜですか?
-
09-06-2019 - |
質問
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 - フォーム、レポート、モジュールの単純なオブジェクト構造の間違いを修復します。
ユーザーが DB を圧縮/修復しない場合に起こる可能性がある悪いことは、肥大化により DB が遅くなり、不安定になる可能性、つまり破損する可能性があることです。
Access データベース (MS JET データベースとも呼ばれる) の圧縮は、ハード ドライブの最適化に似ています。Access (より正確には、MS JET データベース エンジン) は、スペースの再利用があまり得意ではありません。そのため、レコードが更新、挿入、または削除されたときに、スペースが必ずしも再利用されるわけではありません。代わりに、新しいスペースが追加されます。データベース ファイルの最後に挿入され、代わりに使用されます。
一般的な経験則として、[Access] データベースに書き込む (更新、変更、または追加する) 場合は、圧縮を許可する必要があります。それ以外の場合は、圧縮を許可する必要があります。 意思 サイズが大きくなります (追加したデータだけではありません)。
したがって、あなたの質問に答えるには:
- はい、それは重要です (データベースが読み取り専用でない限り)。
- あなたは気にする必要があります(あなたがそうでない限り) しないでください ユーザーのディスク容量に注意してください)。
- Access データベースを圧縮しないと、時間が経つにつれて、内部のデータが示すよりもはるかに大きくなり、パフォーマンスが低下し、エラーや破損が発生する可能性が高まります。(ファイル ベースのデータベースである Access データベース ファイルは、特にネットワーク経由でアクセスした場合に破損することで有名です。)
この記事について ADO を使用して Microsoft Access データベースを圧縮する方法 この機能をアプリに追加する場合は、これが良い出発点となります。
私はユーザーにデータベースを圧縮する方法を提案したいと思います。圧縮によってデータベースが 60 ~ 80 メガバイトに削減されるのに、データベースが 600 メガバイト以上に増加するのを見たことがあります。
ネイトにエコーするには:古いバージョンではデータベースが破損したことがあります。そのため、適切なバックアップ体制が不可欠です。それを自動的に行うためにアプリに何もコードを書き込むつもりはありません。ただし、顧客がデータベースの動作が非常に遅いと感じた場合は、必要に応じてテクニカル サポート担当者が問題について話し合うことができます (もちろん、適切なバックアップを使用します)。
ただし、データベースが非常に大きくなり、圧縮が必要になり始めた場合は、MS-SQL に移行する時期が来たかもしれません。
ユーザーに解凍方法を提供しておらず、そもそも生のサイズが問題ではない場合は、気にする必要はありません。
Access データベース ファイルは、時間の経過とともにほとんどの場合破損することがわかりました。圧縮して修復すると、しばらくの間この問題を防ぐことができます。
まあ、それは本当に重要です!mdb ファイルのサイズは、データを操作するたびに増加し続け、耐えられないサイズに達します。ただし、インターフェイスを通じて圧縮メソッドを提供する必要はありません。mdb ファイルに次のコードを追加すると、ファイルを閉じるたびにファイルが圧縮されるようになります。
Application.SetOption (「自動コンパクト」)、1
私もそうします 非常に VistaDB を調べることをお勧めします (http://www.vistadb.net/) または SQL Compact(http://www.microsoft.com/sql/editions/compact/) あなたのアプリケーションのために。これらはあなたのアプリには適していない可能性があります...しかし、間違いなく一見の価値があります。