6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Autonomous AI Database:PL/SQLでDelta Sharing Protocolを用いたデータ共有を設定する(データ提供編)

6
Posted at

はじめに

Autonomous AI Database Serverlessは、Delta Sharingプロトコルを使用したデータ共有に対応しており、
Data Provider(データ提供側)、Data Recipient(データ受信側)のどちらにもなることができます。

先日のAutonomous AI Databaseのアップデートで、Delta Sharingプロトコルを使用したデータ共有の設定が、すべてPL/SQLでできるようになったので、早速試してみました。

こちらの記事では、Autonomous AI DatabaseをDelta Sharingプロトコルでデータを共有するData Provider(データ提供側)として動作させるための手順を検証した内容となります。

Autonomous AI DatabaseをDelta Sharingプロトコルで共有されているデータを受信するData Recipient(データ受信側)として動作させるための手順を検証した内容は、別の記事として書く予定です。

なお、この記事の内容は、こちらのLiveLabsの内容をもとにしています。

注意
こちらの記事の内容はあくまで個人のメモ的な内容のため、こちらの内容を利用した場合のトラブルには一切責任を負いません。
また、こちらの記事の内容を元にしたOracleサポートへの問い合わせはご遠慮ください。

0. 事前準備

・DBユーザの作成と設定

adminユーザとしてAutonomous AI Databaseに接続します。

user@mymac ~ % sqlplus admin@data_provider

SQL*Plus: Release 23.0.0.0.0 - Production on 火 6月 23 22:36:25 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_providerを作成します。

SQL> CREATE USER share_provider IDENTIFIED BY DataShare4ADB;

ユーザーが作成されました。

SQL>

作成したDBユーザに対してロールを付与します。

SQL> GRANT CONNECT TO share_provider;

権限付与が成功しました。

SQL> GRANT RESOURCE TO share_provider;

権限付与が成功しました。

SQL> GRANT DWROLE TO share_provider;

権限付与が成功しました。

SQL> GRANT UNLIMITED TABLESPACE TO share_provider;

権限付与が成功しました。

SQL>

ORDS_ADMIN.ENABLE_SCHEMAプロシージャを使用して、作成したDBユーザに対してRESTを有効化します。

QL> BEGIN
  2      ORDS_ADMIN.ENABLE_SCHEMA(
  3          p_enabled => TRUE,
  4          p_schema => 'SHARE_PROVIDER',
  5          p_url_mapping_type => 'BASE_PATH',
  6          p_url_mapping_pattern => 'share_provider',
  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_PROVIDER',
  4          enabled => TRUE
  5      );
  6  END;
  7  /

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 ~ % 

・Delta Sharingプロトコルで共有する表の作成

作成したDBユーザshare_providerとしてAutonomous AI Databaseに接続します。

user@mymac ~ % sqlplus share_provider@data_provider

SQL*Plus: Release 23.0.0.0.0 - Production on 火 6月 23 22:36:25 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_CLOUD.CREATE_EXTERNAL_TABLEプロシージャを使用して、公開されているサンプルデータ(Parquet形式)に対して外部表custsales_externalを作成します。

SQL> BEGIN
  2      DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
  3          table_name    => 'custsales_external',
  4          file_uri_list => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/c4u04/b/moviestream_landing/o/sales_sample/*.parquet',
  5          format        => '{"type":"parquet", "schema": "first"}'
  6      );
  7  END;
  8  /

PL/SQLプロシージャが正常に完了しました。

SQL>

CTASで外部表custsales_externalから表custsalesを作成します。

SQL> CREATE TABLE custsales
  2  AS
  3  SELECT * FROM custsales_external;


表が作成されました。

SQL>

describeコマンドで、表custsalesの構造を確認します。

SQL> desc custsales
 名前                                       NULL?    型
 ----------------------------------------- -------- ----------------------------
 DAY_ID 					                        TIMESTAMP(6)
 GENRE_ID					                        NUMBER(19)
 MOVIE_ID					                        NUMBER(19)
 CUST_ID					                        NUMBER(19)
 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のレコード数を確認します。

SQL> SELECT COUNT(*) FROM custsales;

  COUNT(*)
----------
   2503281

SQL>

1. オブジェクト・ストレージ・バケットの作成

OCIコンソールから、Delta Sharingプロトコルによるデータ共有で使用するオブジェクト・ストレージ・バケットを作成します。
このバケットには、Delta Sharingプロトコルで共有されるデータがParquet形式で格納されます。
ここでは、data_shareという名前のバケットを作成しました。

2. オブジェクト・ストレージ・バケットにアクセスするためのクレデンシャルの作成(リソース・プリンシパルの有効化)

オブジェクト・ストレージ・バケットにアクセスするためのクレデンシャルの作成を作成します。

今回はリソース・プリンシパルを使用しますので、adminユーザとしてAutonomous AI Databaseに接続して、リソース・プリンシパルを有効化します。

リソース・プリンシパルを使用してオブジェクト・ストレージ・バケットにアクセスするために、あらかじめ適切な動的グループおよびポリシーを作成しておきます。

adminユーザとしてAutonomous AI Databaseに接続します。

user@mymac ~ % sqlplus admin@data_provider

SQL*Plus: Release 23.0.0.0.0 - Production on 火 6月 23 22:36:25 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_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPALプロシージャを使用して、Autonomous AI Databaseのリソース・プリンシパルを有効化します。

SQL> EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL();

PL/SQLプロシージャが正常に完了しました。

SQL>

DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPALプロシージャを使用して、作成したDBユーザに対してAutonomous AI Databaseのリソース・プリンシパルを有効化します。

SQL> EXEC DBMS_CLOUD_ADMIN.ENABLE_RESOURCE_PRINCIPAL(username => 'share_provider');

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. クラウド・ストレージ・リンクの作成

作成したDBユーザshare_providerとしてAutonomous AI Databaseに接続します。

user@mymac ~ % sqlplus share_provider@data_provider

SQL*Plus: Release 23.0.0.0.0 - Production on 火 6月 23 22:53:40 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_CLOUD_STORAGE_LINKプロシージャを使用して、1.で作成したオブジェクト・ストレージ・バケットに対するクラウド・ストレージ・リンクdata_share_storage_linkを作成します。

SQL> BEGIN
  2      DBMS_SHARE.CREATE_CLOUD_STORAGE_LINK(
  3          storage_link_name => 'data_share_storage_link',
  4          uri               => 'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/namespace/b/data_share/o/'
  5      );
  6  END;
  7  /

PL/SQLプロシージャが正常に完了しました。

SQL>

DBMS_SHARE.SET_STORAGE_CREDENTIALプロシージャを使用して、クラウド・ストレージ・リンクへアクセスする際に使用するクレデンシャルを設定します。

SQL> BEGIN
  2      DBMS_SHARE.SET_STORAGE_CREDENTIAL(
  3          storage_link_name => 'data_share_storage_link',
  4          credential_name   => 'OCI$RESOURCE_PRINCIPAL'
  5      );
  6  END;
  7  /

PL/SQLプロシージャが正常に完了しました。

SQL>

4. データ・シェアの作成

DBMS_SHARE.CREATE_SHAREプロシージャを使用して、データ・シェアdemo_shareを作成します。

SQL> BEGIN
  2      DBMS_SHARE.CREATE_SHARE(
  3          share_name        => 'demo_share',
  4          share_type        => 'VERSIONED',
  5          storage_link_name => 'DATA_SHARE_STORAGE_LINK'
  6      );
  7  END;
  8  /

PL/SQLプロシージャが正常に完了しました。

SQL>

データシェアの情報はuser_sharesディクショナリ・ビューで確認できます。
作成したデータ・シェアを確認てみます。

SQL> col share_name for a20
SQL> SELECT share_name, current_version FROM user_shares
  2  WHERE share_name = UPPER('demo_share');

SHARE_NAME	         CURRENT_VERSION
-------------------- ---------------
DEMO_SHARE

SQL>

データ・シェアdemo_shareが作成されていることが確認できました。

5. データ・シェアへの表の追加

DBMS_SHARE.ADD_TO_SHAREプロシージャを使用して、データ・シェアに表を追加します。
ここでは、4.で作成したデータ・シェアdemo_shareに表custsalesを追加します。

SQL> BEGIN
  2      DBMS_SHARE.ADD_TO_SHARE(
  3          share_name       => 'demo_share',
  4          owner            => 'share_provider',
  5          table_name       => 'custsales',
  6          share_table_name => 'custsales'
  7      );
  8  END;
  9  /

PL/SQLプロシージャが正常に完了しました。

SQL>

6. データ・シェアのパブリッシュ

DBMS_SHARE.PUBLISH_SHAREプロシージャを使用して、データ・シェアをパブリッシュします。

SQL> BEGIN
  2      DBMS_SHARE.PUBLISH_SHARE(share_name => 'demo_share');
  3  END;
  4  /

PL/SQLプロシージャが正常に完了しました。

SQL> 

パブリッシュには時間がかかるので、user_share_versionsディクショナリ・ビューでデータ・シェアの状態を確認します。

STATUS列が「EXPORTING」と表示されている場合は、パブリッシュ処理がまだ完了していないことを示しています。

SQL> SELECT share_name, share_version, status
  2  FROM user_share_versions
  3  WHERE share_name = 'DEMO_SHARE'
  4  ORDER BY share_version desc;

SHARE_NAME	         SHARE_VERSION STATUS
-------------------- ------------- -----------
DEMO_SHARE			 1             EXPORTING

SQL>

パブリッシュが完了すると、STATUSが「CURRENT」に変わります。
パブリッシュが完了するまで後続の手順には進めませんので、STATUSが「CURRENT」に変わるまで待ちます。

SQL> SELECT share_name, share_version, status
  2  FROM user_share_versions
  3  WHERE share_name = 'DEMO_SHARE'
  4  ORDER BY share_version desc;

SHARE_NAME	         SHARE_VERSION STATUS
-------------------- ------------- -----------
DEMO_SHARE			 1             CURRENT

SQL>

7. 作成されたParquetファイルの確認

DBMS_CLOUD.LIST_OBJECTSファンクションを使用して、データ・シェアの作成時に指定したストレージ・リンクが参照しているオブジェクト・ストレージ・バケットの内容を確認してみます。

SQL> set linesize 120
SQL> col object_name for a60
SQL> col created for a35
SQL> SELECT object_name, bytes, created FROM
  2  DBMS_CLOUD.LIST_OBJECTS(
  3      'OCI$RESOURCE_PRINCIPAL', 
  4      'https://objectstorage.ap-tokyo-1.oraclecloud.com/n/namespace/b/data_share/o/'
  5  );

OBJECT_NAME							                         BYTES      CREATED
------------------------------------------------------------ ---------- -----------------------------------
DEMO_SHARE_733593/SHARE_PROVIDER/CUSTSALES/V1_1S-1.parquet     31999667 26-06-23 14:07:50.067000 +00:00
DEMO_SHARE_733593/SHARE_PROVIDER/CUSTSALES/V1_2S-2.parquet     27089686 26-06-23 14:07:48.527000 +00:00

SQL>

表custsalesのデータがParquet形式で格納されていることが確認できました。

8. データ・シェア受信者の作成

DBMS_SHARE.CREATE_SHARE_RECIPIENTプロシージャを使用して、共有しているデータ・シェアの受信者を作成します。
ここでは、demo_share_recipientという名前の受信者を作成しています。

SQL> BEGIN
  2      DBMS_SHARE.CREATE_SHARE_RECIPIENT(
  3          recipient_name => 'demo_share_recipient',
  4          email          => 'xxxxxx.xxxxxx@example.com'
  5      );
  6  END;
  7  /

PL/SQLプロシージャが正常に完了しました。

SQL>

user_share_recipientsディクショナリ・ビューで、作成したデータ・シェア受信者を確認してみます。

SQL> col recipient_name for a30
SQL> col created for a35                   
SQL> col updated for a35
SQL> SELECT recipient_name, created, updated FROM user_share_recipients;

RECIPIENT_NAME		           CREATED				               UPDATED
------------------------------ ----------------------------------- -----------------------------------
DEMO_SHARE_RECIPIENT	       26-06-23 23:16:05.211849 +09:00	   26-06-23 23:16:05.211849 +09:00

SQL>

データ・シェア受信者demo_share_recipientが作成されていることが確認できました。

DBMS_SHARE.UPDATE_RECIPIENT_PROPERTYプロシージャを使用して、データ・シェア受信者のプロパティを更新してみます。
ここではDelta Sharingプロトコルのベアラー・トークンの存続期間を90日に設定してみます。

SQL> BEGIN
  2      DBMS_SHARE.UPDATE_RECIPIENT_PROPERTY(
  3          recipient_name     => 'demo_share_recipient',
  4          recipient_property => 'TOKEN_LIFETIME',
  5          new_value          => '90 00:00:00'
  6      );
  7  END;
  8  /

PL/SQLプロシージャが正常に完了しました。

SQL>

9. データ・シェア受信者に対してデータ・シェアへのアクセスを許可

DBMS_SHARE.GRANT_TO_RECIPIENTプロシージャを使用して、8.で作成したデータ・シェア受信者demo_share_recipientに対してデータ・シェアdemo_shareに対するアクセスを許可します。

SQL> BEGIN
  2      DBMS_SHARE.GRANT_TO_RECIPIENT(
  3          share_name     => 'demo_share',
  4          recipient_name => 'demo_share_recipient',
  5          auto_commit    => TRUE
  6      );
  7  END;
  8  /

PL/SQLプロシージャが正常に完了しました。

SQL>

ディクショナリ・ビューuser_share_recipient_grantsを使用して、データ・シェア受信者demo_share_recipientに対してアクセスが許可されているデータ・シェアを確認してみます。

SQL> SELECT recipient_name, share_name
  2  FROM user_share_recipient_grants
  3  WHERE recipient_name = UPPER('demo_share_recipient');

RECIPIENT_NAME		           SHARE_NAME
------------------------------ --------------------
DEMO_SHARE_RECIPIENT	       DEMO_SHARE

SQL> 

データ・シェア受信者demo_share_recipientに対して、データ・シェアdemo_shareに対するアクセスが許可されていることが確認できました。

10. アクティベーション・リンクの取得

DBMS_SHARE.GET_ACTIVATION_LINKファンクションを使用して、データ・シェア受信者demo_share_recipientにシェアするアクティベーション・リンク(URL)を取得します。

SQL> set serveroutput on
SQL> BEGIN
  2      DBMS_OUTPUT.PUT_LINE(
  3          REPLACE(
  4              DBMS_SHARE.GET_ACTIVATION_LINK(recipient_name => 'demo_share_recipient'),
  5              'ords/_adpshr',
  6              'ords/' || LOWER(USER) || '/_adpshr'
  7          )
  8      );
  9  END;
 10  /
https://xxxxxxxxxx-shareprovider.adb.ap-tokyo-1.oraclecloudapps.com/ords/share_provider/_adpshr/delta-sharing/download?key=BDA82687A26ED136F089DCBDF87A1C942D5EB6C9324938A7F2CB1AB0C264F8E93E7D9E3DF560E519F000021B6994608DFEB7c2hhcmVfcHJvdmlkZXI=

PL/SQLプロシージャが正常に完了しました。

SQL>

取得したアクティベーション・リンクにブラウザ等からアクセスすると、Delta Sharingプロトコルでデータを受信するために必要な構成プロファイルがダウンロードできますので、メールやSlack等でデータ・シェア受信者にシェアします。

(11. 構成プロファイルのダウンロード)

データ・シェア受信者は、このURLにアクセスし、データ・シェアの構成プロファイル(JSONファイル)を含むzipファイルをダウンロードします。

このアクティベーション・リンクのURLにアクセスすると、こちらのようなページが表示されます。

スクリーンショット 2026-06-23 23.27.01.png

「Get Profile Information」をクリックすると、プロファイルを2つ含むzipファイルcredentials.zipがダウンロードされ、以下のようなページに変わります。

スクリーンショット 2026-06-23 23.27.36.png

ダウンロードしたzipファイルを解凍すると、構成プロファイルが2つ含まれています。
スクリーンショット 2026-06-24 19.32.35.png

構成プロファイルを使用して、Autonomous AI DatabaseをData Recipient(データ受信側)として構成する手順の検証については、別の記事で書きたいと思います。

参考情報

LiveLabs:Implement Data Sharing with PL/SQL in Autonomous AI Database
DBMS_SHAREパッケージ:共有プロデューサ・サブプログラムの概要
DBMS_SHAREパッケージ:共有プロデューサ・ビューの概要
DBMS_CLOUDパッケージ:LIST_OBJECTSファンクション

6
5
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
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?