はじめに
クラウド・サービスとシームレスに接続、処理、統合するためのツールが組み込まれているCloud Developerパッケージ(DBMS_CLOUD、DBMS_CLOUD_PIPELINE、DBMS_CLOUD_REPO、DBMS_CLOUD_NOTIFICATION、DBMS_CLOUD_AI)は、Autonomous Databaseで提供されていました。
Oracle Database 23ai 23.7以降で、Autonomous Database以外でもOracle Databaseとともにデプロイされたインストール・スクリプトを使用して、DBMS_CLOUDおよびDBMS_CLOUDファミリのその他のパッケージをインストールできるようになったので試してみました。
DBMS_CLOUDパッケージ・ファミリ
- DBMS_CLOUD
- DBMS_CLOUD_AI
- DBMS_CLOUD_NOTIFICATION
- DBMS_CLOUD_PIPELINE
- DBMS_CLOUD_REPO
作業ステップ
- DBMS_CLOUDのインストールと構成
- DBMS_CLOUDパッケージを所有するスキーマを作成
- DBMS_CLOUDコードをCDBおよびすべてのPDBにインストール
- HTTP URIとオブジェクト・ストアにアクセスするための必要な証明書を含むウォレットを作成
- 新しいSSLウォレットを使用するようにOracle Database環境を構成
- DBMS_CLOUD用のアクセス制御リスト(ACL)を含めてデータベースを構成
- DBMS_CLOUDの構成を確認
- DBMS_CLOUDを使用するためのユーザーまたはロールの構成
- DBMS_CLOUDを使用するための最小限の権限をユーザーまたはロールに付与
- DBMS_CLOUDを使用するためにユーザーまたはロールに対してACLを構成
- DBMS_CLOUDを使用するための、ユーザーまたはロールの設定が正しいことを確認
DBMS_CLOUDのインストール
DBMS_CLOUDのコードおよびインストール・スクリプトは、Oracleディストリビューションに含まれています。DBMS_CLOUDプロシージャは、デフォルトのインストールでは、C##CLOUD$SERVICEスキーマによって所有されます。
以下2つのインストール・スクリプトが提供されています。
- catclouduser.sql
必要な権限があるスキーマC##CLOUD$SERVICEを作成 - dbms_cloud_install.sql
スキーマC##CLOUD$SERVICEにDBMS_CLOUDパッケージがインストール
スキーマ作成
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u sys/<PASSWORD> -force_pdb_mode 'READ WRITE' -b dbms_cloud_install -d $ORACLE_HOME/rdbms/admin/ -l /tmp catclouduser.sql
$ $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u sys/<PASSWORD> -force_pdb_mode 'READ WRITE' -b dbms_cloud_install -d $ORACLE_HOME/rdbms/admin/ -l /tmp catclouduser.sql
catcon::set_log_file_base_path: ALL catcon-related output will be written to [/tmp/dbms_cloud_install_catcon_24316.lst]
catcon::set_log_file_base_path: catcon: See [/tmp/dbms_cloud_install*.log] files for output generated by scripts
catcon::set_log_file_base_path: catcon: See [/tmp/dbms_cloud_install_*.lst] files for spool files, if any
catcon.pl: completed successfully
パッケージのインストール
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u sys/<PASSWORD> -force_pdb_mode 'READ WRITE' -b dbms_cloud_install -d $ORACLE_HOME/rdbms/admin/ -l /tmp dbms_cloud_install.sql
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u sys/<PASSWORD> -force_pdb_mode 'READ WRITE' -b dbms_cloud_install -d $ORACLE_HOME/rdbms/admin/ -l /tmp dbms_cloud_install.sql
$ $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catcon.pl -u sys/Welcome1#Welcome1# -force_pdb_mode 'READ WRITE' -b dbms_cloud_install -d $ORACLE_HOME/rdbms/admin/ -l /tmp dbms_cloud_install.sql
catcon::set_log_file_base_path: ALL catcon-related output will be written to [/tmp/dbms_cloud_install_catcon_25969.lst]
catcon::set_log_file_base_path: catcon: See [/tmp/dbms_cloud_install*.log] files for output generated by scripts
catcon::set_log_file_base_path: catcon: See [/tmp/dbms_cloud_install_*.lst] files for spool files, if any
catcon.pl: completed successfully
パッケージの確認
データディクショナリを検索し、インストールされたパッケージを確認します。
CDB$ROOT
select con_id, owner, object_name, status, sharing, oracle_maintained from cdb_objects where object_name like 'DBMS_CLOUD%'
CON_ID OWNER OBJECT_NAME STATUS SHARING O
---------- -------------------- -------------------------------------------------- ------- ------------------ -
1 C##CLOUD$SERVICE DBMS_CLOUD_STORE VALID DATA LINK Y
1 C##CLOUD$SERVICE DBMS_CLOUD_CAPABILITIES$ VALID METADATA LINK Y
1 C##CLOUD$SERVICE DBMS_CLOUD_CAPABILITIES_UNIQUE VALID NONE Y
1 C##CLOUD$SERVICE DBMS_CLOUD_CONFIG_PARAM$ VALID METADATA LINK Y
1 C##CLOUD$SERVICE DBMS_CLOUD_PARAM_UNIQUE VALID NONE Y
< 以下 略>
各PDB
select owner, object_name, status, sharing, oracle_maintained from dba_objects where object_name like 'DBMS_CLOUD%';
OWNER OBJECT_NAME STATUS SHARING O
-------------------- -------------------------------------------------- ------- ------------------ -
C##CLOUD$SERVICE DBMS_CLOUD_STORE VALID DATA LINK Y
C##CLOUD$SERVICE DBMS_CLOUD_CAPABILITIES$ VALID METADATA LINK Y
C##CLOUD$SERVICE DBMS_CLOUD_CAPABILITIES_UNIQUE VALID NONE Y
< 以下 略>
証明書を含むSSLウォレットの作成
必要な証明書をダウンロード
$ mkdir /home/oracle/dbc
$ cd /home/oracle/dbc
$ wget https://objectstorage.us-phoenix-1.oraclecloud.com/p/KB63IAuDCGhz_azOVQ07Qa_mxL3bGrFh1dtsltreRJPbmb-VwsH2aQ4Pur2ADBMA/n/adwcdemo/b/CERTS/o/dbc_certs.tar
$ tar xvf dbc_certs.tar
$ ls
Actalis.cer Amazon2.cer Certplus1.cer dbc_certs.tar DigiCert9.cer GeoTrust2.cer GlobalSign6.cer MicroSec.cer SecomTrust2.cer SwissSign1.cer Thawte2.cer VeriSign1.cer
AddTrust1.cer Amazon3.cer Certplus2.cer DigiCert1.cer DSTRoot.cer GeoTrust3.cer GoDaddy1.cer NetLock.cer Sectigo.cer SwissSign2.cer Thawte3.cer VeriSign2.cer
AddTrust2.cer Amazon4.cer Certum1.cer DigiCert2.cer DTrust1.cer GeoTrust4.cer GoDaddy2.cer QuoVadis1.cer SecureTrust.cer SwissSign3.cer Thawte4.cer VeriSign3.cer
AddTrust3.cer BaltimoreCyberTrust.cer Certum2.cer DigiCert3.cer DTrust2.cer GeoTrust5.cer GTECyberTrust.cer QuoVadis2.cer SSLCom1.cer TeleSec1.cer Thawte5.cer VeriSign4.cer
AffirmTrust1.cer Buypass1.cer Chunghwa.cer DigiCert4.cer Entrust1.cer GlobalSign1.cer IdenTrust1.cer QuoVadis3.cer SSLCom2.cer TeleSec2.cer UserTrust1.cer VeriSign5.cer
AffirmTrust2.cer Buypass2.cer Comodo1.cer DigiCert5.cer Entrust2.cer GlobalSign2.cer IdenTrust2.cer QuoVadis4.cer Starfield1.cer TeleSec3.cer UserTrust2.cer VeriSign6.cer
AffirmTrust3.cer Camerfirma1.cer Comodo2.cer DigiCert6.cer Entrust3.cer GlobalSign3.cer ISRG.cer QuoVadis5.cer Starfield2.cer TeliaSonera1.cer UserTrust3.cer VeriSign7.cer
AffirmTrust4.cer Camerfirma2.cer Comodo3.cer DigiCert7.cer Entrust4.cer GlobalSign4.cer Keynectis.cer QuoVadis6.cer Starfield3.cer TeliaSonera2.cer UserTrust4.cer XRamp.cer
Amazon1.cer Camerfirma3.cer Comodo4.cer DigiCert8.cer GeoTrust1.cer GlobalSign5.cer LuxTrust.cer SecomTrust1.cer Swisscom.cer Thawte1.cer UserTrust5.cer
セキュリティ・ウォレットの作成
- ウォレットは、自動ログイン機能ありで作成する
- Oracle Real Application Clusters (Oracle RAC)インストールでは、このウォレットにすべてのノードで一元的にアクセス可能であるか、すべてのノード上のローカルのウォレット保管場所にこのウォレットを作成する
$ mkdir /u01/app/oracle/dcs/
$ mkdir /u01/app/oracle/dcs/commonstore/
$ mkdir /u01/app/oracle/dcs/commonstore/wallets/
$ mkdir /u01/app/oracle/dcs/commonstore/wallets/ssl
$ cd /u01/app/oracle/dcs/commonstore/wallets/ssl
$ orapki wallet create -wallet . -pwd <PASSWORD> -auto_login
$ #! /bin/bash
for i in $(ls /home/oracle/dbc/*cer)
do
orapki wallet add -wallet . -trusted_cert -cert $i -pwd <PASSWORD>
done
証明書の場所を確認
$ cd /u01/app/oracle/dcs/commonstore/wallets/ssl
$ orapki wallet display -wallet .
Oracle PKI Tool Release 23.0.0.0.0 - Production
Version 23.0.0.0.0
Copyright (c) 2004, 2025, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Trusted Certificates:
Subject: OU=ePKI Root Certification Authority,O=Chunghwa Telecom Co.\, Ltd.,C=TW
Subject: CN=Certum CA,O=Unizeto Sp. z o.o.,C=PL
Subject: CN=NetLock Arany (Class Gold) Főtanúsítvány,OU=Tanúsítványkiadók (Certification Services),O=NetLock Kft.,L=Budapest,C=HU
Subject: CN=UTN-USERFirst-Client Authentication and Email,OU=http://www.usertrust.com,O=The USERTRUST Network,L=Salt Lake City,ST=UT,C=US
Subject: CN=GlobalSign,O=GlobalSign,OU=GlobalSign Root CA - R6
Subject: CN=GlobalSign,O=GlobalSign,OU=GlobalSign ECC Root CA - R5
< 略 >
Subject: CN=QuoVadis Root CA 2 G3,O=QuoVadis Limited,C=BM
新しいSSLウォレットを使用するための環境の構成
SSLウォレットをOracle Database環境でSSLウォレット有効化するために、データベースサーバー側のsqlnet.oraファイルにSSLウォレットを追加します。
Oracle Real Application Clusters (Oracle RAC)インストールを使用している場合は、すべてのノードでsqlnet.oraファイルに追加します。
- sqlnet.oraファイルの場所
- Oracle Grid Infrastructureを使用しないクラウド・インストール
$ORACLE_HOME/network/admin - Oracle Grid Infrastructureを使用したクラウド・インストール
$GRID_HOME/network/admin
- Oracle Grid Infrastructureを使用しないクラウド・インストール
WALLET_LOCATION=
(SOURCE=(METHOD=FILE)
(METHOD_DATA=(DIRECTORY=/u01/app/oracle/dcs/commonstore/wallets/ssl)))
アクセス制御エントリ(ACE)を使用したデータベースの構成
オブジェクト・ストアやhttpsエンドポイント(URI)と通信できるようにアクセス制御エントリ(ACE)を作成します。
デフォルトでは、Oracle Databaseでは外部通信は許可されていないため、オブジェクト・ストアへのアクセスするには、アクセス制御エントリを有効にします。
DBMS_CLOUDの外部ネットワーク・サービスにHTTPプロキシ・ゲートウェイを使用するように構成するには、$ORACLE_HOME/rdbms/admin/sqlsessend.sql
にあるsqlsessstart.sqlテンプレート・スクリプトを使用したスクリプトをSYSとしてCDB$ROOTコンテナに接続することでマルチテナント環境でそれらのコマンドを実行します。
@$ORACLE_HOME/rdbms/admin/sqlsessstart.sql
-- you must not change the owner of the functionality to avoid future issues
define clouduser=C##CLOUD$SERVICE
-- CUSTOMER SPECIFIC SETUP, NEEDS TO BE PROVIDED BY THE CUSTOMER-- - SSL Wallet directory
define sslwalletdir=/u01/app/oracle/dcs/commonstore/wallets/ssl
---- UNCOMMENT AND SET THE PROXY SETTINGS VARIABLES IF YOUR ENVIRONMENT NEEDS PROXYS--
-- define proxy_uri=<your proxy URI address>
-- define proxy_host=<your proxy DNS name>
-- define proxy_low_port=<your_proxy_low_port>
-- define proxy_high_port=<your_proxy_high_port>
-- Create New ACL / ACE s
begin
-- Allow all hosts for HTTP/HTTP_PROXY
dbms_network_acl_admin.append_host_ace(
host =>'*',
lower_port => 443,
upper_port => 443,
ace => xs$ace_type(
privilege_list => xs$name_list('http', 'http_proxy'),
principal_name => upper('&clouduser'),
principal_type => xs_acl.ptype_db
)
);
--
-- UNCOMMENT THE PROXY SETTINGS SECTION IF YOUR ENVIRONMENT NEEDS PROXYS
--
-- Allow Proxy for HTTP/HTTP_PROXY
-- dbms_network_acl_admin.append_host_ace(
-- host =>'&proxy_host',
-- lower_port => &proxy_low_port,
-- upper_port => &proxy_high_port,
-- ace => xs$ace_type(
-- privilege_list => xs$name_list('http', 'http_proxy'),
-- principal_name => upper('&clouduser'),
-- principal_type => xs_acl.ptype_db));
--
-- END PROXY SECTION
--
-- Allow wallet access
dbms_network_acl_admin.append_wallet_ace(
wallet_path => 'file:&sslwalletdir',
ace => xs$ace_type(
privilege_list =>xs$name_list('use_client_certificates', 'use_passwords'),
principal_name => upper('&clouduser'),
principal_type => xs_acl.ptype_db));
end;
/
-- Setting SSL_WALLET database property
begin
if sys_context('userenv', 'con_name') = 'CDB$ROOT' then
execute immediate 'alter database property set ssl_wallet=''&sslwalletdir''';
--
-- UNCOMMENT THE FOLLOWING COMMAND IF YOU ARE USING A PROXY
--
-- execute immediate 'alter database property set http_proxy=''&proxy_uri''';
end if;
end;
/
@$ORACLE_HOME/rdbms/admin/sqlsessend.sql
スクリプトの実行
$ sqlplus / as sysdba
SQL> @@/home/oracle/dbc/dbc_aces.sql
Session altered.
PL/SQL procedure successfully completed.
Session altered.
DBMS_CLOUDの構成の確認
DBMS_CLOUDコードが正しくインストールされていることを確認したら、SSLウォレットとアクセス制御エンティティ(ACE)が適切に設定されていること確認します。
次の例で示すスクリプトをCDB内または任意のPDBでユーザーSYSとして実行します。
define clouduser=C##CLOUD$SERVICE
-- CUSTOMER SPECIFIC SETUP, NEEDS TO BE PROVIDED BY THE CUSTOMER
-- - SSL Wallet directory and password
define sslwalletdir=/u01/app/oracle/dcs/commonstore/wallets/ssl
define sslwalletpwd=<PASSWORD>
-- In environments w/ a proxy, you need to set the proxy in the verification code
-- define proxy_uri=<your proxy URI address>
-- create and run this procedure as owner of the ACLs, which is the future owner
-- of DBMS_CLOUD
CREATE OR REPLACE PROCEDURE &clouduser..GET_PAGE(url IN VARCHAR2) AS
request_context UTL_HTTP.REQUEST_CONTEXT_KEY;
req UTL_HTTP.REQ;
resp UTL_HTTP.RESP;
data VARCHAR2(32767) default null;
err_num NUMBER default 0;
err_msg VARCHAR2(4000) default null;
BEGIN
-- Create a request context with its wallet and cookie table
request_context := UTL_HTTP.CREATE_REQUEST_CONTEXT(
wallet_path => 'file:&sslwalletdir',
wallet_password => '&sslwalletpwd');
-- Make a HTTP request using the private wallet and cookie
-- table in the request context
-- uncomment if proxy is required
-- UTL_HTTP.SET_PROXY('&proxy_uri', NULL);
req := UTL_HTTP.BEGIN_REQUEST(url => url,request_context => request_context);
resp := UTL_HTTP.GET_RESPONSE(req);
DBMS_OUTPUT.PUT_LINE('valid response');
EXCEPTION
WHEN OTHERS THEN
err_num := SQLCODE;
err_msg := SUBSTR(SQLERRM, 1, 3800);
DBMS_OUTPUT.PUT_LINE('possibly raised PLSQL/SQL error: ' ||err_num||' - '||err_msg);
UTL_HTTP.END_RESPONSE(resp);
data := UTL_HTTP.GET_DETAILED_SQLERRM ;
IF data IS NOT NULL THEN
DBMS_OUTPUT.PUT_LINE('possibly raised HTML error: ' ||data);
END IF;
END;
/
set serveroutput on
BEGIN
&clouduser..GET_PAGE('https://objectstorage.eu-frankfurt-1.oraclecloud.com');
END;
/
set serveroutput off
drop procedure &clouduser..GET_PAGE;
スクリプトの実行
Procedure created.
valid response
PL/SQL procedure successfully completed.
Procedure dropped.
SSLウォレットを正しく構成してあり、データベース環境を設定してある場合 "valid response"
が返され、Oracleオブジェクト・ストアに正常に接続を確認できます。
DBMS_CLOUDを使用するためのユーザーまたはロールの構成
機能を使用できるようにユーザーまたはロールを構成します。
以下のステップを実行します。
- DBMS_CLOUDのためのユーザーまたはロールへの最小権限の付与
- DBMS_CLOUDを使用するためのユーザーまたはロールに対するACEの構成
- 適切なアクセス制御エントリ(ACE)を有効にする必要があります。
- DBMS_CLOUDを使用するためのユーザーおよびロールの設定の確認
- 資格証明を作成しオブジェクト・ストア内のデータにアクセスを確認します。
DBMS_CLOUDのためのユーザーまたはロールへの最小権限の付与
以下の権限を付与します。
-- 付与するユーザ名を指定:例)SCOTT
define username=SCOTT
grant CREATE TABLE to &username;
grant read, write on directory DATA_PUMP_DIR to &username;
grant EXECUTE on dbms_cloud to &username;
grant EXECUTE on dbms_cloud_pipeline to &username;
grant EXECUTE on dbms_cloud_repo to &username;
grant EXECUTE on dbms_cloud_notification to &username;
DBMS_CLOUDを使用するためのユーザーまたはロールに対するACEの構成
DBMS_CLOUD実行権限が付与されているユーザーにアクセス権を付与

@$ORACLE_HOME/rdbms/admin/sqlsessstart.sql
-- 付与するユーザ名を指定:例)SCOTT
define clouduser=SCOTT
-- SSL Walletディレクトリを指定:例) /u01/app/oracle/dcs/commonstore/wallets/ssl
define sslwalletdir=/u01/app/oracle/dcs/commonstore/wallets/ssl
-- Create New ACL / ACEs
begin
-- Allow all hosts for HTTP/HTTP_PROXY
dbms_network_acl_admin.append_host_ace(
host =>'*',
lower_port => 443,
upper_port => 443,
ace => xs$ace_type(
privilege_list => xs$name_list('http', 'http_proxy'),
principal_name => upper('&clouduser'),
principal_type => xs_acl.ptype_db));
-- Allow wallet access
dbms_network_acl_admin.append_wallet_ace(
wallet_path => 'file:&sslwalletdir',
ace => xs$ace_type(
privilege_list =>xs$name_list('use_client_certificates', 'use_passwords'),
principal_name => upper('&clouduser'),
principal_type => xs_acl.ptype_db));
end;
/
@$ORACLE_HOME/rdbms/admin/sqlsessend.sql
DBMS_CLOUDを使用できることの確認
OCIユーザに認証(auth)トークンを作成することで、認可のためにデータベース・スキーマ内に資格証明オブジェクトを作成できます。
これらの資格証明名、リージョン、オブジェクト・ストレージのネームスペース、およびバケット名を、ご自分のテナンシ用の正しい値に置き換えます:
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => '<credential name>',
username => 'OCI within your tenancy',
password => 'auth token generated for OCI user');
END;
/
select * from dbms_cloud.list_objects('<credential name>','https://objectstorage.region.oraclecloud.com/n/ObjectStorageNameSpace/b/BucketName/o/');
DBMS_CLOUDパッケージをつかってOCI Object Storageのオブジェクトにアクセスすることが確認できます。
おわりに
これらの設定で、Autonomous Database以外のOracle Database23ai でDBMS_CLOUDパッケージが利用可能になります。
Oracle Database23ai Release Update(RU) 23.7以降、DBMS_CLOUD_AIはSelect AI機能をサポートしています。Select AI機能は、自然言語からSQL生成(NL2SQL)に大規模言語モデル(LLM)を利用するためのSQLおよびPL/SQLインタフェースを提供しますので、Autonomouns Database以外でも利用可能になります。
Oracle Database23ai RU23.7以前のリリースでのDBMS_CLOUDの使用については、Oracle Supportの技術文書「How To Setup And Use DBMS_CLOUD Package (Doc ID 2748362.1)」を参照します。