远程调试PL / SQL包

问题描述 投票:1回答:1

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

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

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

java oracle debugging plsql plsqldeveloper
1个回答
4
投票

您正在寻找的是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限制,看看herehere,还要注意有一些有用的Oracle视图,比如dba_network_acl_privileges来检查你现有的ACL权限
  3. 远程用户应该能够为调试器“发出信号” grant execute on SYS.DBMS_DEBUG_JDWP to REMOTE_USER_NAME;可以使用其CONNECT_TCP程序

如果满足这些要求(或者您能够满足这些要求),您可以遵循以下要求:在Sue Harper的博客中的this entry(或同一作者的Oracle博客中的this article,或this one)来实现您的目标。简而言之:

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

可能有一些更具体的内容(使用Oracle不仅仅是真实的),但这就是我通常处理它的方式。

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

© www.soinside.com 2019 - 2024. All rights reserved.