Autonomous Databaseのリフレッシュ可能クローンのリフレッシュを、ソースとなっているAutonomous DatabaseでPL/SQL SDKを用いて自動実行させてみました。
※こちらはあくまでサンプルのため、クローンの状態の確認やエラーハンドリングは実装しておりません。こちらを参考に本番環境に実装される際は、適宜エラーハンドリング等を追加で実装してください。
リフレッシュ可能クローンのOCIDとリージョンを指定して、10分前のタイムスタンプを指定して対象となるクローンのリフレッシュを実行するPL/SQLプロシージャ「refresh_clone」を作成します。
ここではクレデンシャルとしてリソース・プリンシパルを使用しています。
CREATE OR REPLACE PROCEDURE refresh_clone
IS
response_body dbms_cloud_oci_database_autonomous_database_t;
response dbms_cloud_oci_db_database_autonomous_database_manual_refresh_response_t;
refresh_details dbms_cloud_oci_database_autonomous_database_manual_refresh_details_t;
clone_ocid VARCHAR2(256);
region_id VARCHAR2(20);
BEGIN
-- リフレッシュ可能クローンのOCIDをセット
clone_ocid := 'ocid1.autonomousdatabase.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
--リージョン識別子をセット
region_id := 'us-ashburn-1';
-- refresh_detailsの初期化
refresh_details := dbms_cloud_oci_database_autonomous_database_manual_refresh_details_t();
-- 10分前のタイムスタンプを取得
SELECT systimestamp-(1/144) INTO refresh_details.time_refresh_cutoff FROM dual;
-- 10分前のタイムスタンプを指定してリフレッシュ可能クローンのリフレッシュを実行
response := DBMS_CLOUD_OCI_DB_DATABASE.AUTONOMOUS_DATABASE_MANUAL_REFRESH(
autonomous_database_id => clone_ocid,
autonomous_database_manual_refresh_details => refresh_details,
credential_name => 'OCI$RESOURCE_PRINCIPAL',
region => region_id);
END;
/
PL/SQLプロシージャが作成できたので実行してみます。
EXECUTE refresh_clone;
コンソールでリフレッシュ可能クローンの状態を確認してみます。
作業リクエストを確認してみます。
リフレッシュが開始されたことが確認できました。
作成したプロシージャREFRESH_CLONEが毎日0時に自動実行されるように、DBMS_SCHEDULERのジョブ"REFRESH_CLONE_JOB"を作成します。
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'REFRESH_CLONE_JOB',
job_type => 'STORED_PROCEDURE',
job_action => 'ADMIN.REFRESH_CLONE',
start_date => TO_TIMESTAMP_TZ('2022-07-8 00:00:00 +9:00','YYYY-MM-DD HH24:MI:SS TZH:TZM'),
repeat_interval => 'FREQ=DAILY;INTERVAL=1',
auto_drop => FALSE,
enabled => TRUE
);
END;
/
以上で、Autonomous Databaseが毎日0時に自動的にリフレッシュ可能クローンをリフレッシュするように設定できました。