|
|
XCII. SESAM Datenbankfunktionen
SESAM/SQL-Server ist ein von Fujitsu Siemens Computers in Deutschland entwickeltes
Mainframe-Datenbanksystem f�r High-End Server mit dem Betriebssystem BS2000/OSD.
In zahlreichen BS2000-Installationen hat SESAM/SQL-Server unter Beweis gestellt:
die einfach zu handhabende Unterst�tzung von Java-, Web- und
Client-Server-Anwendungen eine Hochverf�gbarkeit von mehr als 99,99 % die F�higkeit, bis zu mehrere hunderttausend Benutzer zu
bedienen
Mit einer PHP3 SESAM-Schnittstelle sind jetzt auch Datenbank-Operationen per
PHP-scripts m�glich.
Konfigurationshinweise:
Die PHP-SESAM-Schnittstelle muss als Modul in Apache integriert werden.
Stand-alone-Betrieb ist nicht m�glich. Im Apache-PHP-Modul ist die
SESAM-Schnittstelle entsprechend
den Apache-Vorschriften zu konfigurieren.
Tabelle 1. SESAM-Konfigurationsvorschriften Directive | Bedeutung |
---|
php3_sesam_oml | Name der BS2000-PLAM-Bibliothek mit den ladbaren Modulen des
SESAM-Treibers. F�r die Nutzung von SESAM-Funktionen erforderlich.
Beispiel:
| php3_sesam_configfile | Name der Konfigurationsdatei der SESAM-Anwendung. F�r die Nutzung
von SESAM-Funktionen erforderlich.
Example:
enth�lt im allgemeinen folgende Konfiguration (siehe auch SESAM
Referenzhandbuch):
| php3_sesam_messagecatalog | Name des SESAM-Meldungskatalogs. Nur erforderlich, wenn der
SESAM-Meldungskatalog nicht im BS2000-Meldungkatalog enthalten ist.
Example:
|
Zus�tzlich zur PHP-SESAM-Schnittstelle muss nat�rlich die SESAM-Datenbank
selbst auf dem BS2000-System installiert und konfiguriert werden:
F�r eine Verbindung zwischen dem PHP script und dem DBH m�ssen die Parameter von
CNF und NAM der SESAM-Konfiguration
den Werten des im BS2000 gestarteten DBH ensprechen.
Bei verteilten Datenbanken muss ein SESAM/SQL-DCN-Agent gestartet
werden, dessen Konfigurationstabelle Host- und Datenbank-Namen enth�lt.
Die Kommunication zwischen PHP im BS2000-Subsystem POSIX und dem DBH
im BS2000 erfolgt �ber Zugriffe eines speziellen Treibermoduls (SQLSCI) und
der SESAM-Anschlu�module auf einen gemeinsamen Speicherbereich (common
memory).
Der common-memory-pool-Mechanismus und die Tatsache, dass PHP in den
Webserver statisch eingebunden ist, machen die Datenbankzugriffe sehr
schnell. Datenbankzugriffe �ber ODBC, JDBC or UTM sind nicht erforderlich.
Nur ein kleines Lademodul (SESMOD) wird zum PHP gebunden, w�hrend die
SESAM-Anschlu�module aus der SESAM-OML (PLAM-Bibliothek) nachgeladen werden.
library. In der PHP-Konfiguration,muss diese SESAM-OML und der
f�r die SESAM-Konfiguration erforderliche Linkname angegeben werden
(SQLSCI ist wie in SESAM V3.0 in der Standard-SESAM-Toolbibliothek verf�gbar).
Wegen der SQL-Syntaxvorschriften f�r Anf�hrungszeichen (doppelte Anf�hrungszeichen
statt Anf�hrungszeichen mit vorangestelltem Gegenschr�gstrich wie in manchen
anderen Datenbanken) wird empfohlen, die PHP-Konfigurationsvorschriften
php3_magic_quotes_gpc
und php3_magic_quotes_sybase
f�r alle SESAM betreffenden PHP-scripts auf On zu setzen.
�berlegungen zur Ablaufzeit:
Wegen der spezifischen Eigenschaften der BS2000-Proze�steuerung kann der
Treiber erst nach dem fork des Apache-Servers f�r seine Sohn-Prozesse
geladen werden. Der erste SESAM-Zugriff jedes dieser Prozesse wird dadurch
etwas verlangsamt, alle weiteren Zugriffe werden jedoch ohne Beeintr�chtigung
abgearbeitet.
Ein explizit definierter SESAM-Meldungskatalog wird bei jedem Laden des Treibers
(d.h. beim ersten SESAM-Zugriff) geladen. BS2000 erzeugt nach dem erfolgreichen Laden
dieses Katalogs eine Meldung, die an die error_logfile von Apache geschickt wird.
Da BS2000 z. Zt. ein Unterdr�cken dieser Meldung nicht erlaubt, wird das logfile
langsam damit vollgeschrieben.
Bitte beachten: die SESAM-OML (PLAM-Bibliothek) und die SESAM-Konfigurationsdatei
m�ssen f�r die Benutzerkennung, unter der der Webserver l�uft, lesbar sein!
Andernfalls kann der Server den Treiber nicht laden, womit die SESAM-Funktionen
nicht zur Verf�gung stehen. Auch der Zugriff die Datenbank selbst muss dem Server
m�glich sein, da sonst keine Verbindung zum DBH m�glich ist.
Cursor Typen:
Die f�r SQL-Abfragen "select type" zugewiesenen Ergebniscursor k�nnen
"sequential" oder "scrollable" sein, Standardwert ist wegen des geringeren
Speicherbedarfs "sequential"
"Scrollable" Cursors k�nnen im Ausgabedatensatz beliebig positioniert werden.
F�r jede "scrollable" Abfrage gibt es globale Standardwerte f�r den Scroll-Typ
(initialisiert zu: SESAM_SEEK_NEXT) und der Scrolling-Abstand,
der entweder einmal mit: sesam_seek_row() oder jedesmal beim
Lesen einer Zeile mit: sesam_fetch_row() gesetzt werden kann.
Die folgende Tabelle zeigt die Behandlung der globalen Stadtardwerte f�r
Scroll-Typ und Scroll-Abstand beim Lesen einer Zeile mit "scrollable" Cursor:
Tabelle 2. Scrolled Cursor Post-Processing Scroll Type | Action |
---|
SESAM_SEEK_NEXT | none | SESAM_SEEK_PRIOR | none | SESAM_SEEK_FIRST | set scroll type to
SESAM_SEEK_NEXT | SESAM_SEEK_LAST | set scroll type to
SESAM_SEEK_PRIOR | SESAM_SEEK_ABSOLUTE | Auto-Increment internal offset value | SESAM_SEEK_RELATIVE | none. (maintain global default
offset value, which allows
for, e.g., fetching each 10th row backwards)
|
Bemerkungen zur Portierung:
Da in PHP Indizes �blicherweise mit NULL gestartet werden, musste
die SESAM-Schnittstelle entsprechend adaptiert werden: w�hrend in
der "normalen" SESAM-Schnittstelle ein Array mit Index 1 beginnt,
wird in PHP NULL als Startpunkt verwendet - z.B. hat beim Lesen von
Spalten mit sesam_fetch_row() die erste Spalte
den Index 0 und the folgenden Spalten haben Indizes bis zu (aber
nicht einschlie�lich!) dem Spaltenindex ($array["count"]).
Beim Portieren von SESAM-Anwendungen aus aus anderen h�heren
Programmiersprachen nach PHP ist diese Schnittstellen�nderung zu
beachten. Wo es erforderlich ist, beinhaltet die jeweilige
PHP-SESAM-Funktion einen Hinweis auf die mit NULL beginnende
Indizierung.
Sicherheitsaspekte:
Beim Zugriff auf SESAM-Datenbanken sollte der normale Benutzer
eines Web-Servers nur die allern�tigsten Privilegien bekommen.
Im allgemeinen sollte auf Datenbanken nur lesender Zugriff
m�glich sein. Weitergehende Rechte sollten - nur falls wirklich
erforderlich - abh�ngig vom jeweiligen Einsatzfall eingerichtet
werden. Auf keinen Fall sollte man beliebigen Benutzern im Internet
volle Zugriffsrechte auf eine Datenbank gew�hren! Der Zugriff auf
PHP-scripts f�r die Datenbank-Administration sollte in jedem Fall
per Passwort und/oder durch SSL-Verbindung gesch�tzt sein.
Migration von anderen SQL-Datenbanken:
Unterschiedliche SQL-Auspr�gungen sind nie 100-prozentig kompatibel.
Bei der Portierung von SQL-Anwendungen anderer Datenbanken nach SESAM
k�nnen daher Anpassungen erforderlich sein. Auf folgende, typische
Unterschiede sei besonders hingewiesen:
Herstellerspezifische Datentypen Manche herstellerspezifischen Datentypen m�ssen u.U. durch
Standard-SQL-Typen ersetzt werden, wie z.B. TEXT
in VARCHAR(max. size).
Schl�sselw�rter als SQL-Bezeichner In SESAM m�ssen Schl�sselw�rter in Anf�hrungsstrichen (???)
angegeben werden (SQL-Standard) Schl�ssel. L�nge der Anzeige in Datentypen Datentypen in SESAM sind nicht durch L�ngenangabe, sondern
durch ihre Genauigkeit spezifiziert. Statt int(4)
f�r ganze Zahlen bis '9999' braucht SESAM lediglich
int f�r eine implizite L�nge von 31 Bit. Als Datentypen
f�r Datum und Zeit gibt es in SESAM nur: DATE,
TIME(3) und TIMESTAMP(3).
SQL-Datentypen mit herstellerspezifischen Attributen der Form:
unsigned, zerofill, oder
auto_increment attributes Unsigned und
zerofillwerden nicht unterst�tzt. Um die SESAM-implizite
automatische Erh�hung zu nutzen, gibt es anstelle von "... VALUES(0,
...)" automatisch Auto_increment (
"INSERT ... VALUES(*, ...)".
. int ... DEFAULT '0000' Numerische Variablen d�rfen nicht mit Zeichenkonstanten initialisiert
werden. Statt dessen ist DEFAULT 0 zu verwenden.
Dem Initialisierungs-string f�r Variablen des SQL-Datentyps datetime
muss das jeweilige Schl�sselwort als Prefix vorangestellt werden wie in
CREATE TABLE exmpl ( xtime timestamp(3) DEFAULT TIMESTAMP
'1970-01-01 00:00:00.000' NOT NULL
);
$count = xxxx_num_rows(); Manche Datenbanken liefern die gesch�tzte/erratene Anzahl von
Ausgabezeilen als Abfrageresultat an, obwohl der gelieferte
Wert grob falsch ist. SESAM kennt die Anzahl von Ausgabezeilen
erst, wenn sie tats�chlich gelesen wurden. Falls diese Information
TATS�CHLICH ben�tigt wird, sollte man SELECT COUNT(...)
WHERE ..., versuchen. Diese Funktion ermittelt die
Anzahl der Treffer. Ein zweiter Aufruf liefert (hoffentlich)
die eigentlichen Ergebnisse.
DROP TABLE thename; In SESAM muss im Kommamdo DROP TABLE
der Name entweder um die Schl�sselw�rter RESTRICT
oder CASCADE erg�nzt werden. Bei der Angabe von
RESTRICT wird ein Fehler gemeldet, wenn abh�ngige
Objekte (z.B. VIEWs) existieren, w�hrend bei CASCADE
abh�ngige Objekte zusammen (???) mit der definierten Tabelle
gel�scht werden.
Bemerkungen zu weiteren SQL-Datentypen:
SESAM unterst�tzt z.Zt. keine Daten von Typ BLOB. F�r zuk�nftige
SESAM-Versionen ist diese Unterst�tzung geplant.
Bei SQL-Abfragen werden von der PHP-Schnittstelle folgende Datentypen
automatisch konvertiert:
Tabelle 3. SQL to PHP Type Conversions SQL Type | PHP Type |
---|
SMALLINT, INTEGER | "integer" | NUMERIC, DECIMAL, FLOAT, REAL, DOUBLE | "double" | DATE, TIME, TIMESTAMP | "string" | VARCHAR, CHARACTER | "string" |
Bei Abfragen auf ganze Zeilen wird das Ergebnis als Array geliefert.
Leere Felder werden nicht gef�llt, d.h. ihre Existenz muss explizit mit
isset() oder empty() �berpr�ft werden.
Dies erm�glicht dem Benutzer eine bessere Kontrolle als durch R�ckgabe
eines Leer-strings zur Darstellung eines leeren Feldes.
Unterst�tzung der SESAM-Features "multiple fields":
Diese spezielle SESAM-Funktion erlaubt die Definiton von Spalten als Feld-Array.
Eine "multiple field" Spalte wird wie folgt definiert:
Beispiel 1. Creating a "multiple field" column CREATE TABLE multi_field_test
(
pkey CHAR(20) PRIMARY KEY,
multi(3) CHAR(12)
) |
|
und folgenderma�en ausgef�llt:
Beispiel 2. Filling a "multiple field" column INSERT INTO multi_field_test ( pkey, multi(2..3) )
VALUES ( 'Second', <'first_val','second_val'>) |
|
Zur Beachtung: f�hrende leere Unterfelder (wie in diesem Fall) werden ignoriert
und die enthaltenen Werte damit verworfen, so dass in obigem Beispiel das Ergebnis
als multi(1..2) angezeigt wird und nicht als multi(2..3).
Bei der Ausgabe von Ergebniszeilen wird auf "multiple columns" wie auf "inlined"
zus�tzliche Spalten zugegriffen. Im obigen Beispiel bekommt "pkey" den Indexwert
NULL und auf die drei Spalten "multi(1..3)" kann mit den Indizes 1 bis 3 zugegriffen
werden.
SESAM-spezifische Details sind in den Handb�chern oder
beschrieben. Beide Manuale sind online abrufbar und stehen in gedruckter Form
zur Verf�gung.
User Contributed Notes SESAM Datenbankfunktionen |
|
There are no user contributed notes for this page. |
| |