Wie zur Komprimierung einer MS Access Datenbank
Ich habe eine .mdb
- Datei, die 70MB.
Nach löschen aller Datensätze in der Datei, die Größe bleibt 70MB.
Wie mache ich meine .mdb
Datei kleiner?
- Einige änderungen. Nahm einen punt auf Megabyte. Schien wie die meisten wahrscheinlich Maßeinheit. Nicht wirklich beeinflussen Ergebnis von der Frage.
- Ich versteh nicht die Kritik an dieser Frage. Ich ging zu der Quelle für die ursprüngliche Frage, und es war völlig klar, was wurde gefragt, obwohl die änderungen auf jeden Fall verbessert seine Klarheit. Es war eine echte Frage vom Anfang. Zweitens, Fragen über die Wartung der Datenbank, die nicht explizit beinhalten die Programmierung erlaubt, SO, wie Sie auftreten, alle über dem Platz, so dass ich nicht sehen, wie es unbedingt ein SuperUser Frage. Für mich sieht es aus wie eine graue Fläche-es wäre ein OK-Frage nach der SU auch, aber ich glaube nicht, dass es gehört nicht SO.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jede Datenbank-engine, die es je gegeben hat muss regelmäßigen Wartungsarbeiten führen Sie auf, um Sie zu optimieren, Daten speichern und wiederherstellen pufferbereich. Zurück in xBase Tagen, Sie lief ein PACK-Befehl zu löschen, gelöschte Zeilen, zum Beispiel. Auf SQL Server, führen Sie Skripte aus, schrumpfen die eigentlichen Daten-Dateien aus den gleichen Gründen.
Warum muss jede Datenbank-engine machen?
Weil es wäre eine riesige Leistung trifft, wenn sich jeder in die Datenbank schreiben hatte, zu schreiben, die gesamte Datei in einer optimierten Reihenfolge. Betrachten Sie eine Datenbank, die speichert jeden Daten-Tabelle in einer separaten Datei. Wenn eine Tabelle über 10000 Datensätze ein und Sie löschen die 5000th aufnehmen, um loszuwerden, slack space, würden Sie haben, zu schreiben, die ganze zweite Hälfte der Daten-Datei. Stattdessen jede Datenbank werden in irgendeiner form markieren Sie den Platz, der unbenutzt und entfernbare der nächsten Zeit die Optimierung der Operationen ausgeführt werden, die auf die Daten-Tabelle.
Jet/ACE nicht anders in dieser Hinsicht als jede andere Datenbank-engine und jede Anwendung eine Jet/ACE-Datenbank als datenspeicher verwendet wird, sollten regelmäßige Wartungsarbeiten geplant, darunter ein backup und dann ein compact.
Gibt es einige Probleme mit diesem in Jet/ACE, der nicht in der server-Datenbank-engines. Sie können insbesondere nicht kompakt, wenn alle Benutzer geschlossen haben, um Ihre verbindungen zu der Daten-Datei. In einer server-Datenbank, die Benutzer eine Verbindung mit der Datenbank-engine-server-Seite Prozess, und das server-side-Dämon ist der einzige "Benutzer" den eigentlichen Daten, die Dateien, in denen die Daten gespeichert sind. So, der server-Dämon kann entscheiden, Wann führen Sie die Optimierung und Wartung-Routinen, da ist es durchaus Kontrolle, wenn die Daten-Dateien in Verwendung sind oder nicht.
Einem problem mit Access-Anwendungen ist, dass Benutzer lassen Sie Ihre Anwendung öffnen Sie auf Ihrem Computer und das Büro verlassen für den Tag, was bedeutet, dass, wenn Sie Ihren kompakt-Betrieb, sagen wir um 2:00 Uhr, wird die Datei noch offen ist und Sie es nicht benutzen können (weil compact ersetzt die original-Datei). Die meisten Programmierer, der Access Anwendungen, die auf dieses problem stoßen wird entweder tolerieren, die gelegentliche Fehler der diese Art der übernachtung Wartung (volume shadow copy ermöglicht trotzdem ein backup der Datei, wenn es keine Garantie gibt, dass die backup-Kopie wird eine 100% intern konsistenten Zustand), oder Sie konstruieren Ihre Access-Anwendungen zu beenden, in einer Zeit, angemessen zu erlauben, über Nacht Wartungsarbeiten. Ich habe beides getan, mich.
In der nicht-Access-Anwendungen, das gleiche problem existiert, aber die muss anders angegangen werden. Für web-Anwendungen, es ist so etwas wie ein problem, aber im Allgemeinen, würde ich sagen, dass alle web-app, um die Daten genug, dass eine kompakte erforderlich wäre, ist eine für die Jet/ACE-Daten zu speichern ist völlig unangebracht.
Nun, auf das Thema KOMPAKT AUF SCHLIEßEN:
Es sollte nie von jedermann benutzt werden.
Je.
Ist es nutzlos und geradezu gefährlich, wenn es tatsächlich kommt.
Ist es nutzlos, weil es keinen richtig gebauten Produktions-Umgebung, in der Benutzer würde sich jemals öffnen der back-end-wenn es eine Access-app, es sollte aufgeteilt werden, mit der Benutzer immer nur das öffnen des front-end, und wenn es eine web-app, die Benutzer sich nicht die direkte Interaktion mit den Daten-Datei. Also in beiden Szenarien wird niemand jemals auslösen, die KOMPAKT in der NÄHE, so haben Sie Ihre Zeit verschwendet einschalten.
Zweitens, selbst wenn jemand gelegentlich auslösen, es ist nur zur Arbeit zu gehen, wenn dieser Benutzer ist der einzige, der mit der Datenbank öffnen. Wie ich oben sagte, es kann nicht komprimiert werden, wenn andere Benutzer mit es zu öffnen, so dass dies nicht zur Arbeit zu gehen, entweder -- KOMPAKT AUF SCHLIEßEN, können Sie nur ausführen, wenn der Benutzer auslösendes es hat exklusiven Zugriff.
Aber das Schlimmste von allen, KOMPAKT AUF SCHLIEßEN, ist gefährlich und wenn es nicht laufen können, führen zu tatsächlichen Verlust von Daten. Dies ist, weil es bestimmten Staaten ein Jet/ACE datebase sein kann, wobei die internen Strukturen sind aus dem Gleichgewicht geraten, aber die Daten sind alle noch zugänglich. Wenn die kompakt - /Reparatur-Vorgang wird in diesem Zustand können Daten möglicherweise verloren. Dies ist eine extrem seltene Zustand, aber es ist eine sehr entfernte Möglichkeit.
Der Punkt ist, dass KOMPAKTE AUF SCHLIEßEN, ist nicht bedingt, und es gibt keine Eingabeaufforderung, die Sie fragt, ob Sie möchten, um es auszuführen. Sie nicht bekommen, eine chance zu tun, ein backup, bevor es läuft, so, wenn Sie es eingeschaltet und es startet, wenn Ihre Datenbank ist in diesem sehr seltenen Zustand, könnten Sie Daten verlieren, die Sie würde sonst in der Lage sein sich zu erholen, wenn Sie nicht die kompakten Betrieb.
Also, kurz gesagt, niemand mit irgendeinem Verständnis von Jet/ACE und Verdichtung überhaupt dreht sich auf den KOMPAKTEN AUF SCHLIEßEN.
Für einen einzelnen Benutzer, können Sie genauso kompakt wie nötig.
Sich für eine gemeinsame Anwendung, die irgendeine Art von geplanten Wartungs-Skript ist die beste Sache, in der Regel über Nacht laufen lassen auf dem Datei-server. Das script macht ein backup der Datei, dann führen Sie den compact. Es ist ein ganz einfaches script zu schreiben, in VBScript, und einfach geplant.
Letztes von allen, wenn Ihre Anwendung Häufig löscht eine große Anzahl von Datensätzen, die in den meisten Fällen, dass ist ein Zeichen, ein design-Fehler. Werden Datensätze Hinzugefügt und gelöscht, in der regulären Produktion verwenden, werden TEMPORÄRE DATEN und gehören nicht in den Haupt-Daten-Datei, die beide logisch gesehen und pragmatisch gesprochen.
Alle meine Anwendungen Produktion haben eine temp-Datenbank als Teil der Architektur, und alle temp-Tabellen sind dort gespeichert. Ich nie die Mühe, kompakt temp-Datenbanken. Wenn aus irgendeinem Grund Leistung festgefahren, weil von aufblasen in der temp Datenbank, ich würde nur kopieren, eine unberührte, leere Kopie der temp-Datenbank über die alte, da keiner die Daten dort alles andere als temporär. Dies reduziert churn und aufblasen im front-end oder back-end und reduziert die Häufigkeit der notwendigen komprimiert auf die back-end-Daten-Datei.
Auf die Frage, wie kompakt, gibt es eine Reihe von Optionen:
in der Access-Benutzeroberfläche, die Sie komprimieren können Sie den aktuell geöffneten Datenbank (EXTRAS | DATENBANK-DIENSTPROGRAMME). Jedoch, dass ist es nicht möglich, ein backup zu machen, als Teil des Prozesses, und es ist immer eine gute Idee, um ein backup vor der Komprimierung, nur für den Fall etwas schief geht.
in der Access-Benutzeroberfläche können Sie eine Datenbank komprimieren, dass ist nicht öffnen. Das ein Kleinwagen aus einer vorhandenen Datei in eine neue, so, wenn Sie fertig sind, müssen Sie benennen Sie die ursprüngliche und die neu verdichtet-Datei (die neuen Namen). Das DATEI ÖFFNEN-Dialogfeld, das Sie fragt, welche Datei zu komprimieren, aus denen Sie die Datei umbenennen, an diesem Punkt, so kann man es als Teil der manuelle Prozess.
im code, die Sie verwenden können, die DAO DBEngine.CompactDatabase-Methode, die Arbeit zu tun. Diese ist nutzbar in Access VBA, oder aus einem VBScript oder aus der Umgebung, wo können Sie COM. Sie sind verantwortlich, in Ihrem code, der für die Durchführung der Sicherung und umbenennen von Dateien und so weiter.
weitere option in code JRO (Jet & Replication Objects), aber es bietet nichts in Bezug auf kompakte Operationen, DAO Sie nicht bereits haben. JRO wurde als eine separate Bibliothek zu handhaben Jet-spezifische features, die nicht unterstützt wurden, in ADO, also, wenn Sie ADO verwenden, wie Sie Ihre Schnittstelle, die MS-Bibliothek empfohlen für die Verdichtung wäre JRO. In Access, JRO, ist ungeeignet für die kompakte, als würden Sie bereits über die CompactDatabase-Methode zur Verfügung, auch wenn Sie nicht über ein DAO-Verweis (das DBEngine ist immer im Zugriff, ob oder nicht Sie haben ein DAO-Verweis). In anderen Worten, DBEngine.CompactDatabase kann verwendet werden innerhalb von Access, die ohne ein DAO-oder ADO-Verweis, wo, wie die JRO CompactDatabase-Methode ist nur verfügbar mit einem JRO Referenz (oder späte Bindung). Von außerhalb Zugreifen, JRO kann die entsprechende Bibliothek.
Lassen Sie mich betonen, wie wichtig backups sind. Sie nicht brauchen, es 999 mal 1000 (oder noch weniger Häufig), aber wenn Sie es brauchen, müssen Sie es schlecht! Also niemals kompakt, ohne vorher eine Sicherung.
Schließlich nach einer kompakten, ist es eine gute Idee zu überprüfen, die komprimierte Datei, um zu sehen, wenn es eine system-Tabelle genannt MSysCompactErrors. Diese Tabelle listet alle Probleme während der kompakte, wenn es welche gab.
Dass alles, was ich denken kann, in Bezug auf kompakte für jetzt.
Öffnen Sie die mdb-und tun 'komprimieren und Reparieren'. Dies reduziert die Größe der mdb.
Können Sie auch die "Kompakte, auf Schließen' option auf " ein " (standardmäßig deaktiviert).
Hier ist ein link, um einige weitere Informationen:
http://www.trcb.com/computers-and-technology/data-recovery/ways-to-compact-and-repair-an-access-database-27384.htm
Microsoft Access-Datenbank-engine bietet ein CompactDatabase-Methode, die eine kompakte Kopie der Datenbank-Datei. Die Datenbank-Datei geschlossen werden muss, bevor Sie CompactDatabase.
Dokumentation:
Hier ist ein Python-Skript, die DAO, verwendet um das kopieren und kompakt MDB-Dateien:
Mit python können Sie compact mit pypyodbc Bibliothek (entweder .mdb-oder .accdb)
(Quelle)
Dann können Sie kopieren verdichtet.accdb zurück zur Datenbank.accdb mit shutil:
(Quelle)
Hinweis: soweit ich weiß, für Access-DB mit ODBC, python und seinen Bibliotheken werden muss 32bit (link). Auch diese Schritte wahrscheinlich nur mit Windows OS.