Java 远程调试PL/SQL包

Java 远程调试PL/SQL包,java,oracle,debugging,plsql,plsqldeveloper,Java,Oracle,Debugging,Plsql,Plsqldeveloper,假设我有一个正在运行的JavaWeb应用程序,我试图在其中保存一些数据,使用JDBC调用数据库中的PL/SQL包 在java代码中,调用了execute()函数,将要保存的数据发送到数据库中的PL/SQL包,该包将处理数据并最终保存它 是否有一种方法可以使用Oracle SQL Developer或PL/SQL Developer动态调试被调用的PL/SQL包,这些IDE是否支持这种远程调试功能?您需要的是Oracle SQL Developer中提供的远程调试功能。 有几个先决条件需要满足:

假设我有一个正在运行的JavaWeb应用程序,我试图在其中保存一些数据,使用JDBC调用数据库中的PL/SQL包

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


是否有一种方法可以使用Oracle SQL Developer或PL/SQL Developer动态调试被调用的PL/SQL包,这些IDE是否支持这种远程调试功能?

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

  • 所有要调试的包都应编译以进行调试。:
    alter package SCHEMA.package\u NAME编译调试
  • 应向要从中执行远程调试的架构的用户授予适当的权限:
    • 将调试连接会话授予用户名用于连接到远程用户会话的可用性
    • 将调试过程授予用户名用于调试过程(包括捆绑在包中的那些过程)
    • 如果您使用Oracle 12c,您应该考虑其他ACL限制,查看并注意有一些有用的Oracle视图,如
      dba\u network\u ACL\u privileges
      ,用于检查您现有的ACL权限
  • 远程用户应该能够为调试器“发出信号”
    • 将SYS.DBMS\u DEBUG\u JDWP上的execute授予远程用户名
      访问其
      连接\u TCP
      过程
  • 如果满足了这些要求(或您能够满足这些要求),您可以在Sue Harper的博客(或同一作者的Oracle博客,或)中遵循这些要求来实现您的目标。简言之:

  • 您应该在特定端口上本地启动调试侦听器并设置断点(或设置适当的调试器选项)
  • 远程用户应该在运行感兴趣的代码之前运行exec DBMS\u DEBUG\u JDWP.CONNECT\u TCP('ip address',port),这可以在会话登录触发器上实现
  • 远程调试代码
  • 关于这一点,可能有一些更具体的说法(对于Oracle来说,这更真实),但我通常是这样处理的


    我还想提到,PL/SQL开发人员很不幸地使用了远程调试(使用
    DBMS\u DEBUG
    包而不是
    DBMS\u DEBUG\u JDWP
    ),即使是在最新版本中。Oracle SQL Developer是用Java编写的,PL/SQL Developer不是,我认为这是问题的根源。

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

  • 所有要调试的包都应编译以进行调试。:
    alter package SCHEMA.package\u NAME编译调试
  • 应向要从中执行远程调试的架构的用户授予适当的权限:
    • 将调试连接会话授予用户名用于连接到远程用户会话的可用性
    • 将调试过程授予用户名用于调试过程(包括捆绑在包中的那些过程)
    • 如果您使用Oracle 12c,您应该考虑其他ACL限制,查看并注意有一些有用的Oracle视图,如
      dba\u network\u ACL\u privileges
      ,用于检查您现有的ACL权限
  • 远程用户应该能够为调试器“发出信号”
    • 将SYS.DBMS\u DEBUG\u JDWP上的execute授予远程用户名
      访问其
      连接\u TCP
      过程
  • 如果满足了这些要求(或您能够满足这些要求),您可以在Sue Harper的博客(或同一作者的Oracle博客,或)中遵循这些要求来实现您的目标。简言之:

  • 您应该在特定端口上本地启动调试侦听器并设置断点(或设置适当的调试器选项)
  • 远程用户应该在运行感兴趣的代码之前运行exec DBMS\u DEBUG\u JDWP.CONNECT\u TCP('ip address',port),这可以在会话登录触发器上实现
  • 远程调试代码
  • 关于这一点,可能有一些更具体的说法(对于Oracle来说,这更真实),但我通常是这样处理的


    我还想提到,PL/SQL开发人员很不幸地使用了远程调试(使用
    DBMS\u DEBUG
    包而不是
    DBMS\u DEBUG\u JDWP
    ),即使是在最新版本中。Oracle SQL Developer是用Java编写的,PL/SQL Developer不是,我认为这是问题的根源。

    你说的“调试数据库”是什么意思?我不熟悉这个概念。PL/SQL的交互式调试是可能的,但前提是我们事先做好了准备。不仅仅是因为它需要授予某些特权。请现在读一下匆忙中写的@mathguy thxcorrected@APC谢谢,我将对此进行检查,希望这将与JDBC对该过程的调用一起工作。我反对将其关闭为“太宽”。远程调试是尽可能基于主题的编程,虽然可能有多个备选方案,但它不像是一个浪费的选项海洋。问“我需要为我正在开发的在线购物应用程序保存一些数据,我该怎么做?”是一个过于宽泛的问题。这个不是。你说的“调试数据库”是什么意思?我不熟悉这个概念。PL/SQL的交互式调试是可能的,但前提是我们事先做好了准备。不仅仅是因为它需要授予某些特权。请现在读一下匆忙中写的@mathguy thxcorrected@APC谢谢,我将对此进行检查,希望这将与JDBC对该过程的调用一起工作。我反对将其关闭为“太宽”。远程调试与主题编程相同