Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

MS Access Datenbanken kompaktieren

Geschrieben von: Christian Holm
Kategorie: Datenbank

This printed page brought to you by AlphaSierraPapa

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 Methode

Da 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ßbemerkung

Wie 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.

This printed page brought to you by AlphaSierraPapa

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010321.zip

Verwandte Artikel

CSVs aus MDBs leicht gemacht
http:/www.aspheute.com/artikel/20010605.htm
Tabellenerstellung mit ADOX
http:/www.aspheute.com/artikel/20000626.htm

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.