0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Oracle Database 23ai DBMS_CLOUDパッケージ・ファミリのインストール (2025/08/16)

Posted at

はじめに

クラウド・サービスとシームレスに接続、処理、統合するためのツールが組み込まれている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のインストールと構成
    1. DBMS_CLOUDパッケージを所有するスキーマを作成
    2. DBMS_CLOUDコードをCDBおよびすべてのPDBにインストール
    3. HTTP URIとオブジェクト・ストアにアクセスするための必要な証明書を含むウォレットを作成
    4. 新しいSSLウォレットを使用するようにOracle Database環境を構成
    5. DBMS_CLOUD用のアクセス制御リスト(ACL)を含めてデータベースを構成
    6. DBMS_CLOUDの構成を確認
  • DBMS_CLOUDを使用するためのユーザーまたはロールの構成
    1. DBMS_CLOUDを使用するための最小限の権限をユーザーまたはロールに付与
    2. DBMS_CLOUDを使用するためにユーザーまたはロールに対してACLを構成
    3. 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
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コンテナに接続することでマルチテナント環境でそれらのコマンドを実行します。

/home/oracle/dbc/dbc_aces.sql
@$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実行権限が付与されているユーザーにアクセス権を付与

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108635/0187fc3d-26f0-49fd-9cd2-b9b57d360ec9.png)
@$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)」を参照します。

参考情報

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?