はじめに
とある目的のために、指定した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を作成します。
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を起動します。
Autonomous Databaseの状態が「起動中」に変わります。
しばらく待つと「使用可能」になります。
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を停止します。
Autonomous Databaseの状態が「停止中」に変わります。
しばらく待つと「停止済」になります。
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プロシージャが作成できました。
めでたし、めでたし