はじめに
2020年10月より、Oracle Cloud InfrastructureのSDK提供言語にPL/SQLが追加されました。本記事作成(2020年10月18日)時点では、英語ドキュメントのみの提供となっています。
本記事作成時点では、本SDKの提供対象はAutonomous Databaseのみとなっています。一方、Autonomous Databaseのサービスさえあれば、特段他の有償サービス利用せずとも、更にFree Tierであっても、PL/SQL SDKを使用してOracle Cloud関連の情報を取得してデータベースに格納することが可能です。さらにAPEXで閲覧や分析を行ったり、独自管理画面を作成することも可能になっています。他の言語に比べるとまだAPIが揃ってはいないようですが、現時点でも色々試せそうです。
本記事では、PL/SQL SDKを使用するために必要な事前設定の手順と、サンプルアプリケーションの実行について解説します。
事前準備
SDK自体のインストールはすでに行われているので、他の言語よりは簡単に使い始めることが可能です。
ただし、他の言語やoci-cliの利用の経験がない方は、以下を参照して、可能であればoci-cliのセットアップを実施すると、事前準備に必要な情報も揃うのでお勧めです。
事前準備の際に具体的に何を指定すればいいのかわからない場合は、以下をご参照ください。
Oracle Cloud : コマンド・ライン・インタフェース(CLI) をインストールしてみた
1. 権限の付与
ADMINユーザーを使用する場合は特段気にする必要はありませんが、他のユーザーを使用する場合は、事前準備のステップを実行するために最低限以下の権限が必要です。
- CREATE SESSION
- EXECUTE ON DBMS_CLOUD
本記事ではAPEXPRODというユーザーを作成して上記権限を付与しています。
SQL> grant create session to apexprod;
Grant succeeded.
SQL> grant execute on dbms_cloud to apexprod;
Grant succeeded.
2. 資格証明の作成
SDK利用DBユーザーでログインし、DBMS_CLOUD.CREATE_CREDENTIALプロシージャを使用して、SDKを利用するための資格証明を作成します。
begin
dbms_cloud.create_credential(
credential_name => 'CRED1'
, user_ocid => 'ocid1.user.oc1..(以下省略)'
, tenancy_ocid => 'ocid1.tenancy.oc1..(以下省略)'
, private_key => 'MIIEogIBAAKCAQEAo9h5dW6upKC5yEk/0e5Qt7zPbu6myWVaYIFFgZPFAlqVKfct
(中略)
7SGwpn9klpQCj9Mg5ZxOTKe+96QrV26jvdfqRQxitgfUdB6YlSQ='
, fingerprint => 'cb:4d:(以下省略)'
);
end;
/
| 引数名 | 指定内容 |
|---|---|
| CREDENTIAL_NAME | 資格証明の名称 |
| USER_OCID | SDKを使用するOracle CloudのユーザのOCID |
| TENANCY_OCID | SDKを使用するOracle CloudのテナントのOCID |
| PRIVATE_KEY | 秘密鍵。パスフレーズの利用不可 |
| FINGERPRINT | ユーザーに登録した公開鍵のフィンガープリント |
登録に成功すれば、登録された資格証明の情報はディクショナリUSER_CREDENTIALSで検索できるようになります。
サンプルアプリケーションの実行
今回はOracle Cloudの監査ログの保存日数を取得するAPIを実行する、サンプルの無名PL/SQLを作成、実行します。
1. 権限の付与
OCIのPL/SQL SDKは「DBMS_CLOUD_OCI_」で始まる名称のパッケージの形態で提供されており、「DBMS_CLOUD_OCI_」で始まる名称のユーザー定義型(オブジェクト型)を多用しています。ADMIN以外のユーザーでSDKを使用するためには、利用するパッケージやユーザー定義型の実行権限を付与する必要があります。以下では、今回のサンプルアプリケーションを実行するために必要な権限を付与しています。
SQL> grant execute on dbms_cloud_oci_ad_audit to apexprod;
Grant succeeded.
SQL> grant execute on dbms_cloud_oci_ad_audit_get_configuration_response_t to apexprod;
Grant succeeded.
2. アプリケーションの作成と実行
SQL> set serveroutput on
SQL> declare
2 result dbms_cloud_oci_ad_audit_get_configuration_response_t;
3 begin
4 result := dbms_cloud_oci_ad_audit.get_configuration(
5 compartment_id => 'ocid1.compartment.oc1..(以下省略)'
6 , region => 'ap-osaka-1'
7 , credential_name => 'CRED1'
8 );
9 dbms_output.put_line(to_char(result.response_body.retention_period_days));
10 end;
11 /
365
PL/SQL procedure successfully completed.