Debuggen in 12c mit dem SQL Developer

01.
Januar
2015
Veröffentlicht von: Hildegard Asenbauer

Der SQL Developer als Oracle-proprietäres Tool erfreut sich mittlerweile großer Beliebtheit. Entwickler, die den SQL Developer auch zum Debuggen nutzen, werden bei 12c-Datenbanken jedoch erst einmal eine neue Hürde überwinden müssen.

Der SQL Developer als Oracle-proprietäres Tool erfreut sich mittlerweile großer Beliebtheit. Entwicker, die den SQL Developer auch zum Debuggen nutzen, werden bei 12c-Datenbanken jedoch erst einmal eine neue Hürde überwinden müssen. Während für andere Tools, wie TOAD oder PL/SQL Developer, auch in Version 12c die Standard-Grants (DEBUG ANY PROCEDURE, DEBUG CONNECT SESSION) dafür ausreichen, wird für den SQL Developer zusätzlich eine ACL-Freigabe benötigt. Ohne ACL erhalten Sie folgende Fehlermeldung:

Verbindung mit der Datenbank O12c.
PL/SQL wird ausgeführt: ALTER SESSION SET PLSQL_DEBUG=TRUE
PL/SQL wird ausgeführt: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '10.0.0.21', '50229' )
ORA-24247: Netzwerkzugriff von Access Control-Liste (ACL) abgelehnt
ORA-06512: in "SYS.DBMS_DEBUG_JDWP", Zeile 68
ORA-06512: in Zeile 1
Prozess beendet.
Abmeldung von der Datenbank O12c.

Der Grund liegt darin, dass der Debugger des SQL Developers - im Gegensatz zu den oben genannten Tools - mit dem Package DBMS_DEBUG_JDWP ("Java Debug Wire Protocol") arbeitet. Und ab Version 12c ist dafür eine entsprechende Freigabe erforderlich. Diese wird über das Package DBMS_NETWORK_ACL_ADMIN erteilt, das hier schon einmal erwähnt wurde. Die Art der Freigabe lautet in diesem Fall jdwp:

BEGIN
   DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
      host => '10.0.0.21',
      ace  => xs$ace_type(
                privilege_list => xs$name_list('jdwp'),  
                principal_name => 'SCOTT',
                principal_type => xs_acl.ptype_db)); 
END;
/

Als Host muss selbstverständlich der Rechner angegeben werden, auf dem der SQL Developer läuft. Die Angabe von Ports hat Tücken; am einfachsten ist es, Sie lassen sie ganz weg, wie hier gezeigt. Zwar können Sie im SQL Developer eine Port-Range für den Debugger einstellen, aber wenn Sie beim Aufruf von DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE sowohl lower_port als auch upper_port angeben, wird das mit dieser Fehlermeldung

ORA-24244: Ungültiger Host oder Port für Zuweisung der Access Control-Liste (ACL)
ORA-06512: in "SYS.DBMS_NETWORK_ACL_ADMIN", Zeile 1071

quittiert. Geben Sie NUR den lower_port an, so ist auch nur dieser EINE Port freigegeben. Nach erfolgreicher Freigabe können Sie - an diesem Rechner - den Debugger starten:

Verbindung mit der Datenbank O12c.
PL/SQL wird ausgeführt: ALTER SESSION SET PLSQL_DEBUG=TRUE
PL/SQL wird ausgeführt: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '10.0.0.21', '50815' )
Debugger hat Verbindung von Datenbank auf Port 50815 akzeptiert.
....

An jedem anderen Rechner bekommen Sie weiterhin die Fehlermeldung, dass die ACL abgelehnt wurde:

PL/SQL wird ausgeführt: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '10.0.0.190', '57524' )
ORA-24247: Netzwerkzugriff von Access Control-Liste (ACL) abgelehnt

Sonstige Funktionen von DBMS_DEBUG_JDWP

Das Package DBMS_DEBUG_JDWP enthält übrigens noch zwei weitere, interessante Funktionen, über die sich SID und serial# der eigenen Session - auch ohne Admin-Rechte - ermitteln lassen. Und das nicht erst in 12c:

SELECT dbms_debug_jdwp.current_session_id,
       dbms_debug_jdwp.current_session_serial
  FROM DUAL;

ACEs sind dafür nicht erforderlich, da ja auf keine externe Ressource zugegriffen wird.

Sie möchten wissen, was ist denn eigentlich neu in der Oracle Datenbank Version 12c? Dann besuchen Sie unsere Opens internal link in current windowSchulung Neuerungen 12c und stöbern Sie in der Rubrik Oracle Neuerungen zu 12c Release 1 unserer Tipps & Tricks, hier finden Sie weitere kleine Hilfen, die das Leben mit Oracle 12c erleichtern. ;-)

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.