Ошибка HTTP-запроса ORA-29273 при использовании UTL_HTTP в автономной базе данных

Я работаю над проектом, в котором пытаюсь использовать UTL_HTTP в моем экземпляре ATP (общая инфраструктура Exadata).

Я создал сетевой 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 работать в автономной базе данных? Это не поддерживается?

1 ответ

Во-первых, автономная база данных в общей инфраструктуре Exadata (ADB-S) поддерживает вызовы UTL_HTTP с определенными ограничениями, перечисленными в doc. Например, разрешены только HTTPS-соединения, а URL-адрес должен быть доступен через Интернет. Кроме того, в приведенном выше сценарии, похоже, отсутствует важный шаг, который заключается в вызове процедуры UTL_HTTP.SET_WALLET('') перед UTL_HTTP.BEGIN_REQUEST:

      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;
/
Другие вопросы по тегам