我正在研究基于java的企业应用程序,我正在寻找在请求来自应用程序时在sql developer上调试plsql代码的方法。
我可以使用本地编写的测试sql程序远程调试pl sql代码,调用我的数据库上的特定过程。
我希望能够在请求来自应用程序时实现相同的调试控制。
通过右键单击数据库连接并单击远程调试,我得到一个'监听器for JPDA'弹出窗口,询问我的端口和本地地址。 通过输入部署此应用程序的计算机的IP地址,我收到错误 - '调试器无法使用指定的参数侦听JPDA。你想改变参数吗?'
我如何使这项工作?
答案 0 :(得分:1)
在SQL Developer帮助中搜索:运行和调试函数和过程 向下滚动到远程调试
此博客来自内部Oracle人员解释它:http://barrymcgillin.blogspot.com/2012/04/remote-debugging-with-sql-developer.html
Sue用作SQL Developer的产品经理:http://sueharper.blogspot.com/2006/07/remote-debugging-with-sql-developer_13.html
答案 1 :(得分:1)
正如MDW所说,Sue Harper's blog就是您所需要的。
要进行设置,基本上,在SQLDeveloper中右键单击您的连接,然后选择“远程调试”。输入要监听的数据库主机和端口。在您的客户端代码中,例如在java中,添加以下内容:
private void debugPlSql() throws SQLException {
CallableStatement cstmt = null;
try {
cstmt = conn.prepareCall(
"call DBMS_DEBUG_JDWP.CONNECT_TCP('...my-ip-address...', 16000 )");
cstmt.executeUpdate();
} finally {
// cstmt.close() ...
}
}
注意my-ip-address
是您的数据库服务器本地IP地址,16000是我使用的调试端口,它将我带回到您的问题(现在已经过时了 - 很抱歉)
我有这个问题(警告),错误并没有那么有用,但在我的情况下,只是默认端口4000不可用。这就是为什么我的示例使用端口16000,因为它可用并且在我更改SQLDeveloper中的端口时工作正常。
我在执行感兴趣的sql之前调用debugPlSql
。
修改强>
不要忘记:
GRANT DEBUG CONNECT SESSION TO myuser;
GRANT DEBUG ANY PROCEDURE TO myuser;
答案 2 :(得分:0)
当对话框询问您有关IP地址和端口的信息时,您必须提供运行调试器的机器的值。我怀疑当你说你输入部署应用程序的机器的ip地址和端口时,你的意思是另一台计算机。
另一个重要的事情是,如果数据库服务器和运行调试器的机器之间有NAT或防火墙,则必须启用端口转发或将IP:端口列入白名单。当被问及ip和port时,你必须输入数据库服务器可以访问的外部IP地址。
the documentation中有足够详细的分步指南。虽然它适用于JDeveloper,但同样的规则也适用于SQL Developer。
答案 3 :(得分:0)
我可以在安装SQL Developer(非JRE版本)和JDK 1.8之后使用它。并授予必要的权限(如SYS)。还为客户端IP启用了网络ACL(SQL开发人员正在运行)。
请参阅博客了解详细步骤。
http://rajiv-kuriakose.blogspot.in/2016/08/how-to-enable-remote-debugging-in-sql.html