远程调试PL / SQL包

时间:2017-12-28 14:18:31

标签: java oracle debugging plsql plsqldeveloper

假设我有一个正在运行的java Web应用程序,我正在尝试使用在数据库中调用PL / SQL包的JDBC来保存一些数据。

在java代码中,调用了execute()函数,要保存的数据已经发送到数据库中的PL / SQL包,它将处理数据并最终保存。

有没有办法使用Oracle SQL Developer或PL / SQL Developer动态调试被调用的PL / SQL包,这些IDE是否支持这样的远程调试功能?

1 个答案:

答案 0 :(得分:4)

您正在寻找的是Oracle SQL Developer中提供的远程调试功能。 有几个先决条件需要满足:

  1. 您要调试的所有软件包都应编译以进行调试
    alter package SCHEMA.PACKAGE_NAME compile debug;
  2. 应使用适当的权限授予要从中执行远程调试的模式的用户:
    • grant debug connect session to USER_NAME;用于连接远程用户会话的可用性
    • grant debug any procedure to USER_NAME;用于调试程序(包括捆绑在软件包中的程序)的可用性
    • 如果你使用Oracle 12c,你应该考虑额外的ACL限制,看看herehere,还要注意有一些有用的Oracle视图,比如dba_network_acl_privileges来检查您现有的ACL权限
  3. 远程用户应该能够为调试器“发出信号”
    • grant execute on SYS.DBMS_DEBUG_JDWP to REMOTE_USER_NAME;可以访问其CONNECT_TCP程序
  4. 如果满足这些要求(或者您能够满足这些要求),您可以遵循以下要求:在Sue Harper的博客中this entry(或同一作者的Oracle博客中的this article,或this one)来实现您的目标。简而言之:

    1. 您应该在特定端口上本地启动调试侦听器并设置断点(或设置正确的调试器选项)。
    2. 远程用户应在运行感兴趣的代码之前运行exec DBMS_DEBUG_JDWP.CONNECT_TCP( 'ip-address', port ),这可以在会话登录触发器上实现。
    3. 远程调试代码。
    4. 可能有一些更具体的内容(使用Oracle不仅仅是真实的),但这就是我通常处理它的方式。

      另外我想提一下PL​​ / SQL Developer不幸does not support远程调试(使用DBMS_DEBUG包而不是DBMS_DEBUG_JDWP),即使在最新版本中也是如此。 Oracle SQL Developer是用Java编写的,PL / SQL Developer不是,我认为这是问题的根源。