MS Access Datenbanken kompaktieren
Geschrieben von: Christian Holm Der heutige Artikel zeigt Ihnen wie man mit Hilfe der Jet and Replication Objects Microsoft Jet kompatible Datenbanken (z.B. MS Access Datenbanken) warten kann. Für diesen Artikel habe ich die CompactDatabase Methode ausgewählt, die wir gegen eine Datenbank am Server ausführen - um die gewählte Datenbank (wieder) in eine brauchbare Größe zu komprimieren. JRO - Wie?Die JRO (Jet and Replication Objects) ermöglichen die Durchführung automatisierbarer Datenbankdienste, die auf Microsoft Jet kompatible Datenbanken anwendbar sind. Diese Datenbankdienste beinhalten u.a. auch das Kompaktieren einer Datenbank, aber Sie können auch die Daten vom Cache aktualisieren lassen oder Datenbankreplika erstellen bzw. warten. Da sich wie gesagt diese Dienste automatisieren lassen, liegt nichts näher als diese in ein ASP Script zu verpacken und diese bei Gebrauch auf einem Web Server ablaufen zu lassen - und das ohne Access am Web Server installieren zu müssen. Heute widmen wir uns aber nur der CompactDatabase Methode. Die CompactDatabase MethodeDa Datenbanken mit der Zeit anfangen träge zu werden, wenn sie oft geändert bzw. aktualisiert werden, wird diese Methode sehr nützlich. Denn diese führt einige Optimierungen, wie Tabellendefragmentierung oder die Rückgewinnung von freiem Speicherplatz von bereits gelöschten Einträgen durch. Der Programmieraufwand ist dabei sehr gering. Die Methode nimmt zwei Parameter - die Quelldatenbank und ihr Ziel. Sie können jedoch, da es sich dabei um Connection Strings handelt, diesen einige Properties (Eigenschaften) zuweisen. Die einzige Property die logischerweise zwingend angegeben werden muß ist der Data Source, also die Angabe der zu behandelnden Datenbank selbst. Die optionalen wären z.B. eine genaue Angabe des Providers, die User ID und das Paßwort, wenn es sich um eine geschützte Datenbank handelt. Die Jet OLEDB Property erlaubt mehrere Angaben in boolscher Form. Sie können z.B. die neu zu erstellende Datenbank verschlüsseln (Encrypt), die JetEngine Versionsnummer angeben (Engine Type) oder die Beziehungen der alten Datenbank in der neuen weglassen. Beginnen wir also - wie immer - mit einem einfachen Beispiel. Dies bietet zwar keinen Komfort, soll aber auch nur die Funktion der Methode demonstrieren (Compact101.asp): Set objJRO = Server.CreateObject("JRO.JetEngine") strOldFile = Server.MapPath("NorthWind.mdb") strNewFile = Server.MapPath("NorthWindNew.mdb") objJRO.CompactDatabase "Data Source=" & strOldFile, "Data Source=" & strNewFile Set objJRO = Nothing Dies ist wie Sie sehen die Minimalversion. Einfach das JRO.JetEngine Objekt erstellen, die Datenbankdateinamen samt Pfad (hier mit Server.MapPath gelöst) angeben und die Methode ausführen. Etwas komfortabler ist das nächste Beispiel, daß sich zusätzlich für die Dateioperationen das FileSystem Objekt zuhilfe nimmt. Mit dem FileSystem Objekt erstellen wir ein Backup und löschen nach erfolgter Optimierung die alte Datenbank. Damit es zu keinen Komplikationen kommt und Sie die neue Datenbank gleich wieder verwenden können erhält Sie wieder den ursprünglichen Namen. Das ASP-Beispiel sieht dann so aus (CompactAdvanced.asp): Set objJRO = Server.CreateObject("JRO.JetEngine") Set fso = CreateObject("Scripting.FileSystemObject") strOldFile = Server.MapPath("NorthWind.mdb") strNewFile = Server.MapPath("NorthWindNew.mdb") strBakFile = Replace(strOldFile, "mdb","BAK") If (fso.FileExists(strOldFile)) Then Set SourceFile = fso.GetFile(strOldFile) SourceFile.Copy strBakFile If (fso.FileExists(strNewFile)) Then Set DuplicateFile = fso.GetFile(strNewFile) DuplicateFile.Delete Response.Write "Duplicate compacted file has been deleted!" End If Nach der Objekterstellung und der Dateinamensbelegung überprüfen wir zunächst mit der FileExists Methode ob die zu optimierende Datenbank überhaupt existiert. Wenn ja, dann erstellen wir mit der Copy Methode des File System Objektes eine Sicherungskopie. Um Probleme bei der Erstellung der optimierten Datenbankdatei zu vermeiden löschen wir eine eventuell schon vorhandene Datei. Den Löschvorgang bestätigen wir mit einer einfachen Meldung. Nun zum Rest des ASP Codes: objJRO.CompactDatabase "Data Source=" & strOldFile, "Data Source=" & strNewFile SourceFile.Delete Set CompactedFile = fso.GetFile(strNewFile) CompactedFile.Copy strOldFile CompactedFile.Delete Else Response.Write "" & strOldFile & " - No such file found!" End If Dann wenden wir wie gewohnt die CompactDatabase Methode an. Nach erfolgter Optimierung können wir die alte, nicht optimierte "mdb"-Datei löschen und der optimierten Datenbank wieder den ursprünglichen Namen geben. Jetzt noch die gebrauchten Objekte (objJRO und fso) zerstören - fertig! SchlußbemerkungWie sich aus den Beispielen gezeigt hat, ist die CompactDatabase Methode sehr einfach anzuwenden. Weitere Vorteile sind neben der Datenbankoptimierungen und meist auch Dateigrößenreduzierung, daß man den Vorgang mithilfe von ASP automatisieren kann und hierfür Access am Web Server nicht benötigt wird. Download des CodesKlicken Sie hier, um den Download zu starten. Verwandte Artikel
CSVs aus MDBs leicht gemacht Wenn Sie jetzt Fragen haben...Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten. Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.
Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.
©2000-2006 AspHeute.com |