请求 utl_http 包时 Oracle 错误“ORA-28759:打开文件失败”

Posted

技术标签:

【中文标题】请求 utl_http 包时 Oracle 错误“ORA-28759:打开文件失败”【英文标题】:Oracle error "ORA-28759: failure to open file" when requesting utl_http package 【发布时间】:2014-12-29 03:23:17 【问题描述】:

我无法执行以下语句-

DECLARE
    lo_req  UTL_HTTP.req;
    lo_resp UTL_HTTP.resp;
  BEGIN
    UTL_HTTP.SET_WALLET ('file: C:\app\wallet','abcd@1234');
    lo_req := UTL_HTTP.begin_request('https://wordpress.org/');
    lo_resp := UTL_HTTP.get_response(lo_req);
    dbms_output.put_line(lo_resp.status_code);
   UTL_HTTP.end_response(lo_resp);
END;

我的钱包路径是 C:\app\wallet,密码是 abcd@1234。 执行此代码时,显示以下错误:

ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1130
ORA-28759: failure to open file

我该如何解决?

【问题讨论】:

你能检查一下Oracle用户是否有文件的读取权限吗? 删除file:C:\app\wallet 之间的空格。祝你好运。 如何检查? @vishad 【参考方案1】:

documentation for UTL_HTTP.SET_WALLET() 关于路径有两点要说:

    Windows上的格式是这样的file:c:\WINNT\Profiles\username\WALLETS 钱包路径必须可以从数据库服务器访问。

很明显,您的代码未能通过第一点,因为您在 file 关键字和驱动器号之间有一个空格。

也许第二点也适用:那是您数据库服务器上的驱动器吗?

【讨论】:

我已删除文件:和路径之间的 。但仍然收到相同的错误消息。我不确定数据库用户是否可以访问路径。有什么方法可以确保这一点或如何为钱包创建目录路径?请解释一下。 检查运行 Oracle 服务器的帐户是否对提供的文件夹中的 Wallet 文件具有访问权限。我有一个案例,Oracle 服务器由另一个用户帐户运行并导致此错误。【参考方案2】:

您需要为 cwallet.sso 和 ewallet.p12 文件的相应用户或组添加权限。如果您使用了 orakpi 实用程序,则可能不存在权限。

对于 Windows,

1.选择文件,右击,选择属性。

2.选择安全选项卡并单击更改权限。

3.单击添加 > 位置,然后选择适当的位置。

4.在选择用户或组字段中,输入 ora_dba。单击检查名称按钮以验证 ora_dba 组是否存在。

5.单击“确定”,显示“权限条目”对话框。

6.选中完全控制旁边的允许复选框,然后单击确定。

7.在高级安全对话框中单击应用。

8.单击确定退出对话框。

【讨论】:

以上是关于请求 utl_http 包时 Oracle 错误“ORA-28759:打开文件失败”的主要内容,如果未能解决你的问题,请参考以下文章

对于使用 Oracle pl sql 的 http 请求,是不是有替代 utl_http 包的方法?

通过具有 78000 个字符的 Oracle 12c DB 使用 utl_http 请求 REST 调用正文

Oracle 10g UTL_HTTP begin_request 返回 ORA-29273: HTTP 请求失败

Oracle UTL_HTTP 请求返回比在 Python 或 curl 中完成相同请求时更短的响应

确定需要哪个证书才能使用 Oracle utl_http 执行 https 发布

Oracle 12c UTL_HTTP Cookie 值长度大于 1024