Ошибка 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;
/