如何在 SQL Developer 上远程调试 PLSQL 代码?

Posted

技术标签:

【中文标题】如何在 SQL Developer 上远程调试 PLSQL 代码?【英文标题】:How to Remote Debug PLSQL Code on SQL Developer? 【发布时间】:2014-03-10 21:34:20 【问题描述】:

我正在开发一个基于 java 的企业应用程序,并且我正在寻找在请求来自应用程序时在 sql developer 上调试 plsql 代码的方法。

我能够使用本地编写的测试 sql 程序调用我的数据库上的特定过程来远程调试 pl sql 代码。

当请求来自应用程序时,我希望能够实现相同的调试控制。

通过右键单击数据库连接并单击远程调试,我得到一个“JPDA 侦听器”弹出窗口,询问我端口和本地地址。 通过输入部署此应用程序的机器的 IP 地址,我收到错误 - '调试器无法使用指定的参数侦听 JPDA。是否要更改参数?'

我如何让它工作?

【问题讨论】:

【参考方案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】:

当对话框询问您的 IP 地址和端口时,您必须提供运行调试器的机器的值。我怀疑当您说输入部署应用程序的机器的 ip 地址和端口时,您的意思是另一台计算机。

另一个重要的事情是,如果您在数据库服务器和运行调试器的机器之间有 NAT 或防火墙,您必须启用端口转发或将您的 ip:port 列入白名单。当询问 IP 和端口时,您必须输入数据库服务器可访问的外部 IP 地址。

the documentation 中有足够详细的分步指南。虽然它适用于 JDeveloper,但同样的规则也适用于 SQL Developer。

【讨论】:

【参考方案3】:

    在 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

【讨论】:

这些链接可能包含问题的答案,但您应始终在答案中总结链接内容,以便在这些网站发生变化或无法访问时您的答案仍然有效。【参考方案4】:

我可以在安装 SQL Developer(非 JRE 版本)和 JDK 1.8 后让它工作。并授予必要的权限(如 SYS)。还启用了客户端 IP(运行 SQL 开发人员的位置)的网络 ACL。

详细步骤请参考博客。

http://rajiv-kuriakose.blogspot.in/2016/08/how-to-enable-remote-debugging-in-sql.html

【讨论】:

以上是关于如何在 SQL Developer 上远程调试 PLSQL 代码?的主要内容,如果未能解决你的问题,请参考以下文章

Regexp_like 在调试器网站上工作,但不在 Oracle SQL Developer 上工作

pl/sql developer中如何调试存储过程

pl/sql developer中如何调试存储过程

windows环境下安装连接远程oracle工具PL/SQL Developer 11.0

windows环境下安装连接远程oracle工具PL/SQL Developer 11.0

在 Galaxy Nexus 上远程调试 Chrome