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?

More than 1 year has passed since last update.

[OCI]指定したAutonomous Databaseのステータス(Lifecycle State)を返すPL/SQLファンクションを作成してみた

Last updated at Posted at 2022-12-07

はじめに

SQLでAutonomous Databaseのステータス(AVAILABLE、STOPPED、STARTING、UPDATING等)が確認できると何かと便利なので、指定したAutonomous Databaseのステータスを返すストアド・ファンクションを作成してみました。

Autonomous DatabaseがあるリージョンとAutonomous DatabaseのOCIDを引数として渡すと、指定されたAutonoumos Databaseのステータス(Lifecycle State)を返すファンクションget_adb_stateを作成します。
ここではAPIアクセスの認証にAutonomous Databaseのリソース・プリンシパルを使用しています。

get_adb_state Function
CREATE OR REPLACE FUNCTION get_adb_state ( adb_region IN VARCHAR2, adb_ocid IN VARCHAR2)
  RETURN VARCHAR2
  IS
    request_uri    VARCHAR2(300);
    resp           DBMS_CLOUD_TYPES.resp;
  
  BEGIN
-- 指定したAutonomous Databaseの情報を取得するAPIをコールするためのURIの生成
    request_uri := 'https://database.'||adb_region||'.oraclecloud.com/20160918/autonomousDatabases/'||adb_ocid;
-- Autonomous Databaseの情報を取得するAPIをコール
    resp := DBMS_CLOUD.SEND_REQUEST(
                credential_name => 'OCI$RESOURCE_PRINCIPAL',
                uri => request_uri,
                method => DBMS_CLOUD.METHOD_GET
            );
-- 取得したAutonomous Databaseの情報内のlifecycleStateの値を戻す
    RETURN json_value(DBMS_CLOUD.GET_RESPONSE_TEXT(resp), '$.lifecycleState');
  END;
/

SQL*Plusから作成してみます。

SQL> CREATE OR REPLACE FUNCTION get_adb_state ( adb_region IN VARCHAR2, adb_ocid IN VARCHAR2)
  2    RETURN VARCHAR2
  3    IS
  4      request_uri    VARCHAR2(300);
  5      resp           DBMS_CLOUD_TYPES.resp;
  6    BEGIN
  7      request_uri := 'https://database.'||adb_region||'.oraclecloud.com/20160918/autonomousDatabases/'||adb_ocid;
  8      resp := DBMS_CLOUD.SEND_REQUEST(
  9                  credential_name => 'OCI$RESOURCE_PRINCIPAL',
 10                  uri => request_uri,
 11                  method => DBMS_CLOUD.METHOD_GET
 12              );
 13      RETURN json_value(DBMS_CLOUD.GET_RESPONSE_TEXT(resp), '$.lifecycleState');
 14    END;
 15  /

ファンクションが作成されました。

SQL>

問題なく作成できましたので、早速実行してみます。
get_adb_stateファンクションにAutonomous DatabaseがあるリージョンとAutonomous DatabaseのOCIDを渡して実行してみました。
ここではap-osaka-1(=大阪リージョン)と大阪リージョンにあるAutonomous DatabaseのOCIDを指定しています。

SQL> select get_adb_state('ap-osaka-1','ocid1.autonomousdatabase.oc1.ap-osaka-1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') adb_state from dual;

ADB_STATE
--------------------------------------------------------------------------------
AVAILABLE

SQL>

ステータスが「AVAILABLE」であることがわかりました。

コンソールでAutonomous Databaseのステータスを確認してみます。
スクリーンショット 2022-12-07 13.44.26.png
「使用可能」であることが確認できました。

こちらのAutonomous Databaseを停止して、get_adb_stateファンクションの結果が変化するかを確認してみます。
スクリーンショット 2022-12-07 13.46.33.png

コンソールで「停止中」となっている状態では、get_adb_stateファンクションの結果が「STOPPING」になりました。

SQL> select get_adb_state('ap-osaka-1','ocid1.autonomousdatabase.oc1.ap-osaka-1.anvwsljrssl65iqauegw5yxqxprruyhckxfs5atzsitj5xjgrz4e4q4b5pia') adb_state from dual;

ADB_STATE
--------------------------------------------------------------------------------
STOPPING

SQL>

停止済みになるのを待ちます。
スクリーンショット 2022-12-07 13.48.26.png

コンソールで「停止済」となっている状態では、get_adb_stateファンクションの結果が「STOPPED」になりました。

SQL> select get_adb_state('ap-osaka-1','ocid1.autonomousdatabase.oc1.ap-osaka-1.anvwsljrssl65iqauegw5yxqxprruyhckxfs5atzsitj5xjgrz4e4q4b5pia') adb_state from dual;

ADB_STATE
--------------------------------------------------------------------------------
STOPPED

SQL>

こちらのAutonomous Databaseを起動します。
スクリーンショット 2022-12-07 14.05.51.png

コンソールで「起動中」となっている状態では、get_adb_stateファンクションの結果が「STARTING」になりました。

SQL> select get_adb_state('ap-osaka-1','ocid1.autonomousdatabase.oc1.ap-osaka-1.anvwsljrssl65iqauegw5yxqxprruyhckxfs5atzsitj5xjgrz4e4q4b5pia') adb_state from dual;

ADB_STATE
--------------------------------------------------------------------------------
STARTING

SQL>

Autonomous Databaseが使用可能になるのを待ちます。
スクリーンショット 2022-12-07 14.08.09.png

get_adb_stateファンクションの結果が「STARTING」に戻りました。

SQL> select get_adb_state('ap-osaka-1','ocid1.autonomousdatabase.oc1.ap-osaka-1.anvwsljrssl65iqauegw5yxqxprruyhckxfs5atzsitj5xjgrz4e4q4b5pia') adb_state from dual;

ADB_STATE
--------------------------------------------------------------------------------
AVAILABLE

SQL>

こちらのAutonomous Databaseはリフレッシュ可能クローンなので、リフレッシュを実行してみます。
リフレッシュ中はコンソールでは「更新中」と表示されます。
スクリーンショット 2022-12-07 14.12.42.png
コンソールで「更新中」となっている状態では、get_adb_stateファンクションの結果が「UPDATING」になりました。

SQL> select get_adb_state('ap-osaka-1','ocid1.autonomousdatabase.oc1.ap-osaka-1.anvwsljrssl65iqauegw5yxqxprruyhckxfs5atzsitj5xjgrz4e4q4b5pia') adb_state from dual;

ADB_STATE
--------------------------------------------------------------------------------
UPDATING

SQL> 

まとめ

指定したAutonomous Databaseの状態(Lifecycle State)を返すストアド・ファンクションを作成できました。
めでたし、めでたし。

参考資料

API Reference and Endpoints:Database Service API
API Reference and Endpoints:GetAutonomousDatabase
DBMS_CLOUD.SEND_REQUEST
DBMS_CLOUD.GET_RESPONSE_TEXT

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?