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.
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.
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!
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
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20010321.zip
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.