JDBC-ODBC ドライバーを使用して MS Access データベースにデータを挿入していました。空の mdb ファイルは 2KB でした。このデータベースにデータを入力した後、サイズは 155MB に増加しました。それから私はデータを削除していました。しかし、mdb のサイズは 155MB のままです。エラーは発生しません。でもこのままで普通なの?ファイルサイズが小さくなると思います。このように設計されている場合、その背後にあるアイデアは何ですか? ありがとう
5 に答える
MS Access は、データベースを圧縮するまで、レコードのスペースを再利用しません。
これは、定期的なメンテナンスの一環としてアクセス データベースに対して実行する必要があることです。そうしないと、かなり厄介な問題が発生することになります。
MS Access UI ([ツール] -> [データベース ユーティリティ] -> [データベース
の最適化と修復]) を使用してデータベースを圧縮するか、次のコマンド プロンプトを使用してデータベースを圧縮できます。
msaccess.exe "target database.accdb" /compact
注意: /Compact スイッチは、ターゲット データベースの後に配置する必要があります。
MS Access は、レコードが削除された後でも、レコードによって使用されているスペースを解放しません。必要なときに手動でスペースを解放するか、アプリケーションを閉じるたびに自動的にスペースを解放できます。
手動で行うには、圧縮と修復ユーティリティを使用します。
Access 2007にはバグがあり、圧縮手順中にデータベースが削除される可能性があるため、データベースをバックアップしてください。
サーバーまたは共有フォルダーにあるマルチユーザー (共有) データベースを圧縮する場合は、他のユーザーがそのデータベースを開いていないことを確認してください。
[ツール] メニューの [データベース ユーティリティ] をポイントし、[データベースの最適化と修復] をクリックします。
アプリケーションを閉じたときに自動的に行うには:
MS Access で自動的に圧縮するデータベースを開きます。
[ツール] メニューの [オプション] をクリックし、[全般] タブを選択します。
[閉じるときに圧縮] チェック ボックスをオンにします。
データを削除してデータベースを圧縮した後、まだ 100 KB を超えていても驚かないでください。最初にデータを追加した後は、ある程度のオーバーヘッドを取り除くことができません。
また、オートナンバー型フィールドの値は、圧縮手順の後に通知されたものとは異なる動作をすることに注意してください。MS Access 2000 のドキュメントによると、オートナンバー型フィールドを持つテーブルの末尾からレコードを削除すると、データベースを圧縮するとオートナンバー型の値がリセットされます。したがって、追加する次のレコードのオートナンバーの値は、テーブル内の削除されていない最後のレコードのオートナンバーの値よりも 1 大きくなります。
100 個のオートナンバー レコードがあり、最後の 50 レコードを削除した場合、次のオートナンバー レコード (ドキュメントによると) には「51」の番号が付けられる必要があります。しかし、私の経験では、代わりに「101」と番号が付けられています。
前述のように、最初の停止は、データベースの圧縮/修復を試みることです。ただし、新しいデータベースを作成し、古いデータベースからすべてのオブジェクトをインポートすることで、サイズを節約することもできます。
JRO を使用して、コードからデータベースを圧縮できます。参照: http://support.microsoft.com/kb/230501
前述のように、最初の停止はデータベースの圧縮/修復を試みることです。ただし、新しいデータベースを作成し、古いデータベースからすべてのオブジェクトをインポートすることで、サイズをいくらか節約することもできます。それを過ぎて、それをMDEに変換することで、より多くの髪を手に入れることができます。いつものように、プロダクションコピーをいじらないでください。また、MDEを使用する場合は、最初にデータベースを適切に分割していることを確認してください。(もちろん、将来変更が必要になった場合に備えて、ソースMDBのコピーを保持してください。)