¿Cómo habilitar el depurador PL/SQL de SQL Developer para trabajar con Oracle 12c?

SQL Developer posee un depurador de código PL / SQL que no necesita mayor configuración si se lo utiliza con Oracle 11g u otra versión previa. Normalmente necesitamos asegurarnos de que los siguientes pasos han sido ejecutados antes de intentar usar el depurador:

  1. Otorgar el privilegio DEBUG CONNECT SESSION al schema que contiene el código PL/SQL.
  2. Otorgar el privilegio de ejecución (EXECUTE) sobre el paquete DBMS_DEBUG_JDWP al schema que contienen el código PL/SQL.
  3. Verificar que tenemos el privilegio de ejecución (EXECUTE) sobre el código PL/SQL (paquete, procedimiento, función) que se desea depurar.
  4.  Verificar que el código PL/SQL se encuentra compilado en “modo debug” .

Si desean más información sobre los cuatro pasos que acabo de mencionar y cómo utilizar el depurador, pueden visitar el blog de Jeff Smith (PM de SQL Developer) que tiene una publicación sobre estos temas.

Ahora veamos lo que sucede cuando el código PL/SQL que deseamos depurar se encuentra en Oracle 12c. Los cuatro pasos que mencioné previamente todavía son necesarios pero ya no son suficientes. Miren el error que me apareció cuando intenté usar el depurador .

Executing PL/SQL: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( ‘192.168.0.10’, ‘49428’ )
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at “SYS.DBMS_DEBUG_JDWP”, line 68
ORA-06512: at line 1
Process exited.
Disconnecting from the database SCOTT – ORA12CPDB1

A partir de Oracle 12c , si deseamos usar un depurador de código PL/SQL como el que se incluye en SQL Developer o JDeveloper y que implementa el Java Debug Wire Protocol (JDWP), es necesario otorgar el privilegio de control de acceso (ACL) JDWP para permitir que la sesión de la base de datos se comunique con el depurador.

A continuación una manera de configurar el acceso de red para operaciones JDWP :

BEGIN
 DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
 (
 host => '192.168.0.10',
 lower_port => null,
 upper_port => null,
 ace => xs$ace_type(privilege_list => xs$name_list('jdwp'),
 principal_name => 'scott',
 principal_type => xs_acl.ptype_db)
 );
END;

Host (donde se está ejecutando el depurador) puede puede ser un nombre de host, nombre de dominio, dirección IP o subred.

Principal_name en sección la entrada de control de acceso (ACE ) es el schema que contiene el código PL/SQL que se desea depurar.

Una vez que ejecutamos el bloque PL/SQL que configura el acceso de red para operaciones JDWP, el error desaparece y se puede empezar a utilizar el depurador como se muestra a continuación.

Connecting to the database SCOTT – ORA12CPDB1.
Executing PL/SQL: ALTER SESSION SET PLSQL_DEBUG=TRUE
Executing PL/SQL: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( ‘192.168.0.10’, ‘49428’ )
Debugger accepted connection from database on port 49428.
Executing PL/SQL: CALL DBMS_DEBUG_JDWP.DISCONNECT()
Inside the Procedure
Process exited.
Disconnecting from the database SCOTT – ORA12CPDB1.
Debugger disconnected from database.

Espero que les sirva cuando sea tiempo de migrar a Oracle 12c .

Anuncios