在Oracle SQL Developer中调用UTL_HTTP.REQUEST时遇ORA-29273错误求助
问题描述
尝试执行以下SQL语句测试与openexchangerates.org的Web服务连接:
SELECT utl_http.request('openexchangerates.org',NULL,'file:C:/Users/Uchih/OneDrive/Escritorio/wallet','password123') from dual;
已完成以下配置:
- 配置了包含该网站所有证书的钱包,认为钱包无问题。
- 配置网络ACL:
BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL( acl => 'otro_acl.xml', description => 'otra prueba', principal => 'APEX_220200', is_grant => TRUE, privilege => 'connect' ); END; BEGIN DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE( acl => 'otro_acl.xml', principal => 'APEX_220200', is_grant => TRUE, privilege => 'resolve' ); END; BEGIN DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL( acl => 'otro_acl.xml', host => 'openexchangerates.org', lower_port => NULL, upper_port => NULL ); END;
- 为HR用户分配权限:
BEGIN DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE( acl => 'otro_acl.xml', principal => 'HR', is_grant => TRUE, privilege => 'connect' ); END; BEGIN DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE( acl => 'otro_acl.xml', principal => 'HR', is_grant => TRUE, privilege => 'resolve' ); END;
执行测试语句时出现错误:
ORA-29273: fallo de la solicitud HTTP ORA-06512: en "SYS.UTL_HTTP", línea 1530 ORA-28759: fallo al abrir el archivo ORA-06512: en "SYS.UTL_HTTP", línea 651 ORA-06512: en "SYS.UTL_HTTP", línea 1472 ORA-06512: en línea 1 29273. 00000 - "HTTP request failed" *Cause: The UTL_HTTP package failed to execute the HTTP request. *Action: Use get_detailed_sqlerrm to check the detailed error message. Fix the error and retry the HTTP request.
需要排查ORA-29273错误的原因及解决方法。
错误排查与解决方法
从错误栈看,核心问题是ORA-28759: 文件打开失败,这是引发UTL_HTTP请求失败的根本原因,结合配置从以下方向逐一排查:
1. 钱包路径权限问题
Oracle数据库进程(通常以ORACLE用户或服务运行用户身份)需要对钱包路径C:/Users/Uchih/OneDrive/Escritorio/wallet拥有读取权限:
- 检查Windows系统中该文件夹的安全权限,确保Oracle服务运行的用户(如
Local System或指定域用户)具备读取、列出文件夹内容的权限。 - OneDrive路径存在同步机制和权限限制,建议将钱包文件夹复制到本地非同步目录(如
C:/Oracle/Wallets/),再修改SQL中的路径。
2. 钱包路径格式与准确性
- 确认路径拼写无错误,比如用户名
Uchih、文件夹名称是否准确;路径中的空格可能导致解析异常,尽量使用无空格的路径。 - Windows系统下UTL_HTTP支持正斜杠路径,若仍有问题可尝试转义反斜杠格式:
'file:C:\\Users\\Uchih\\OneDrive\\Escritorio\\wallet'。
3. 钱包文件完整性验证
即使认为钱包无问题,仍需确认:
- 钱包包含
openexchangerates.org的完整证书链(根CA+中间CA证书),可使用orapki工具查看:orapki wallet display -wallet C:/Oracle/Wallets/ -pwd password123 - 验证钱包密码
password123正确,无大小写或特殊字符输入错误。
4. 网络ACL与用户权限校验
确认执行SQL的HR用户权限已生效:
SELECT host, principal, privilege, is_grant FROM dba_network_acls JOIN dba_network_acl_privileges ON dba_network_acls.acl = dba_network_acl_privileges.acl WHERE principal = 'HR' AND host = 'openexchangerates.org';
若查询结果中HR的connect和resolve权限is_grant为TRUE,则ACL配置正常;否则重新执行权限分配语句并提交。
5. HTTP请求地址规范
openexchangerates.org默认使用HTTPS协议,需在请求中明确指定协议和端口:
SELECT utl_http.request('https://openexchangerates.org:443', NULL, 'file:C:/Oracle/Wallets/', 'password123') FROM dual;
未指定协议时,UTL_HTTP可能默认使用HTTP(端口80),而该网站可能强制跳转HTTPS,引发连接异常。
6. 数据库网络环境检查
- 在数据库服务器上用
curl或浏览器测试能否访问https://openexchangerates.org,确认网络连通性。 - 若服务器处于代理环境,需为UTL_HTTP配置代理:
BEGIN utl_http.set_proxy('proxy_address:port'); END;
内容的提问来源于stack exchange,提问作者The Storyteller
相关产品推荐
相关产品推荐

