はじめに
Autonomous AI Database Serverlessは、Delta Sharingプロトコルを使用したデータ共有に対応しており、Data Provider(データ提供側)、Data Recipient(データ受信側)のどちらにもなることができます。
先日のAutonomous AI Databaseのアップデートで、Delta Sharingプロトコルを使用したデータ共有の設定が、すべてPL/SQLでできるようになったので、早速試してみました。
こちらの記事は、Autonomous AI DatabaseをDelta Sharingプロトコルで共有されているデータを利用するData Consumer(データ受信側)として動作させるための手順を検証した内容となります。
Autonomous AI DatabaseをDelta Sharingプロトコルでデータを共有するData Provider(データ提供側)として動作させるための手順を検証した内容は、こちらに記事としてまとめています。
なお、この記事の内容は、こちらのLiveLabsの内容をもとにしています。
注意
こちらの記事の内容はあくまで個人のメモ的な内容のため、こちらの内容を利用した場合のトラブルには一切責任を負いません。
また、こちらの記事の内容を元にしたOracleサポートへの問い合わせはご遠慮ください。
0. 事前準備
・DBユーザの作成と設定
adminユーザとしてAutonomous AI Databaseに接続します。
user@mymac ~ % sqlplus admin@data_consumer
SQL*Plus: Release 23.0.0.0.0 - Production on 火 6月 23 23:33:53 2026
Version 23.3.0.23.09
Copyright (c) 1982, 2023, Oracle. All rights reserved.
パスワードを入力してください:
Oracle AI Database 26ai Enterprise Edition Release 23.26.2.2.0 - Production
Version 23.26.2.2.0
に接続されました。
SQL>
Delta Sharingプロトコルで共有されているデータを受信するDBユーザshare_consumerを作成します。
SQL> CREATE USER share_consumer IDENTIFIED BY DataShare4ADW;
ユーザーが作成されました。
SQL>
作成したDBユーザに対してロールを付与します。
SQL> GRANT CONNECT TO share_consumer;
権限付与が成功しました。
SQL> GRANT DWROLE TO share_consumer;
権限付与が成功しました。
SQL> GRANT RESOURCE TO share_consumer;
権限付与が成功しました。
SQL> GRANT UNLIMITED TABLESPACE TO share_consumer;
権限付与が成功しました。
SQL>
ORDS_ADMIN.ENABLE_SCHEMAプロシージャを使用して、作成したDBユーザに対してRESTを有効化します。
SQL> BEGIN
2 ORDS_ADMIN.ENABLE_SCHEMA(
3 p_enabled => TRUE,
4 p_schema => 'SHARE_CONSUMER',
5 p_url_mapping_type => 'BASE_PATH',
6 p_url_mapping_pattern => 'share_consumer',
7 p_auto_rest_auth => TRUE
8 );
9 COMMIT;
10 END;
11 /
PL/SQLプロシージャが正常に完了しました。
SQL>
DBMS_SHARE.ENABLE_SCHEMAプロシージャを使用して、作成したDBユーザに対してDelta Sharingプロトコルによるデータ共有を有効化します。
SQL> BEGIN
2 DBMS_SHARE.ENABLE_SCHEMA(
3 schema_name => 'SHARE_CONSUMER',
4 enabled => TRUE
5 );
6 END;
7 /
PL/SQLプロシージャが正常に完了しました。
SQL>
1. 構成プロファイルの取得
Delta Sharing Protocolのデータ提供者から構成プロファイルを入手します。
ここでは、こちらの記事で作成したデータ共有のプロファイルを使用します。
2. ネットワークACLの設定
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACEプロシージャを使用して、1.で作成したDBユーザshare_consumerに対してデータ・シェア・プロバイダのエンドポイント(ホスト)へのアクセスを許可するACLを設定します。
hostには、構成プロファイル内のパラメータendpointの値に含まれるホスト名を指定し、principal_nameにはアクセスを許可するDBユーザ名(ここではshare_consumer)を大文字で指定します。
SQL> BEGIN
2 DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
3 host => 'sya6vphk3pzlkhq-shareprovider.adb.ap-tokyo-1.oraclecloudapps.com',
4 lower_port => 443,
5 upper_port => 443,
6 ace => xs$ace_type(
7 privilege_list => xs$name_list('http', 'http_proxy'),
8 principal_name => upper('share_consumer'),
9 principal_type => xs_acl.ptype_db
10 )
11 );
12 END;
13 /
PL/SQLプロシージャが正常に完了しました。
SQL>
SQL*Plusを終了します。
SQL> exit
Oracle AI Database 26ai Enterprise Edition Release 23.26.2.2.0 - Production
Version 23.26.2.2.0との接続が切断されました。
user@mymac ~ %
3. データ・シェアにアクセスするためのクレデンシャルの作成
1.で作成したDBユーザshare_consumerとしてAutonomous AI Databaseに接続します。
user@mymac ~ % sqlplus share_consumer@data_consumer
SQL*Plus: Release 23.0.0.0.0 - Production on 火 6月 23 23:50:55 2026
Version 23.3.0.23.09
Copyright (c) 1982, 2023, Oracle. All rights reserved.
パスワードを入力してください:
Oracle AI Database 26ai Enterprise Edition Release 23.26.2.2.0 - Production
Version 23.26.2.2.0
に接続されました。
SQL>
DBMS_SHARE.CREATE_CREDENTIALSファンクションを使用して、Delta Sharingプロトコルで共有されているデータ共有にアクセスするためのクレデンシャルを作成します。
delta_profileには、構成プロファイルの内容をそのまま設定します。
credential_base_nameには、作成するクレデンシャルの名前のベースを設定します。
ここでは、このあと作成する共有プロバイダの名前(DEMO_PROVIDER)を設定しています。
SQL> DECLARE
2 delta_profile CLOB :=
3 '{
4 "shareCredentialsVersion":1,"endpoint":"https://xxxxxxxxxx-shareprovider.adb.ap-tokyo-1.oraclecloudapps.com/ords/share_provider/_delta_sharing/","tokenEndpoint":"https://xxxxxxxxxx-shareprovider.adb.ap-tokyo-1.oraclecloudapps.com/ords/share_provider/oauth/token","bearerToken":"XXXXXXXXXXXXXXXXXXXXXX","expirationTime":"2026-09-21T14:27:15.767Z","clientID":"XXXXXXXXXXXXXXX..","clientSecret":"XXXXXXXXXXXXXXX.."
5 }';
6
7 -- A local name to represent the share provider
8 credential_base_name VARCHAR2(4000) := 'DEMO_PROVIDER';
9
10 -- Space for credentials
11 credential_names CLOB;
12
13 BEGIN
14 -- Create credential object(s)
15 credential_names := DBMS_SHARE.CREATE_CREDENTIALS(
16 credential_base_name => credential_base_name,
17 delta_profile => delta_profile
18 );
19 END;
20 /
PL/SQLプロシージャが正常に完了しました。
SQL>
作成したクレデンシャルの情報はuser_credentialsディクショナリ・ビューで確認できます。
作成したクレデンシャルを確認してみます。
SQL> SELECT credential_name
2 FROM user_credentials
3 WHERE credential_name LIKE 'DEMO_PROVIDER%';
CREDENTIAL_NAME
--------------------------------------------------------------------------------
DEMO_PROVIDER$SHARE_CRED
DEMO_PROVIDER$SHARE_CRED$TOKEN_REFRESH_CRED
SQL>
4. データ・シェア・プロバイダの登録(作成)
DBMS_SHARE.CREATE_SHARE_PROVIDERプロシージャを使用して、データ・シェア・プロバイダを登録(作成)します。
provider_nameには、登録(作成)するデータ・シェア・プロバイダの名前、endpointには構成プロファイル内のパラメータendpointの値を指定します。
SQL> BEGIN
2 DBMS_SHARE.CREATE_SHARE_PROVIDER(
3 provider_name => 'DEMO_PROVIDER',
4 endpoint => 'https://xxxxxxxxxxx-shareprovider.adb.ap-tokyo-1.oraclecloudapps.com/ords/share_provider/_delta_sharing/'
5 );
6 END;
7 /
PL/SQLプロシージャが正常に完了しました。
SQL>
データ・シェア・プロバイダDEMO_PROVIDERが登録(作成)できました。
次に、DBMS_SHARE.SET_SHARE_PROVIDER_CREDENTIALプロシージャを使用して、データ・シェア・プロバイダへアクセスする際に使用するクレデンシャルを設定します。
provider_nameには作成したデータ・シェア・プロバイダの名前を、share_credentialには3.で作成したクレデンシャル(末尾が$SHARE_CREDのもの)を指定します。
SQL> BEGIN
2 DBMS_SHARE.SET_SHARE_PROVIDER_CREDENTIAL(
3 provider_name => 'DEMO_PROVIDER',
4 share_credential => 'DEMO_PROVIDER$SHARE_CRED'
5 );
6 END;
7 /
PL/SQLプロシージャが正常に完了しました。
SQL>
5. データ・シェア・プロバイダから共有されているデータ・シェアに対するシェア・リンクの作成
DBMS_SHARE.DISCOVER_AVAILABLE_SHARESファンクションを使用して、データ・シェア・プロバイダDEMO_PROVIDERから提供されているデータ・シェアを確認します。
SQL> set linesize 100
SQL> col provider_name for a20
SQL> col available_share_name for a20
SQL> col created for a25
SQL> SELECT provider_name, available_share_name, created
2 FROM DBMS_SHARE.DISCOVER_AVAILABLE_SHARES('DEMO_PROVIDER');
PROVIDER_NAME AVAILABLE_SHARE_NAME CREATED
-------------------- -------------------- -------------------------
DEMO_PROVIDER DEMO_SHARE 26-06-23 23:53:45.243132
SQL>
データ・シェア・プロバイダDEMO_PROVIDERから、DEMO_SHAREという名前のデータ・シェアが提供されていることがわかりました
DBMS_SHARE.CREATE_OR_REPLACE_SHARE_LINKプロシージャを使用して、データ・シェア・プロバイダDEMO_PROVIDERから提供されているデータ・シェアDEMO_SHAREに対して、シェア・リンクを作成します。
ここでは、SALES_DATAという名前のシェア・リンクを作成します。
SQL> BEGIN
2 DBMS_SHARE.CREATE_OR_REPLACE_SHARE_LINK(
3 share_link_name => 'SALES_DATA',
4 share_provider => 'DEMO_PROVIDER',
5 share_name => 'DEMO_SHARE'
6 );
7 END;
8 /
PL/SQLプロシージャが正常に完了しました。
SQL>
6. データ・シェアで共有されている表に対するシェア・リンク・ビューの作成
DBMS_SHARE.DISCOVER_AVAILABLE_TABLESファンクションを使用して、データ・シェア・プロバイダDEMO_PROVIDERから提供されているデータ・シェアDEMO_SHAREで共有されている表を確認します。
SQL> col schema_name for a20
SQL> col table_name for a20
SQL> SELECT schema_name, table_name
2 FROM
3 DBMS_SHARE.DISCOVER_AVAILABLE_TABLES(
4 share_provider => 'DEMO_PROVIDER',
5 share_name => 'DEMO_SHARE'
6 );
SCHEMA_NAME TABLE_NAME
-------------------- --------------------
SHARE_PROVIDER CUSTSALES
SQL>
データ・シェア・プロバイダDEMO_PROVIDERから提供されているデータ・シェアDEMO_SHAREで、SHARE_PROVIDERスキーマのCUSTSALES表が共有されていることが確認できました。
DBMS_SHARE.CREATE_SHARE_LINK_VIEWプロシージャを使用して、Delta Sharingプロトコルで共有されている表に対するビュー(シェア・リンク・ビュー)を作成します。
5.で作成したシェア・リンクSALES_DATAを使用して、データ・シェア・プロバイダDEMO_PROVIDERから提供されているデータ・シェアDEMO_SHAREで共有されているCUSTSALES表に対して、シェア・リンク・ビューCUSTSALES_SHARE_Vを作成します。
view_nameには作成するビューの名前、share_linkには使用するシェア・リンクの名前、share_schema_nameにはビューを作成する対象となる表のスキーマ名、share_table_nameにはビューを作成する対象となる表の名前を指定します。
SQL> BEGIN
2 DBMS_SHARE.CREATE_SHARE_LINK_VIEW(
3 view_name => 'CUSTSALES_SHARE_V',
4 share_link_name => 'SALES_DATA',
5 share_schema_name => 'SHARE_PROVIDER',
6 share_table_name => 'CUSTSALES'
7 );
8 END;
9 /
PL/SQLプロシージャが正常に完了しました。
SQL>
データ・シェアDEMO_SHAREで共有されている表CUSTSALESに対するシェア・リンク・ビューCUSTSALES_SHARE_Vが作成できました。
7. 動作確認
6.で作成したシェア・リンク・ビューCUSTSALES_SHARE_Vの構造を確認してみます。
SQL> desc custsales_share_v
Name Null? Type
----------------------------------------- -------- ----------------------------
DAY_ID TIMESTAMP(6)
GENRE_ID BINARY_DOUBLE
MOVIE_ID BINARY_DOUBLE
CUST_ID BINARY_DOUBLE
APP VARCHAR2(32767)
DEVICE VARCHAR2(32767)
OS VARCHAR2(32767)
PAYMENT_METHOD VARCHAR2(32767)
LIST_PRICE BINARY_DOUBLE
DISCOUNT_TYPE VARCHAR2(32767)
DISCOUNT_PERCENT BINARY_DOUBLE
ACTUAL_PRICE BINARY_DOUBLE
SQL>
シェア・リンク・ビューCUSTSALES_SHARE_Vに対してクエリを実行してみます。
SQL> SELECT COUNT(*) FROM custsales_share_v;
COUNT(*)
----------
2503281
SQL> SELECT AVG(actual_price) FROM custsales_share_v;
AVG(ACTUAL_PRICE)
-----------------
1.704E+000
SQL> SELECT DISTINCT(OS) FROM custsales_share_v;
OS
--------------------------------------------------------------------------------
android
ios
macos
windows
SQL>
シェア・リンク・ビューCUSTSALES_SHARE_Vを使用して、Delta Sharingプロトコルで共有されている表CUSTSALESのデータにアクセスできることが確認できました。
参考情報
・LiveLabs:Implement Data Sharing with PL/SQL in Autonomous AI Database
・共有コンシューマ・サブプログラムの概要
・共有コンシューマ・ビューの概要
・DBMS_CLOUDパッケージ:LIST_OBJECTSファンクション