web-dev-qa-db-ja.com

データベースのコンテンツを削除した後、MS Access(.mdb)ファイルのサイズが減少しませんか?

JDBC-ODBCドライバーを使用してMS Accessデータベースにデータを挿入していました。空のmdbファイルは2KBでした。このデータベースに入力した後、サイズは155MBに増加しました。次に、データを削除していました。しかし、mdbのサイズは155MBのままです。エラーは発生しません。しかし、これは通常の方法ですか?ファイルサイズが小さくなると思います。このように設計されている場合、その背後にあるアイデアは何ですか?ありがとう

28
Dean

データベースを圧縮するまで、MS Accessはレコード用のスペースを再利用しません。

これは、定期的なメンテナンスの一環としてアクセスデータベースに対して行う必要があることです。そうしないと、かなり痛い問題が発生します。

MS Access UI([ツール]-> [データベースユーティリティ]->)を使用して、データベースを圧縮できます。
Compact and Repair Database)のコマンドプロンプトを使用できます。

msaccess.exe "target database.accdb" /compact 

N.B./Compactスイッチはターゲットデータベースの後にある必要があります

39
Jon Cahill

MS Accessは、レコードが削除された後でも、レコードが使用するスペースを解放しません。必要なときに手動で、またはアプリケーションを閉じるたびに自動的に領域を解放できます。

手動で行うには、最適化および修復ユーティリティを使用します。

  1. Access 2007のバグ があるため、データベースをバックアップします。これにより、圧縮処理中にデータベースが削除される可能性があります。

  2. サーバーまたは共有フォルダーにあるマルチユーザー(共有)データベースを圧縮する場合は、他のユーザーがデータベースを開いていないことを確認してください。

  3. [ツール]メニューの[データベースユーティリティ]をポイントし、[データベースの最適化と修復]をクリックします。

アプリケーションを閉じるときに自動的に行うには:

  1. MS Accessで自動的に圧縮するデータベースを開きます。

  2. [ツール]メニューの[オプション]をクリックし、[全般]タブを選択します。

  3. [閉じるときに最適化]チェックボックスをオンにします。

データを削除してデータベースを圧縮した後も、100 KBを超えている場合は驚かないでください。最初にデータを追加した後に削除できない一定のオーバーヘッドがあります。

また、オートナンバー型フィールドの値の動作は、圧縮手順の後にアドバタイズされたものとは異なることに注意してください。MSAccess 2000のドキュメントによると、オートナンバー型フィールドのあるテーブルの末尾からレコードを削除すると、データベースを圧縮するとオートナンバー型の値がリセットされます。したがって、次に追加するレコードのオートナンバーの値は、テーブル内の最後の削除されていないレコードのオートナンバーの値よりも1つ大きくなります。

私はないがこれに該当することを発見しました:100の自動採番レコードがあり、最後の50を削除した場合、次の自動採番レコード(ドキュメントによる) 「51」と番号を付ける必要があります。しかし、私の経験では、代わりに「101」と番号が付けられています。

19
flamingLogos

前述のように、最初のステップは、データベースを圧縮/修復することです。ただし、新しいデータベースを作成し、古いデータベースからすべてのオブジェクトをインポートすることで、サイズをいくらか節約することもできます。

2
janmejay kumar

JROを使用して、コードからデータベースを圧縮できます。参照: http://support.Microsoft.com/kb/230501

1
Andreas