Kleiner Exkurs ins technische …
bis Oracle 11g konnte mein Oracle Status-Script den Parameter SERVICE_NAME mit folgendem Befehl holen:
SQL> show parameter service
Dies zeigt Default Service Names sowie selber gesetzte Service Names gleichermassen an. mit dem Wert wird dann eine Liste mit Instanzname, Service, Name, open mode, ORACLE_HOME auf der bash dargestellt.
Einige Limitierungen wurden hierbei in Kauf genommen, weil schnell und praktisch 🙂
Ab Oracle 12c zeigt der Befehl show parameter service nur noch den Default Service an, nicht jedoch selbst gesetzte Benutzer-Service!
Da wir die Service_Namen über alle Installationen immer mit einem Startup-Trigger DG_SERVICE setzen, ist es jedoch sehr hilfreich wenn man auf einen Blick erkennen kann, was auf einem Server so läuft.
Pech gehabt …
Folgendes SQL hilft meinem Script wider auf die Beine:
1. Schritt, Service Namen aus Trigger-Source lesen
SYS@SID1 SQL> select text from dba_source where name = ‘DG_SERVICE’ and text like ‘%dbms_service%’;
TEXT
——————————————————————————–
dbms_service.start_service(‘APP1Test.domain.ch’);
dbms_service.start_service (‘APP2Test.domain.ch’);
dbms_service.start_service (‘APP1Int.domain.ch’);
2. Schritt, Substring der Service_namen
SYS@SID1 SQL> select regexp_substr(regexp_substr(text,'[^(]*$’),'[^)]+’) from dba_source where name = ‘DG_SERVICE’ and text like ‘%dbms_service%’;
REGEXP_SUBSTR(REGEXP_SUBSTR(TEXT,'[^(]*$’),'[^)]+’)
——————————————————————————–
‘APP1Test.domain.ch’
‘APP2Test.domain.ch’
‘APP1Int.domain.ch’
3. Schritt, Service Namen als Liste auf eine Zeile
SYS@SID1 SQL> select listagg(regexp_substr(regexp_substr(text,'[^(]*$’),'[^)]+’), ‘, ‘) WITHIN GROUP (order by 1) from dba_source where name = ‘DG_SERVICE’ and text like ‘%dbms_service%’;
LISTAGG(REGEXP_SUBSTR(REGEXP_SUBSTR(TEXT,'[^(]*$’),'[^)]+’),’,’)WITHINGROUP(ORDE
——————————————————————————–
‘APP1Int.domain.ch’, ‘APP1Test.domain.ch’, ‘APP2Test.domain.ch’
Im Script wird diese Zeile dann in eine variable abgefüllt und weiterverwendet.
das ganze sieht dann so aus:
viel spass