0

我正在开发一个项目,我试图在我的 ATP 实例(共享 Exadata 基础设施)中使用 UTL_HTTP。

我创建了如下网络 ACL:

BEGIN
   DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
         host => 'fa-saasfaprod1.fa.ocs.oraclecloud.com',
         ace =>  xs$ace_type(privilege_list => xs$name_list('http'),
                             principal_name => 'FENIRACL',
                             principal_type => xs_acl.ptype_db));
END;
/

但是,当我运行 utl_http.begin_request() 过程时,它失败了:

UTL_HTTP.BEGIN_REQUEST(url, 'GET', 'HTTP/1.1') 
ORA-29273: HTTP request failed 
ORA-24247: network access denied by access control list (ACL)

如何让 utl_http 在自治数据库中工作?不支持吗?

4

1 回答 1

0

首先,共享 Exadata 基础架构上的自治数据库 (ADB-S) 支持 UTL_HTTP 调用,但文档中列出了某些限制。例如,仅允许 HTTPS 连接,并且 URL 必须可通过 Internet 访问。此外,上面的脚本中似乎缺少一个重要步骤,即在 UTL_HTTP.BEGIN_REQUEST 之前调用 UTL_HTTP.SET_WALLET('') 过程:

BEGIN
   DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
         host => 'fa-saasfaprod1.fa.ocs.oraclecloud.com',
         ace =>  xs$ace_type(privilege_list => xs$name_list('http'),
                             principal_name => 'FENIRACL',
                             principal_type => xs_acl.ptype_db));

   UTL_HTTP.SET_WALLET('');

   UTL_HTTP.BEGIN_REQUEST(url, 'GET', 'HTTP/1.1');
END;
/
于 2021-10-13T17:10:35.357 回答