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

はじめに

とある目的のために、指定したAutonomous Databaseが指定した状態(Lifecycle State)になるのを待って終了するPL/SQLプロシージャを作成しました。

ここでは、以下の記事で作成しているAutonomous DatabaseがあるリージョンとAutonomous DatabaseのOCIDを引数として渡すと、指定されたAutonoumos Databaseのステータス(Lifecycle State)を返すファンクションget_adb_stateが作成済みの前提でプロシージャを作成しています。

1. PL/SQLプロシージャの作成

Autonomous Databaseがあるリージョン、Autonomous DatabaseのOCIDと、プロシージャの終了条件となるAutonomous Databaseの状態(Lifecycle State)を指定して実行すると、30秒おきにAutonomous Databaseの状態を確認し、Autonomous Databaseが指定した状態になったら終了するストアド・プロシージャwait_adb_stateを作成します。

wait_adb_state
CREATE OR REPLACE PROCEDURE wait_adb_state (adb_region IN VARCHAR2, adb_ocid IN VARCHAR2, adb_state IN VARCHAR2)
  IS
  BEGIN
    WHILE (get_adb_state(adb_region, adb_ocid) != UPPER(adb_state))
      LOOP
        DBMS_SESSION.SLEEP(30);
	    DBMS_OUTPUT.PUT_LINE('Waiting for '||UPPER(adb_state)||' state.'||CHR(10));
	    DBMS_OUTPUT.PUT_LINE('Current status is '||get_adb_state(adb_region, adb_ocid)||CHR(10));
      END LOOP;
  END;
/

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

SQL> CREATE OR REPLACE PROCEDURE wait_adb_state (
  2    adb_region IN VARCHAR2,
  3    adb_ocid   IN VARCHAR2,
  4    adb_state  IN VARCHAR2
  5  )
  6    IS
  7    BEGIN
  8      WHILE (get_adb_state(adb_region, adb_ocid) != UPPER(adb_state))
  9        LOOP
 10          DBMS_SESSION.SLEEP(30);
 11          DBMS_OUTPUT.PUT_LINE('Waiting for '||UPPER(adb_state)||'state.'||CHR(10));
 12          DBMS_OUTPUT.PUT_LINE('Current status is '||get_adb_state(adb_region, adb_ocid)||CHR(10));
 13        END LOOP;
 14    END;
 15  /

プロシージャが作成されました。

SQL>

大阪リージョンにあるAutonomous Databaseが「AVAILABLE」(使用可能)の状態になるのを待つようにパラメータを渡してプロシージャを実行します。

SQL> set time on
15:50:34 SQL> exec wait_adb_state('ap-osaka-1','ocid1.autonomousdatabase.oc1.ap-osaka-1.anvwsljrssl65iqauegw5yxqxprruyhckxfs5atzsitj5xjgrz4e4q4b5pia','AVAILABLE')

この時点ではプロシージャは実行状態のままのため、表示は変わりません。

コンソールから対象のAutonomous Databaseを起動します。
スクリーンショット 2022-12-07 15.31.31.png
Autonomous Databaseの状態が「起動中」に変わります。
スクリーンショット 2022-12-07 15.32.13.png
しばらく待つと「使用可能」になります。
スクリーンショット 2022-12-07 15.33.27.png

SQL*Plusを確認すると、プロシージャが完了しています。

15:50:34 SQL> exec wait_adb_state('ap-osaka-1','ocid1.autonomousdatabase.oc1.ap-osaka-1.anvwsljrssl65iqauegw5yxqxprruyhckxfs5atzsitj5xjgrz4e4q4b5pia','available')
Waiting for AVAILABLE state.

Current status is STARTING


Waiting for AVAILABLE state.

Current status is STARTING


Waiting for AVAILABLE state.

Current status is AVAILABLE



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

15:52:08 SQL>

同様に大阪リージョンにあるAutonomous Databaseが「AVAILABLE」(使用可能)の状態になるのを待つようにパラメータを渡してプロシージャを実行します。

15:53:06 SQL> exec wait_adb_state('ap-osaka-1','ocid1.autonomousdatabase.oc1.ap-osaka-1.anvwsljrssl65iqauegw5yxqxprruyhckxfs5atzsitj5xjgrz4e4q4b5pia','STOPPED')

対象のAutonomous Databaseを停止します。
スクリーンショット 2022-12-07 15.36.20.png
Autonomous Databaseの状態が「停止中」に変わります。
スクリーンショット 2022-12-07 15.36.59.png
しばらく待つと「停止済」になります。
スクリーンショット 2022-12-07 16.15.10.png

SQL*Plusを確認すると、プロシージャが完了しています。

15:53:06 SQL> exec wait_adb_state('ap-osaka-1','ocid1.autonomousdatabase.oc1.ap-osaka-1.anvwsljrssl65iqauegw5yxqxprruyhckxfs5atzsitj5xjgrz4e4q4b5pia','STOPPED')
Waiting for STOPPED state.

Current status is STOPPING

Waiting for STOPPED state.

Current status is STOPPING


Waiting for STOPPED state.

Current status is STOPPING


Waiting for STOPPED state.

Current status is STOPPED



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

15:54:43 SQL>

まとめ

Autonomous Databaseが指定したステータス(Lifecycle State)になるのを待って終了するPL/SQLプロシージャが作成できました。
めでたし、めでたし

参考資料

DBMS_SESSION.SLEEP

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?