SQL Developer中无法调试PL/SQL存储过程的问题如何解决?
错误原因
该报错是Oracle的访问控制列表(ACL)限制了当前数据库用户使用DBMS_DEBUG_JDWP包建立TCP连接的权限。PL/SQL调试功能需要Oracle服务端主动回连你本地SQL Developer的监听端口,默认未授权的场景下就会抛出ORA-24247错误。
解决方案
需要使用SYS或者拥有DBA权限的账号执行以下授权操作:
步骤1:提前确认核心信息
- 需要调试权限的数据库用户名(Oracle用户名默认大写存储,后续操作需填写大写)
- SQL Developer所在的主机IP,报错示例中为
127.0.0.1,如果是连接远程数据库请填写本地机器的公网/局域网IP - 端口范围建议放开1024到65535的动态端口范围,避免每次调试随机端口变化需要重复授权
步骤2:创建ACL规则(如果不存在对应规则)
BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL( acl => 'sql_developer_debug_acl.xml', description => 'ACL for SQL Developer PL/SQL Debugging', principal => '替换为你的数据库用户名(大写)', is_grant => TRUE, privilege => 'connect', start_date => SYSTIMESTAMP, end_date => NULL ); COMMIT; END; /
如果执行时提示同名ACL已存在,执行以下语句追加权限即可:
BEGIN DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE( acl => 'sql_developer_debug_acl.xml', principal => '替换为你的数据库用户名(大写)', is_grant => TRUE, privilege => 'connect' ); COMMIT; END; /
步骤3:绑定允许访问的主机和端口范围
BEGIN DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL( acl => 'sql_developer_debug_acl.xml', host => '替换为SQL Developer所在主机IP', lower_port => 1024, upper_port => 65535 ); COMMIT; END; /
步骤4:授予调试基础权限(部分Oracle版本需要额外配置)
-- 授予调试连接权限 GRANT DEBUG CONNECT SESSION TO 替换为你的数据库用户名(大写); -- 如果只需要调试自有存储过程,可以替换为 GRANT DEBUG ON PROCEDURE 存储过程名 TO 用户名; GRANT DEBUG ANY PROCEDURE TO 替换为你的数据库用户名(大写);
注意:生产环境操作请严格控制允许的主机IP和端口范围,不要使用通配符*放开所有主机访问权限,避免安全风险。
验证生效
授权完成后重启SQL Developer,重新触发调试操作即可正常使用。
内容的提问来源于stack exchange,提问作者Lova Chittumuri
相关产品推荐
相关产品推荐

