远程调试 PL/SQL 个包

Remote debug PL/SQL packages

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

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

有没有办法使用 Oracle SQL Developer 或 PL/SQL Developer 即时调试调用的 PL/SQL 包,做这些 IDE 的支持这样的远程调试功能?

您正在寻找的是 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 限制,看看 here and here,还要注意有一些有用的 Oracle 视图,比如 dba_network_acl_privileges 来检查你现有的 ACL 权限
  3. 远程用户应该能够 "give a signal" 进行调试
    • grant execute on SYS.DBMS_DEBUG_JDWP to REMOTE_USER_NAME; 可以访问其 CONNECT_TCP 过程

如果满足这些要求(或者您能够满足),您可以关注例如this entry in Sue Harper's blog (or this article in Oracle blog of the same author, or this one) 以实现您的目标。简而言之:

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

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

我还想提一下 PL/SQL 开发人员不幸 does not support 远程调试(使用 DBMS_DEBUG 包而不是 DBMS_DEBUG_JDWP),即使在最新版本中也是如此。 oracleSQLDeveloper是写在Java,PL/SQLDeveloper不是,我觉得这是问题的根源。