Skip to Main Content

 

Auswahl  

Komplett Übersicht aller Oracle Tipps

Listener Info mittels SQL auswerten (External Table) 

Oracle
DBA
RDBMS 23.1
09.08.24 (MP)
09.08.24(MP)
Listener durch External Table

Passende Schulungen zum Thema

Im Gespräch mit einem Oracle Mitarbeiter letztes Jahr kam die Idee auf, warum Oracle keinen Select bietet, um den den Stand des Listeners abzufragen. 

Der Mitarbeiter (nennen wir ihn mal Sebastian S. :-) ) wollte die Idee ins Development bringen. Bis das umgesetzt ist, helfen wir uns selbst:

Unter Linux legen wir uns eine kleine Shell Script Datei an

vi /home/oracle/scripts/lsnr_status.sh
#!/bin/bash
ORACLE_HOME=/opt/oracle/product/23c/dbhomeFree
$ORACLE_HOME/bin/lsnrctl status | /usr/bin/awk '
BEGIN { OFS=","; print "LINE"}
{ print $0 }'

Und geben dieser Datei Ausführungsrechte:

chmod +x /home/oracle/scripts/lsnr_status.sh

Dann brauchen wir ein Datenbank Directory auf diesen Ordner:

CREATE DIRECTORY ext_tab_dir AS '/home/oracle/scripts';
grant read,execute on directory ext_tab_dir to muniq;

Seit Version 19c kann eine External Table ohne ein Create direct “On the Fly” erzeugt werden:

SELECT * FROM EXTERNAL (
( line varchar2(2000))
 TYPE oracle_loader
 DEFAULT DIRECTORY ext_tab_dir
 ACCESS PARAMETERS (
   RECORDS DELIMITED BY NEWLINE
    PREPROCESSOR ext_tab_dir:'lsnr_status.sh'
   FIELDS CSV WITH EMBEDDED TERMINATED BY ';' 
   OPTIONALLY ENCLOSED BY '"'
   MISSING FIELD VALUES ARE NULL )
 LOCATION ('lsnr_status.sh')
 REJECT LIMIT UNLIMITED ) inline_ext_tab;

Bei älteren Versionen legt man halt zuesrt die Tabelle an:

CREATE TABLE ext_listener_status (
    line VARCHAR2(4000)
  )
  ORGANIZATION EXTERNAL (
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY ext_tab_dir
    ACCESS PARAMETERS (
      RECORDS DELIMITED BY NEWLINE
      --PREPROCESSOR ext_tab_dir:'lsnr_status.sh'
      FIELDS TERMINATED BY ','
      MISSING FIELD VALUES ARE NULL
      ( line )
    )
    LOCATION ('lsnr.info')
  );
SELECT * FROM ext_listener_status;

Das war es schon, jetzt können Sie den Listener Zustand auch innerhalb der Datenbabnk abfragen (also via SQL*Plus, SQL cl, SQL Developer oder TOAD, oder …)