4

MS Access .mdb ファイルを使用するアプリケーションを配布しています。MS Access でファイルを開くと、ファイル サイズが大幅に縮小することに気付いた人がいます。これは、ファイルが圧縮に適していることを示していますが、ユーザーが圧縮を行うための手段は提供していません。

それで、私の質問は、それは問題ですか?気にしますか?ユーザーがデータベースを圧縮しないと、どのような問題が発生する可能性がありますか?

4

9 に答える 9

12

データベースを小さくするだけでなく、テーブルのインデックスを再計算し、テーブルを最適化してアクセスを高速化します。また、Access のバグやクラッシュが原因で発生する可能性がある、データベースで発生するはずのない不整合も検出されます。

ただし、完全にリスクがないわけではありません。Access 2007 のバグにより、プロセス中にデータベースが削除されることがあります。

したがって、一般的には良いことですが、適切なバックアップルーチンと組み合わせてください. バックアップを作成すると、「回復不能」な圧縮および修復の問題から回復し、データ損失を最小限に抑えることができます。

于 2008-09-16T16:58:40.930 に答える
5

特にデータベース アプリケーションでレコードの更新、削除、挿入が頻繁に行われる場合は、定期的にデータベースを圧縮して修復してください。これにより、データベース ファイルのサイズが最小限に抑えられるだけでなく (データベース操作とネットワーク通信の高速化に役立ちます)、データベースのハウスキーピングも実行されるため、データの安定性にさらに大きなメリットがあります。ただし、データベースを圧縮する前に、圧縮で問題が発生した場合に備えて、ファイルのバックアップを作成してください。

Jet はデータベースを圧縮してファイル内のコンテンツを再編成し、データ、テーブル、またはインデックスに割り当てられた各 4 KB "ページ" (Access 95/97 の場合は 2KB) の領域が連続した領域に配置されるようにします。Jet は、削除済みとしてマークされたレコードからスペースを回復し、クラスター化されたインデックスのように、各テーブルのレコードを主キー順に書き換えます。これにより、データベースの読み取り/書き込み操作が高速になります。

Jet は、圧縮中にテーブルの統計情報も更新します。これには、各テーブルのレコード数の特定が含まれます。これにより、インデックスを使用するか、レコードが少ない場合はテーブル全体のスキャンを使用して、Jet が最適な方法でレコードをスキャンできるようになります。圧縮後、格納された各クエリを実行して、Jet がこれらの更新されたテーブル統計を使用して再最適化するようにします。これにより、クエリのパフォーマンスが向上します。

Access 2000、2002、2003、および 2007 は、必要に応じて圧縮と修復操作を組み合わせます。修理プロセス:

1 - 不完全なトランザクションをクリーンアップします

2 - システム テーブルのデータを実際のテーブル、クエリ、およびインデックスのデータと比較し、誤りを修復します

3 - 複数ページのレコードへのポインターの紛失など、非常に単純なデータ構造の誤りを修復します (常に成功するとは限らず、破損した Access データベースを保存するために「修復」が常に機能するとは限らないのはそのためです)。

4 - VBA プロジェクトの構造に関する欠落情報を置き換えます

5 - フォーム、レポート、およびモジュールを開くために必要な不足している情報を置き換えます

6 - フォーム、レポート、およびモジュールの単純なオブジェクト構造の誤りを修復します

ユーザーがデータベースを圧縮/修復しない場合に発生する可能性のある悪いことは、肥大化によりデータベースが遅くなり、不安定になる可能性があることです。つまり、破損しています。

于 2008-09-16T17:54:03.713 に答える
4

Access データベース (MS JET データベースとも呼ばれます) の圧縮は、ハード ドライブの最適化に少し似ています。アクセス (または、より正確には、MS JET データベース エンジン) は、スペースの再利用にあまり適していません。そのため、レコードが更新、挿入、または削除されると、スペースが常に再利用されるとは限りません。代わりに、新しいスペースが追加されます。データベース ファイルの最後に付けられ、代わりに使用されます。

一般的な経験則では、[Access] データベースが書き込まれる (更新、変更、または追加される) 場合は、圧縮を許可する必要があります。そうしないと、サイズ大きくなります (追加したデータだけでなく、 、 それも)。

だから、あなたの質問に答えるには:

  • はい、問題ありません (データベースが読み取り専用でない限り)。
  • 気にする必要があります (ユーザーのディスク容量を気にしない場合を除きます)。
  • Access データベースを圧縮しないと、時間の経過とともにデータベース内のデータが示唆するよりもはるかに大きくなり、パフォーマンスが低下し、エラーや破損の可能性が高まります。(ファイルベースのデータベースであるため、Access データベース ファイルは、特にネットワーク経由でアクセスした場合に、破損することで有名です。)

ADO を使用して Microsoft Access データベースを圧縮する方法に関するこの記事は、この機能をアプリに追加する場合の出発点として役立ちます。

于 2008-09-16T17:24:59.010 に答える
1

ネイトに反論する: 古いバージョンでは、データベースが壊れていました。そのため、適切なバックアップ体制が不可欠です。それを自動的に行うために、アプリに何もコーディングしません。ただし、顧客がデータベースの実行速度が非常に遅いことに気付いた場合、必要に応じて技術サポート担当者がそれについて説明することができます (もちろん、適切なバックアップが必要です)。

データベースが非常に大きくなり、圧縮が必要になり始めている場合は、MS-SQL に移行する時期かもしれません。

于 2008-09-16T17:40:13.653 に答える
1

データベースを圧縮する方法をユーザーに提供します。圧縮すると 60 ~ 80 メガバイトに縮小されるときに、データベースが 600 メガバイト以上に成長するのを見てきました。

于 2008-09-16T16:58:36.577 に答える
0

また、アプリケーションのVistaDB(http://www.vistadb.net/)またはSQL Compact(http://www.microsoft.com/sql/editions/compact/ )を調べることを強くお勧めします。これらはあなたのアプリにぴったりではないかもしれません...しかし一見の価値があります。

于 2008-09-16T17:36:10.480 に答える
0

ほとんどの場合、Access データベース ファイルは時間の経過とともに破損することがわかりました。それらを圧縮して修復すると、しばらくそれを抑えることができます。

于 2008-09-16T16:57:53.477 に答える
0

それは本当に重要です!mdb ファイルは、耐えられないサイズに達するまで、データを操作するたびにサイズが大きくなり続けます。ただし、インターフェイスを介して圧縮メソッドを提供する必要はありません。次のコードを mdb ファイルに追加して、ファイルを閉じるたびに圧縮することができます。

Application.SetOption (「自動圧縮」), 1

于 2008-09-16T17:26:45.607 に答える
-1

ユーザーに解凍方法を提供せず、そもそも生のサイズが問題にならない場合は、気にしないでください。

于 2008-09-16T16:56:06.037 に答える