Gebt Oracle Zeit!

Seit der Übernahme Suns durch Oracle hat sich viel getan, vieles missfällt der Community. Doch Gebt Oracle Zeit! Es steht noch am Anfang und kann noch lernen.

Es schlägt zur Zeit überall große Wellen, erst kauft Oracle Sun auf, dann braucht es länger als einen Tag um sich in den Unternehmensstrukturen zurechtzufinden, gibt schließlich an Tag 2 nicht zu allen Projekten die weitere Zielsetzung bekannt. Will an Tag 3 doch tatsächlich mit dem Einkauf Geld verdienen und hat an Tag 4 immer noch nicht alle Projekte komplett gesichtet und die zukünftige Roadmap festgelegt. Verklagt daraufhin an Tag 5 Google, und während der Kampf Böse gegen Böse hier nun tobt, tun sich noch weitere Fronten auf. Eine Woche nach der Übernahme sprießen die Forks von Sun Projekten (Maria DB, Libre Office, Open Solaris) wie Maiglöckchen im Frühling. Zwei Wochen nach der Übernahme hat die Apache Software Foundation dem JCP den Rücken gekehrt. Oracle hatte im Lizenzstreit über Wochen hinaus keinerlei Bereitschaft für ein Miteinander gezeigt und strikt seine Sicht der Dinge fortgeführt.

Den Aufschrei der nun durch die Blogosphäre (grausames Wort) geht kann ich verstehen und nachvollziehen. Ja er ist sogar notwendig, damit Oracle sieht was diese Entscheidungen bewirken. Und dass dahinter sehr viel Emotion und Identifikation steckt.

Dass die ASF als Non-Profit-Organisation mit Oracle Lizenztechnisch im Klinsch liegt, und noch lange liegen wird, ist ebenfalls verständlich, und in meiner Position kann man hoffen dass hier das letzte Wort noch nicht gesprochen ist.

Und auch wenn ich selbst einige Entscheidungen seitens Oracle gern anders gesehen hätte, bleibt mir gerade deshalb nur zu sagen: Gebt Oracle Zeit!

Viele Geschäftsfelder dieser Firma funktionieren in und mit Java, man ist also davon abhängig. Und sie haben Recht, Java muss sich weiterentwickeln. Es herrschte lange Stillstand, der durch eine tolle Community kompensiert wurde. Durch 3rd Party Frameworks u.a.. Und deshalb kann die Community auch jetzt zeigen, dass ihr was an Java liegt, und weiterhin den Dialog suchen, versuchen Java voranzubringen und vor allem versuchen Oracle etwas Zeit zu geben einen Weg zu finden der für alle akzeptabel ist (und dabei weiterhin aufschreien wenn man nicht gehört wird).

Denn wenn Oracle noch nicht mal die Verpackung der Sun Produkte komplett erneuern konnte (siehe Bild), wie soll dann bei so vielen Projekten schon der für alle Beteiligten richtige Weg eingeschlagen sein?

Virtualbox Installationsdialog Oracle Sun gemixed

PS: Die zeitliche Anordnung der Ereignisse ist frei definiert. Die genannten Distanzen sollen vor allem eins Zeigen, es ist alles noch in den Kinderschuhen.

Ähnliche Artikel:

Was ist ein Key-preserved table?

Schonmal mit einer Oracle Datenbank gearbeitet? Und auch schon diesen ORA bekommen?

ORA-01752: cannot delete from view without exactly one key-preserved table

Nun, was hat es damit auf sich?

Eine Tabelle ist dann „key-preserved“ wenn jeder Schlüssel der Tabelle auch der Schlüssel des Joins sein kann. Das bedeutet dass der eindeutige Schlüssel durch einen Join erhalten bleibt. Dies liegt nicht dem Inhalt des Tables zugrunde sondern dem Schema, welchem die Tabelle zugrundeliegt.

Am besten ist das wohl an einem Beispiel erklärt:

create view fehlermeldungen as
select f.id fid, f.name fname, m.id mid, m.name mname
from modul m, fehler f
where f.modul_id = m.id;

Wenn wir die Daten der View aufrufen bekommen wir beispielhaft folgende Werte:

FID        FNAME      MID        MNAME
---------- ---------- ---------- ----------
       101 NULLP              10 MAIN
       102 ARRAY              10 MAIN
       103 STRING             10 MAIN
       104 DATE               20 GUI
       105 STRING             20 GUI
       106 NULLP              20 GUI
       107 NULLP              20 GUI
       108 STRING             20 GUI
8 rows selected.

Der Key der zugrundeliegenden Tabelle fehler blieb erhalten. Anhand dieses Keys kann auch in der View in der der Join erfolgte immernoch ein einzelner Datensatz extrahiert bzw. identifiziert werden. Der Key der Tabelle modul hingegen ist zwar für die Tabelle eindeutig, ist aber kein Key des Joins mehr. In dem Fall ist also f.id key-preserved und m.id nicht.
Die Ursache liegt bereits bei der Verbindung der beiden Tabellen. Die Modul.id wird als Fremdschlüssel auf der Tabelle Fehler geführt und muss dort somit nicht unique sein.

Oracle selbst erlaubt eine Tabelle je View die ihren Schlüssel in der View behält, wenn man auf dieser Datenmanipulationen zulassen möchte. Sind zwei oder mehr schlüssel-erhaltende Tabellen in der View enthalten, gelten für die einzelnen Datenmanipulationsvorgänge spezielle Regeln die befolgt werden müssen. Dazu später mehr.

Um dieses Problem zu umgehen bleiben einem somit nur 3 Möglichkeiten:

  1. Die Datenstruktur soweit anpassen oder eine neue View bauen die die Vorraussetzungen erfüllt.
  2. Anstatt mit der View direkt mit den Tabellen zu arbeiten.
  3. Das Problem umschiffen indem man mit „Instead of“-Trigger an die View gehängt arbeitet.

Was man beachten muss wenn man eine View erstellt und diese für weitere Operationen heranziehen will:

  • UPDATE: Alle Spalten, in denen Information upgedated werden soll, müssen von einem key-preserved Table stammen. Wenn in der View die CHECK OPTION gesetzt ist müssen alle JOIN Spalten und Spalten von Tabellen die mehr als einmal referenziert sind, von dem Update geschützt sein.
  • DELETE: Es darf nur einen key-preserved Table in der View geben, dieser Table kann zwar mehrfach in der View vorkommen, jedoch nur wenn die View die CHECK OPTION gesetzt hat.
  • INSERT: Alle Spalten, in die Information neu eingetragen werden, müssen vom key-preserved Table kommen. Hierbei darf die View nicht die CHECK OPTION gesetzt haben.

Kurz zur WITH CHECK OPTION Klausel:
Ist die View mit dieser Klausel ausgestattet werden schon vor dem Einfügen oder Verändern von Datensetzen die WHERE Klauseln überprüft. Würde ein neuer Datensatz nicht durch die Einschränkungen der WHERE Klausel als gültig erkannt werden, wird die Aktion bereits vor der Ausführung verhindert bzw. nicht durchgeführt.

Quellen:
[1] http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96521/views.htm#4054

[2] http://ora-01752.ora-code.com/

[3] http://www.praetoriate.com/t_grid_rac_admin_db_links.htm

Ähnliche Artikel: