はじめに
Autonomous Databaseと組み合わせて使用されることの多いOracle Analytics Cloudの自動起動/停止をAutonomous Databaseを使用して実現する方法を検証してみました。
この記事ではリソース・プリンシパルを使用しますので、こちらのマニュアルに従って、使用するAutonomous Databaseを含む動的グループを作成し、作成した動的グループに対してAnalytics Cloudに対する操作を許可するポリシーを作成する必要があります。
動的グループの作成例:
動的グループadb_groupを作成し、一致ルールとして以下を入力
(resource.idにAutonomous DatabaseのOCIDを指定)
resource.id='ocid1.autonomousdatabase.oc1.ap-tokyo-1.xxxxxxxxxxxxxxxxxxxx'
ポリシーの例:
動的グループadb_groupに属するリソースに、テナンシ内の全てのアナリティクス・インスタンスの管理を許可する
allow dynamic-group adb_group to manage analytics-instances in tenancy
Oracle Analytics Cloudインスタンスを管理する権限、ポリシーに関する詳細は、こちらのマニュアルに記載があります。
1.Analytics CloudインスタンスのOCIDの確認
コンソールで操作対象となるAnalytics InstanceのOCIDを確認してメモしておきます。
2.Autonomous Databaseへの接続
SQL*PlusからAutonomous Databaseに接続します。
SQL*Plus: Release 19.0.0.0.0 - Production on 水 3月 8 17:12:12 2023
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
最終正常ログイン時間: 水 3月 08 2023 09:50:44 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.18.0.1.0
に接続されました。
SQL>
3.Analytics Cloudインスタンスを起動するプロシージャの作成
Analytics Cloudインスタンスを起動するプロシージャ「start_oac_instance」を作成します。
SQL> CREATE OR REPLACE PROCEDURE start_oac_instance
2 IS
3 response dbms_cloud_oci_an_analytics_start_analytics_instance_response_t;
4 target_oac_region VARCHAR2(200) := 'ap-tokyo-1'; -- Analytics Cloudインスタンスのリージョン
5 target_oac_ocid VARCHAR2(200) := 'ocid1.analyticsinstance.oc1.ap-tokyo-1.aaxxxxxxxxxxxxxja'; -- Analytics CloudインスタンスのOCID
6
7 BEGIN
8 response := DBMS_CLOUD_OCI_AN_ANALYTICS.START_ANALYTICS_INSTANCE (
9 analytics_instance_id => target_oac_ocid,
10 region => target_oac_region,
11 credential_name => 'OCI$RESOURCE_PRINCIPAL'
12 );
13 END;
14 /
プロシージャが作成されました。
SQL>
4.Analytics Cloudインスタンスを停止するプロシージャの作成
Analytics Cloudインスタンスを停止するプロシージャ「stop_oac_instance」を作成します。
SQL> CREATE OR REPLACE PROCEDURE stop_oac_instance
2 IS
3 response dbms_cloud_oci_an_analytics_stop_analytics_instance_response_t;
4 target_oac_region VARCHAR2(200) := 'ap-tokyo-1'; -- Analytics Cloudインスタンスのリージョン
5 target_oac_ocid VARCHAR2(200) := 'ocid1.analyticsinstance.oc1.ap-tokyo-1.aaxxxxxxxxxxxxxja'; -- Analytics CloudインスタンスのOCID
6
7 BEGIN
8 response := DBMS_CLOUD_OCI_AN_ANALYTICS.STOP_ANALYTICS_INSTANCE (
9 analytics_instance_id => target_oac_ocid,
10 region => target_oac_region,
11 credential_name => 'OCI$RESOURCE_PRINCIPAL'
12 );
13 END;
14 /
プロシージャが作成されました。
SQL >
5.作成したプロシージャのテスト実行
プロシージャ「start_oac_instance」を実行します。
SQL> exec start_oac_instance
PL/SQLプロシージャが正常に完了しました。
SQL>
コンソールで対象のAnalytics Cloudインスタンスの状態を確認します。
状態が「非アクティブ」から「更新中」になりました。
少し待つと、状態が「アクティブ」になり、Analytics Cloudのインスタンスが起動しました。
次にプロシージャ「stop_oac_instance」を実行します。
SQL> exec stop_oac_instance
PL/SQLプロシージャが正常に完了しました。
SQL>
コンソールで対象のAnalytics Cloudインスタンスの状態を確認します。
状態が「アクティブ」から「更新中」になりました。
少し待つと、状態が「非アクティブ」になり、Analytics Cloudのインスタンスが停止しました。
6.Analytics Cloudインスタンスを起動するプロシージャの自動実行の設定
毎日朝8時にプロシージャ「start_oac_instance」を実行してAnalytics Cloudインスタンスを起動するジョブ「START_OAC_INSTANCE_JOB」を作成します。
SQL> BEGIN
2 DBMS_SCHEDULER.CREATE_JOB (
3 job_name => 'START_OAC_INSTANCE_JOB', -- ジョブの名前
4 job_type => 'STORED_PROCEDURE', -- ジョブのタイプ
5 job_action => 'ADMIN.START_OAC_INSTANCE', --実行するプロシージャ名
6 start_date => TO_TIMESTAMP_TZ('2023-03-09 08:00:00 +9:00','YYYY-MM-DD HH24:MI:SS TZH:TZM'), --初回実行のタイムスタンプ
7 repeat_interval => 'FREQ=DAILY;INTERVAL=1', -- ジョブの実行頻度
8 auto_drop => FALSE); -- ジョブの実行後の自動削除
9 END;
10 /
PL/SQLプロシージャが正常に完了しました。
SQL>
ジョブ「START_OAC_INSTANCE_JOB」を有効化します。
SQL> EXEC DBMS_SCHEDULER.ENABLE('START_OAC_INSTANCE_JOB');
PL/SQLプロシージャが正常に完了しました。
SQL>
7.Analytics Cloudインスタンスを停止するプロシージャの自動実行の設定
毎日18時にプロシージャ「stop_oac_instance」を実行してAnalytics Cloudインスタンスを停止するジョブ「STOP_OAC_INSTANCE_JOB」を作成します。
SQL> BEGIN
2 DBMS_SCHEDULER.CREATE_JOB (
3 job_name => 'STOP_OAC_INSTANCE_JOB', -- ジョブの名前
4 job_type => 'STORED_PROCEDURE', -- ジョブのタイプ
5 job_action => 'ADMIN.STOP_OAC_INSTANCE', --実行するプロシージャ名
6 start_date => TO_TIMESTAMP_TZ('2023-03-09 18:00:00 +9:00','YYYY-MM-DD HH24:MI:SS TZH:TZM'), --初回実行のタイムスタンプ
7 repeat_interval => 'FREQ=DAILY;INTERVAL=1', -- ジョブの実行頻度
8 auto_drop => FALSE); -- ジョブの実行後の自動削除
9 END;
10 /
PL/SQLプロシージャが正常に完了しました。
SQL>
ジョブ「STOP_OAC_INSTANCE_JOB」を有効化します。
SQL> EXEC DBMS_SCHEDULER.ENABLE('STOP_OAC_INSTANCE_JOB');
PL/SQLプロシージャが正常に完了しました。
SQL>
8.作成したジョブの確認
作成したジョブを確認します。
SQL> SELECT job_name, enabled, next_run_date
2 FROM user_scheduler_jobs
3 WHERE job_name IN ('START_OAC_INSTANCE_JOB','STOP_OAC_INSTANCE_JOB');
JOB_NAME
--------------------------------------------------------------------------------
ENABL
-----
NEXT_RUN_DATE
---------------------------------------------------------------------------
START_OAC_INSTANCE_JOB
TRUE
23-03-09 08:00:00.000000 +09:00
STOP_OAC_INSTANCE_JOB
TRUE
23-03-09 18:00:00.000000 +09:00
SQL>
以上で、毎日決まった時間に行うOracle Analytics Instanceの起動/停止をAutonomous Databaseを使って実現できました。