Michael Schröpl: Oracle Fragen

Beitrag lesen

Hi,

ein Kunde möchte ein paar Datenbankabfragen über
PHP4 und (leider) Oracle

schööön ... ;-)

Ein PHP Tut. zu Oracle und PHP habe ich gefunden,
aber Tuts zu Oracle an sich sind schon dünner gesät
(Administration z.B.).

Die gibt es mit Oracle auf CD-ROM.

Ich habe hier eine Oracle804-Doku herumliegen -
vollständig in HTML, allerdings riesengroße Seiten
(mehrere davon sind _einzeln_ jeweils 2 MB groß - für
Internet völlig untauglich, lokal aber kein Problem).

Wie kriege ich Oracle zum Entwickeln überhaupt zum
laufen?

Beiliegende Dokumentation lesen - sorry, aber das ist
nun mal nicht zu vermeiden. Vor allem hast Du sehr
viele Schräubchen, an denen Du drehen kannst - und
für die mußt Du verstehen, was sie bewirken.

Und "zum Entwickeln" ist halt auch ein dehnbarer Be-
griff. Oracle selbst liefert eine Anzahl eigener Pro-
grammiersprachen mit - einen eigenen Forms-Generator,
eine Sprache für stored procedures (PL/SQL), Präpro-
zessoren für konventionelle Sprachen (in Pro*C kannst
Du mitten in einen C-Quelltext irgendwelche SQL-
Statements schreiben, der Präprozessor wandelt das
um in API-Calls, welche der nachgeschaltete C-
Compiler versteht usw.).
PHP und das zugehörige API kenne ich leider nicht.

Gibt es nicht vielleicht ähnliches wie WAMP auch
für Oracle (sowas wie WAOP :o)?

Mir wäre irgendwie neu, daß Oracle-Software plötzlich
kostenlos und Open Source wäre ...

Oder gibt es vielleicht sogar irgendwas in Richtung
Oracle DB, das man auch unter Win zum laufen bringt
(exe doppelt klicken -> Oracle läuft, wäre mir sehr
recht *g*)?

Die Komplexität von Oracle ist vergleichbar mit der
Komplexität eines vollständigen Betriebssystems!
(Oracle macht beispielsweise seine Plattenzugriffe
selber, wenn Du das einschaltest - Dateisysteme sind
für Tablespaces bloß Zeitverschwendung ... ;-)
Erwartest Du von einem solchen Brocken, ihn ohne jede
Konfigurationsarbeit zum Laufen zu bekommen?
Wahrscheinlich brauchst Du keine 5% dessen, was Oracle
alles könnte - trotzdem wirst Du den Rest wenigstens
so weit verstehen können, daß Du Deiner Installation
gemäß sinnvolle Werte einstellen kannst.

Außerdem wäre da noch eine Frage zu SQL. Bisher war
ich ja immer der Ansicht, dass SQL standardisiert
wäre.

Das ist es auch - genau wie HTML, oder JavaScript, oder
CSS ... nur: Wer hält sich wie gut an welchen Standard,
und wer erfindet über welchen Standard hinaus wieviele
eigenen Fahrräder?

Jetzt habe ich aber gehört, dass es da durchaus
Unterschiede gibt.

In der Tat. Erhebliche sogar.

Aber das würde ja auch bedeuten, dass ich SQL auf
Oracle anpassen muß. Muß da wirklich die Syntax
verändert werden?

Allgemein gesagt:
1. Ja.
2. Je einfacher Deine Statements, um so
   wahrscheinlicher mußt Du nichts ändern.

Das Schlimmer ist noch nicht mal, die Syntax anzupas-
sen (das wäre ja nur Arbeit) - so richtig lästig wird
es, wenn Du die Semantik anpassen mußt, weil es das
Konzept, auf dessen Existenz Du die gesamte Anwendung
aufgebaut hast, auf der anderen Seite einfach nicht
existiert. Da kann es sein, daß Du _alles_ wegwerfen
und von vorne anfangen mußt.

Aber tendentiell hättest Du das Problem eher beim
Umstieg von Oracle auf mySQL.
Oracle bietet eine ganze Reihe von Konzepten (nicht
Befehlen!), welche in mySQL nicht mal ansatzweise
existieren (Constraints, Trigger, Stored Procedures).
Da geht es nicht mehr um Differenzen von Anweisungen,
es geht um die Verfügbarkeit ganzer Zusatzsprachen
bis hin zu einer völligen Änderung des Programmier-
stils.
Während Du beispielsweise in SQL die Eigenschaften
der Ergebnisse beschreibst, kannst Du in Oracles
PL/SQL plötzlich algorithmisch programmieren, dies
aber mit SQL-Befehlen mischen.
Und solche Programme kannst Du in der Datenbank ab-
legen und an Ereignisse binden - beispielsweise an
ein INSERT in eine Tabelle ...
Das ist eine ganz andere Welt.
Du hast nicht mehr die dumme Datenbank und die intel-
ligente Anwendung - Du hast die intelligente Datenbank
mit automatisch konsistenten, sich selbst überprüfen-
den Datentypen! Und Du kannst in der Anwendung keine
Checks mehr vergessen, weil diese in der Datenbank
selbst statt finden. Gleichzeitig kannst Du in der
Anwendung auch nicht mehr "pfuschen" ... durch diese
hohle Gasse müssen sie kommen. Alle.
Das alles will natürlich entsprechend konfiguriert
sein. Und man kann Oracle letzten Endes auch im
"mySQL-Modus" betreiben, ohne all diese Features.
("Man kann in jeder Sprache Fortran-Programme schreiben.")

Umgekehrt hat auch mySQL eine Reihe von Besonderheiten.
Das geht schon mal mit den zahlreichen verschiedenen
Tabellentypen los, welche de facto unterschiedlich
ausgerichtete Treiber bedeuten (teilweise sehr stark
auf Performance optimiert, dafür aber nicht transak-
tionsfähig, teilweise wiederum das genaue Gegenteil).
Ähnliches gilt für die lange Liste der Feldtypen.
oracle kennt so etwas wie Tabellentypen meines Wissens
nicht - deren Tabellentreiber versucht, mit jedem
mySQL-Tabellentyp in dessen Spezialgebiet mitzuhalten.
Was Tuning angeht, macht Oracle eine ganze Menge sehr
weit drinnen im Datenbank-Design, was Du auf der SQL-
Ebene gar nicht zu Gesicht bekommst - bei mySQL ist
das gesamte Instrumentarium Teil der SQL-Syntax.
Deshalb wirst Du einige Sprachelemente von mySQL in
Oracle vermissen, weil das den SQL-Programmierer dort
einfach "nichts angeht".

Wenn Du die höherwertigen mySQL-Treiber (InnoDB und
BDB) kennst (also mit Tablespaces umgehen kannst etc.),
dann wird Dir vieles von der Oracle-Denkweise bekannt
vorkommen.
Dort solltest Du Dich also mal umsehen - das mySQL-
Kapitel über Tabellentypen finde ich äußerst lesenswert.

Last not least, bliebe noch die Frage der
Administration einer Oracle DB.
Gibt es da auch sowas wie PHP MyAdmin? Oder muß
das Dingens komplett über Konsole beackert werden?

Dazu kann ich leider nichts sagen - dafür ist mein
Oracle-Wissen zu alt. (Die letzte Version, die ich
selbst betrieben habe, war Oracle 7 - da war alles
noch sehr spartanisch. Aber arg viel Administration
brauchte ich nie - alle paar Monate mal die Table-
space-Größen anpassen ... der Rest lief via cron.)

Viele Grüße
      Michael