はじめに
Oracle Cloud Infrastructure SDK for PL/SQL(PL/SQL SDK)がリリースされ、共有インフラストラクチャのAutonomous Databaseでは既に利用できるようになっています。
Oracle Cloud Infrastructure Documentation Developer Guide
PL/SQL SDKを使用して、オブジェクト・ストレージ・バケット内のオブジェクトの一覧を取得し、オブジェクト名をDB内のテーブルに保存するPL/SQLプログラムを作成してみました。
手順
1.キーペアの作成
2.テナント、ユーザのOCIDの確認
3.APIキーの作成
4.SDKを利用するためのクレデンシャル(資格証明)の作成
5.PL/SQL SDKを使用したプログラムの作成
1.キーペアの作成
こちらの情報を参考にして、PEMフォーマットのRSAキー・ペアを作成します。
https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/apisigningkey.htm
2.テナント、ユーザのOCIDの確認
コンソールでテナントのOCID、ユーザのOCIDを確認してメモしておきます。
3. APIキーの作成
「アイデンティティ」 → 「ユーザ」 → 「ユーザの詳細」
リソース欄の「APIキー」をクリックします。
「公開キーの追加」ボタンをクリックします。
「公開キーの貼付け」を選択して、作成したキーペアの公開鍵の内容をコピー&ペーストし、「追加」をクリックします。
公開キーの追加後に表示されるフィンガープリントをメモしておきます。
4.SDKを利用するためのクレデンシャル(資格証明)の作成
今回はMY_SDK_CREDという名前のSDKアクセス用のクレデンシャルを作成します。
private_keyには、作成した秘密鍵の内容からヘッダ(-----BEGIN RSA PRIVATE KEY-----)、フッタ(-----END RSA PRIVATE KEY-----)を除いた部分を記述します。
SET DEFINE OFF
BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'MY_SDK_CRED',
user_ocid => 'ユーザのOCID',
tenancy_ocid => 'テナントのOCID',
private_key => 'MIIE......',
fingerprint => '公開キーのフィンガープリント'
);
END;
/
今回はAutonomous Databaseに標準搭載されているSQL Developer Webから実行しました。
5.PL/SQL SDKを使用したPL/SQLプロシジャの作成
今回は以下のようなPL/SQLプロシジャを作成しました。
・リージョン、ネームスペース、バケット名を受け取って、該当ストレージ・バケット内にあるオブジェクトの一覧を取得し、取得したオブジェクトの名前をobject_list表に挿入
object_list表は以下のSQLで作成します。
CREATE TABLE object_list (
object_name VARCHAR2(100)
);
実際に作成したPL/SQLプロシジャは以下のようになります。
CREATE OR REPLACE PROCEDURE get_obj_list(namespace IN VARCHAR2, bucket IN VARCHAR2, region_id IN VARCHAR2)
IS
object_summary dbms_cloud_oci_obs_object_storage_object_summary_tbl;
response_body dbms_cloud_oci_obs_object_storage_list_objects_t;
response dbms_cloud_oci_obs_object_storage_list_objects_response_t;
json_obj json_object_t;
l_keys json_key_list;
BEGIN
-- 指定されたバケット内のオブジェクトリストの取得
response := dbms_cloud_oci_obs_object_storage.list_objects(
namespace_name => namespace,
bucket_name => bucket,
credential_name => 'MY_SDK_CRED',
region => region_id);
response_body := response.response_body;
object_summary := response_body.objects;
-- 取得したオブジェクト名をobject_list表にINSERT
FOR i IN object_summary.first..object_summary.last LOOP
INSERT INTO object_list VALUES (object_summary(i).name);
END LOOP;
COMMIT;
END;
/
6. PL/SQLプロシジャの動作確認
PL/SQLプロシージャが作成できたので、動作を確認してみます。
まず、object_list表を空にします。
TRUNCATE TABLE object_list;
次に、実際に表にデータがないか確認します。
SELECT * FROM object_list;
先ほど作成したPL/SQLプロシジャを実行します。
こちらでは、
ネームスペース:nrhnlrqdttaw
バケット名:MyBucket
リージョン:ap-tokyo-1
として実行します。
なお、こちらのバケットには5つのオブジェクトが格納されています。
EXECUTE get_obj_list('nrhnlrqdttaw','MyBucket','ap-tokyo-1');
object_list表の中身を確認します。
SELECT * FROM object_list;
このように、PL/SQL SDKを使用してバケット内のオブジェクト名の一覧を取得し、Autonomous Database内の表に格納することができました。
PL/SQL SDKはオブジェクト・ストレージだけでなくさまざまなOCIのサービスに対応していますので、いろいろ活用できそうです。
今後もいろいろ試してみたいと思います。