远程调试PL / SQL包

Z3d*_*d4s 1 java oracle debugging plsql plsqldeveloper

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

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

有没有一种方法可以使用Oracle SQL Developer或PL / SQL Developer即时调试称为PL / SQL的程序包,这些IDE是否支持这种远程调试功能?

Goo*_*Dok 5

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

  1. 您要调试的所有软件包都应编译为debug
    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限制,请在此处此处查看,还请注意,有一些有用的Oracle视图,例如dba_network_acl_privileges检查您现有的ACL特权。
  3. 远程用户应该能够为调试器“发出信号”
    • grant execute on SYS.DBMS_DEBUG_JDWP to REMOTE_USER_NAME;有权使用其CONNECT_TCP程序

如果这些要求都满足(或者你能满足他们),您可以按照例如该条目中苏哈珀的博客(或该文章中的Oracle博客同一作者,或这一个),以达到自己的目标。简而言之:

  1. 您应该在特定端口上本地启动调试侦听器并设置断点(或设置适当的调试器选项)。
  2. 远程用户应exec DBMS_DEBUG_JDWP.CONNECT_TCP( 'ip-address', port )在运行感兴趣的代码之前运行,这可以在会话登录触发器上实现。
  3. 远程调试代码。

对此可能有一些更具体的说明(对于Oracle,它不只是真实的),但这就是我通常的处理方式。

我还要提到PL / SQL Developer不幸的,即使在最新版本中,它也不支持远程调试(使用DBMS_DEBUG包而不是DBMS_DEBUG_JDWP)。Oracle SQL Developer是用Java编写的,而PL / SQL Developer不是Java的,我认为这是问题的根源。