DOAG Datenbank Kolumne: Services in einer Multitenant Datenbank

  • Erstellt von Johannes Ahrends
  • Datenbank Kolumne, Datenbank

Es gibt eine "Kuriosität" bei der Verwendung von Services in einer Multitenant-Datenbank.

Zunächst funktioniert das Erstellen eines Services für eine PDB genauso wie bei einer NON-CDB.

Standard-Multitenant-Datenbank:

SQL> execute dbms_service.create_service('JOHANNES','JOHANNES');
SQL> execute dbms_service.start_service('JOHANNES');

Der Befehl muss in der PDB ausgeführt werden.
Bei einer RAC-Datenbank (oder auch bei der Standard Edition High Availability) sieht das etwas komplizierter aus, da es eine ganze Reihe von zusätzlichen Parametern gibt. Vereinfacht aber etwa so:

srvctl add service -db SEHA -service 'JOHANNES' …
srvctl start service -db SEHA -service 'JOHANNES'

So weit, so gut und unkompliziert.

Jetzt kommt die "Kuriosität":
Wenn der Befehl "ALTER PLUGGABLE DATABASE SAVE STATE" ausgeführt wird, bezieht sich dieser auch auf alle Services, die zu dieser PDB gehören. Das bedeutet, dass der Service bei jedem Öffnen der PDB automatisch mit gestartet wird.
Was sich hier toll anhört (man braucht keinen "On Startup"-Trigger mehr), kann sich als ziemliches Problem herausstellen:
Wenn man einen Clone der Datenbank erstellt, dann wird auch hier der Service mit gestartet und das bedeutet, dass sich die Anwender auf unterschiedlichen Datenbanken anmelden können. Hierdurch können gravierende Inkonsistenzen entstehen.
Das unschöne an dieser Situation ist, dass es nirgendwo dokumentiert ist und es auch keine View gibt, bei der man die Einstellung für die Services überprüfen könnte.
Oracle Aussage: "Works as designed"

Johannes Ahrends
Themenverantwortlicher Datenbankadministration


Bild von Babette Bielke auf Pixabay