CREATE-SYNONYM

Synonyme sind alternative Bezeichner für Datenbankobjekte. Sie sind nicht Bestandteil des SQL Standards. Nahezu alle RDBMS (bis auf MYSQL) unterstützen jedoch diesen Befehl.

Synonyme können für Tabellen, Views, Sequenzen und andere Synonyme erstellt werden. Zum Erstellungzeitpunkt muss das Objekt für welches ein Synonym erstellt werden soll weder existieren noch Rechte zu dem Synonym-Ersteller erteilt sein. Synonyme sind unabhängig von den referenziernden Objekt, löscht man das Objekt auf welches ein Synonym zeigt, wird der Synonym nicht mitgelöscht.

SQL-Beispiel: CREATE OR REPLACE SYNONYM synonym_name FOR objektname;

Man unterscheidet private (private) von öffentlichen (public) Synonymen:

Privat (private):

  • ohne das Schlüsselwort public wird ein privates Synonym erstellt
  • die Schlüsselworte CREATE, SYNONYM, FOR sind zur Erstellung eines Synonyms notwendig
  • OR REPLACE ist optional
  • der Ersteller von privaten Synonymen gilt als Besitzer des Synonyms

Öffentlich (public):

  • mit dem Schlüsselwort PUBLIC (CREATE PUBLIC SYNONYM...) wird ein öffentliches Synonym erstellt und dem Public Benutzerkonto zugeordnet
  • öffentliche Synonyme sind für alle Benutzer zugänglich, wenn die entsprechenden Rechte auf das Objekt auch dem Public Benutzerkonto zugewiesen worden

Vorteile in SQL-Scripten:

Eine Lesebrechtigung auf eine Tabelle wird mit dem Besitzerprefix benutzt:

SELECT * FROM besitzerprefix.tabellenname;

Um nun aufwendige Aktualisierungen, z.B. nach Besitzerwechsel des Objektes in Prozeduren zu umgehen, kann man Synonyme einsetzen.

Vorgehensweise:

  1. CREATE OR REPLACE PUBLIC SYNONYM synonymname FOR alter_besitzer.objektname;
  2. es wird z.B. in Prozeduren mit den Synonymnamen referenziert
  3. nun wird neuer_besitzer neuer Besitzer des Objekts
  4. mit CREATE OR REPLACE PUBLIC SYNONYM synonymname FOR neuer_besitzer.objektname; wird nun einfach auf den neuen Besitzer referenziert und die Prozeduren funktionieren weiterhin.

HINWEIS: Per GRANT sollte die SELECT-Berechtigung für das Objekt auf PUBLIC bzw. dem entsprechenden Benutzer bei privaten Synonymen erteilt werden.

Namensräume:

Jeder Benutzer hat einen eigenen Namensraum für Tabellen, Views, Sequenzen und private Synonyme. Öffentliche Synonyme haben ihren eigenen Namensraum und daher entstehen keine Namenskonflikte zwischen privaten und öffentlichen Synonymen.

WICHTIG: Existieren jeweils ein privates und ein öffentliches Synonym mit dem gleichen Bezeichner und wird das Synonym mit SELECT * FROM ...; angesprochen, wird erst von den lokalen Objekten ausgegangen, d.h. es wird das private Synonym angesprochen.

Synonym löschen:

Es genügt folgendes SQL-Statement um ein privates Synonym zu löschen:

DROP SYNONYM synonymname;

Und folgendes SQL-Statement löscht ein öffentliches Synonym:

DROP PUBLIC SYNONYM synonymname;

siehe auch: Namensraum

Kategorie; SQL, S, C