假设我有一个正在运行的java Web应用程序,我试图使用在数据库中调用PL / SQL包的JDBC来保存一些数据。
在java代码中,调用了execute()函数,要保存的数据已经发送到数据库中的PL / SQL包,它将处理数据并最终保存。
有没有办法使用Oracle SQL Developer或PL / SQL Developer动态调试被调用的PL / SQL包,这些IDE是否支持这样的远程调试功能?
您正在寻找的是Oracle SQL Developer中提供的远程调试功能。有几个先决条件要满足:
alter package SCHEMA.PACKAGE_NAME compile debug;
grant debug connect session to USER_NAME;
用于连接远程用户会话的可用性
grant debug any procedure to USER_NAME;
用于调试程序(包括捆绑在软件包中的程序)的可用性
如果你使用Oracle 12c,你应该考虑额外的ACL限制,看看here和here,还要注意有一些有用的Oracle视图,比如dba_network_acl_privileges
来检查你现有的ACL权限grant execute on SYS.DBMS_DEBUG_JDWP to REMOTE_USER_NAME;
可以使用其CONNECT_TCP
程序如果满足这些要求(或者您能够满足这些要求),您可以遵循以下要求:在Sue Harper的博客中的this entry(或同一作者的Oracle博客中的this article,或this one)来实现您的目标。简而言之:
exec DBMS_DEBUG_JDWP.CONNECT_TCP( 'ip-address', port )
,这可以在会话登录触发器上实现。可能有一些更具体的内容(使用Oracle不仅仅是真实的),但这就是我通常处理它的方式。
另外我想提一下PL / SQL Developer不幸的是does not support远程调试(使用DBMS_DEBUG
包而不是DBMS_DEBUG_JDWP
),即使在最新版本中也是如此。 Oracle SQL Developer是用Java编写的,PL / SQL Developer不是,我认为这是问题的根源。