Artikel - Detailansicht

Icon Aktuelles Exklusiver Lock auf Access DB's auf einem Server

Immer wieder liest man über Probleme mit exklusiv geöffneten Datenbanken auf einem Webserver, die man dank dieses «Locks» per ftp weder überschreiben noch umbenennen kann. Da selbst einige Hosting-Provider keine Workarounds kennen wird dann nicht selten der Server neu gebootet um den «Lock» loszuwerden und die Datenbanken updaten zu können.
Dieses Dokument zeigt drei mögliche Workarounds für dieses Problem.


Workaround 1:

Der ColdFusion Administrator bietet bereits zwei Optionen zu diesem Thema. Wir eine ODBC mit default-Werten eingerichtet, ist automatisch die Option «maintain database connection» aktiviert; dadurch findet der beschriebene Exklusiv-Zugriff statt. Die Deaktivierung der Option löst dieses Problem, indem kurze Zeit nach einem Zugriff auf die DB die Connection wieder geschlossen wird. Allerdings hat dies einen Haken: Man ist immer darauf angewiesen, dass gerade niemand auf die DB zugreift und diese per Zufall gerade verfügbar ist. Ausserdem ergeben sich dadurch auch Performance-Nachteile, da die Connection zur DB bei jedem Zugriff über Web neu aufgebaut werden muss.

Eine weitere Möglichkeit ist ebenfalls, die Option «disable database connection» zu aktivieren; dadurch wird die DB frei; beim Zugriff übers Web ergibt dies allerdings einen ODBC-Error.

Obwohl nicht dieser Thematik zugehörig sei hier noch erwähnt, dass die Option «Limit connections to [1] simultaneous connections» für intensiv genutzte Access-Datenbanken aus Performance-Gründen dringend empfehlenswert ist.


Workaround 2:

Diese Lösung geht einen ganz anderen Weg, funktioniert in der Praxis aber sehr gut und macht einem völlig unabhängig vom Goodwill des Providers. Ausserdem ist es möglich, mehrere Datenbanken über eine ODBC anzusprechen (oft zahlt man ja pro eingerichtete ODBC).

Hierzu muss man den Hosting-Provider nach dem genauen Pfad der Webroot fragen; dies ist der physikalische Pfad, in den die Dateien per ftp publiziert werden.

Vorgehen des Entwicklers:
Erstellen von zwei oder mehreren Datenbanken:
demo.mdb
demoData01.mdb
demoDataxx.mdb

Die Datenbanken müssen auf dem Entwicklungs-Rechner am genau gleichen Ort gespeichert sein wie auf dem Webserver.

Bsp.
Lage der DBs auf Webserver
D:\Inetpub\YourDomain.de\db\demo.mdb
D:\Inetpub\YourDomain.de\db\demoData01.mdb
D:\Inetpub\YourDomain.de\db\demoDataxx.mdb

Die ODBC wir ganz normal auf demo.mdb eingerichtet.

Lage der DBs auf Entwicklungs-Rechner
D:\Inetpub\YourDomain.de\db\demo.mdb
D:\Inetpub\YourDomain.de\db\demoData01.mdb
D:\Inetpub\YourDomain.de\db\demoDataxx.mdb

Wenn physikalisch kein Laufwerk D: vorhanden ist, kann ein beliebiges Verzeichnis freigegeben und auf D: gemappt werden (Im Explorer: Verzeichnis freigeben, Netzlaufwerk verbinden). Eventuell ergeben sich Probleme, wenn das Betriebssystem z.B. ein CD-ROM auf D: hat und keine manuelle Zuordnung der Laufwerksbuchstaben erlaubt. Hier kann der alte DOS-Befehl «subst» eventuell weiterhelfen.

Die Datei demo.mdb funktioniert nun quasi als Zentrale und enthält nur gelinkte Tabellen aus den anderen Datenbanken; dies bewerkstelligt man durch «Datei / Externe Daten / Tabellen verknüpfen».
Die Datenbaken demoDataxx.mdb enthalten alle gewünschten Tabellen.

Vorgehen:

  1. D:\Inetpub\YourDomain.de\db\demoDataxx.mdb: Alle Tabellen erstellen und mit gewünschten Daten füllen.
  2. D:\Inetpub\YourDomain.de\db\demo.mdb

Menü DATEI, EXTERNE DATEN, TABELLEN VERKNÜPFEN
D:\Inetpub\YourDomain.de\db\demoDataxx.mdb auswählen und alle Tabellen verknüpfen.

Innerhalb von demo.mdb kann jetzt ganz normal mit den verknüpften Tabellen operiert werden. Wir hatten bisher keinerlei Probleme, die Tabellen per SQL zu unterhalten.
Der «ServerLock» greift jetzt nur noch für demo.mdb, die Datei demoDataxx.mdb kann beliebig manipuliert werden. Dabei sind Änderungen an Feldern und zusätzliche neue Felder in einer Tabelle automatisch in demo.mdb verfügbar. Allerdings können keine neuen Tabellen erstellt werden, da diese ja wieder in demo.mdb gelinkt werden müssen.

Daher noch einige Tips:
In der Datei demoDataxx.mdb kann man bereits Tabellen für den zukünftigen Gebrauch anlegen, z.B. spare01, spare02 etc. und diese vorsorglich linken. Die Felder müssen dabei noch nicht definiert werden. Dadurch kommt man auch nicht in Verlegenheit, wenn man eine zusätzliche Tabelle braucht.

Beim Update einer DB per ftp kann das ja schon eine Weile dauern (wir haben Access Datenbanken von 10-50 MB). Daher ist es ratsam, eine Kopie der DB per ftp zu überspielen (z.Bsp. demoDataxxFTP.mdb). Sobald diese komplett auf dem Webserver ist, löscht man per ftp das Original und benennt die neue DB um in demoDataxx.mdb. Dadurch ist die DB gerade mal eine halbe Minute nicht verfügbar.


Workaround 2:

Dies ist die wohl sauberste und professionellste Lösung, braucht aber etwas mehr Kenntnisse von SQL und DDL. Viele Anwender wissen nicht, das man auch in einer Access-Datenbank Tabellen per SQL erstellen, löschen und ändern kann; ebenso können Felder erstellt, gelöscht und mutiert werden.
Dabei werden SQL Statement ganz normal in ein CF-Query Tag platziert, das Template auf den Webserver geladen und einmal ausgeführt.

Da es zu diesem Thema bereits einen guten Artikel von Charles Areheart (allerdings in Englisch) gibt beschränke ich mich hier darauf, diesen hier anzufügen. Etlich Resourcen finden sich auch im Web. Eine Suche mit den Stichworten SQL und DDL sollte bereits zum Erfolg führen.

Download des Artikels von Charles Areheart (MS Word).



Eugen Notter e.notter@xweb.ch - 05.07.2000

Zurück


Das deutsche ColdFusion-Forum cfml.de ist das Portal für Einsteiger und Experten zum Thema ColdFusion und der ColdFusion Markup Language (CFML).

© 2017 Webdesign & Hosting: CHC ONLINE Kassel | SOLVA Content-Management-System CMS
Urlaub-Angebote.de - Urlaub mit Bestpreis-Garantie buchen