You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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;

已完成以下配置:

  1. 配置了包含该网站所有证书的钱包,认为钱包无问题。
  2. 配置网络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;
  1. 为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 03:13:17