はじめに
7月にData Studioの中でジョブというメニューが追加されました。ジョブを利用するとData Studioで実行される以下のタスクの実行を自動化することができます。
- 繰り返し可能なデータ・ロードの実行
- 表AI支援レシピの実行
- PL/SQLプロシージャの実行
- REST呼び出しの実行
ドキュメントに詳しく記載はあるのですが試してみることにしました。
資格証明の作成
設定から資格証明を選択し、資格証明の作成をクリックします。
表AI支援レシピも作成しようと思うので、Oracle Cloud Infrastructure署名キーで作成します。
OCI署名キーで必要なパラメータについてはこちらのドキュメントに記載があります。
次にクラウド・サービスを選択します。作成したOCI資格証明と利用しているコンパートメントを設定します。
最後にAI Profileを選択し、プロファイルの作成をしてから、AIアクセスのチェックを行います。
AIプロファイルの作成についてはこちらの記事が参考になります。
実行するタスクの作成
呼び出し可能な各タスクを作成します。
データロード
クラウドストアのCSVファイルからデータをデータベースにロードします。
実行します。再ロード可能なデータロードのタスクが作成できました。
表AI支援
表AI支援を選択し、ロードした表から+新規レシピをクリックします。
ターゲット・タイプにビューの作成を選択し、ステップの追加で列の追加または置換をクリックします。
今回は勤続年数の列を追加しようと思い、そのまま記載してAIに質問します。
結果が返されました。データのプレビューで勤続年数という列に値が入っています。
勤続年数という列名をYOSと変えて保存します。
こちらのようになりました。ビューの作成はあえてクリックしないままにします。
PL/SQLプロシージャの作成
今回は呼び出しの検証なので、何もしないPL/SQLプロシージャを作成しました。
create or replace procedure pro1 is
begin
null;
end;
REST API
Object Storageから元のCSVファイルを削除することにします。こちらのAPIに従います。
ジョブの作成
ジョブの設定をします。Database Actionsにログインし、Data Studioからジョブを選択し、ジョブの作成をします。
ジョブの名前、説明を入力
ステップの追加
ステップを追加します。これらから選択できるようです。
順番に追加していきます。
追加後の画面はこちらのようになりました。
レポート
実行レポートの通知設定も可能のようですが、今回はそのままにします。
スケジュール
定期的に実行する場合はスケジュールの設定ができます。
API詳細
こちらで表示される情報を利用して作成したジョブをRESTやSQLでも呼び出すことができます。
作成をクリックすると実行するかどうかを尋ねられます。
実行完了後
実行が完了するとレポートを参照することができます。
そのほか確認してみたこと
スケジューラーによる実行
今回作成後にジョブを実行した時は自動的にスケジューラーは有効になりませんでした。スケジューラを有効化するときにはジョブのメニューから[ジョブの有効化]を選択します。
なお、ジョブを有効化して、メニューから[スケジューラーのジョブ]を選択すると、スケジューリングの画面で情報を確認することができます。
ジョブの実行が失敗した場合はどうなるか?
元のファイルを削除しエラーが発生する状態で実行しました。レポートは!になっており、スケジュールで設定されたタイミングで実行が繰り返されていました。
レポートを見ると以下の通りでした。ORA-20204が出力されていることが確認できます。データロードタスクの後で停止していないのは、ステップの追加の時に「エラー時にジョブを停止」にチェックを入れていなかったからです。
GUIだけなのか?
GUIだけでなくDBMS_CLOUD_TOOLS_JOBパッケージを利用してCLIで作成することもできます。
ジョブの編集でソースの表示をすると、以下の通り。DBMS_DATA_TOOLS_JOBパッケージで実行されていることがわかります。
DECLARE
l_job_name DBMS_ID := 'TESTJOB1';
l_job_description VARCHAR2(4000) := null;
l_steps CLOB := q'[[
{
"type" : "data_load",
"data_load_name" : "EMP_DATA_LOAD_237",
"on_errors" : "continue"
},
{
"type" : "smart_table",
"recipe_name" : "EMP_RECIPE1",
"on_errors" : "stop"
},
{
"type" : "procedure",
"procedure" : "PRO1",
"arguments" : "PRO1",
"on_errors" : "stop"
},
{
"type" : "http",
"method" : "DELETE",
"url" : "https://tenancyname.objectstorage.ap-osaka-1.oci.customer-oci.com/n/tenancyname/b/upload_bucket/o/emp.csv",
"credential_name" : "CRED_OCI",
"on_errors" : "stop"
}
]]';
l_owner DBMS_ID := 'TESTUSER1';
l_start_date TIMESTAMP WITH TIME ZONE := to_timestamp_tz('2025-08-15T14:00:00Z', 'YYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZM');
l_repeat_interval VARCHAR2(4000) := 'FREQ=MINUTELY;INTERVAL=30';
l_end_date TIMESTAMP WITH TIME ZONE := to_timestamp_tz('2025-08-29T22:07:00Z', 'YYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZM');
l_job_class DBMS_ID := null;
l_reporting CLOB := q'[{
"completed" :
{
"smtp" :
[
]
},
"errors" :
{
"smtp" :
[
]
},
"failed" :
{
"smtp" :
[
]
},
"long" :
{
"smtp" :
[
]
}
}]';
BEGIN
"C##ADP$SERVICE"."DBMS_DATA_TOOLS_JOBS"."UPDATE_JOB"(
job_name => l_job_name,
description => l_job_description,
steps => l_steps,
owner => l_owner,
start_date => l_start_date,
repeat_interval => l_repeat_interval,
end_date => l_end_date,
job_class => l_job_class,
enabled => false,
reporting => l_reporting);
END;
おわりに
Database Actionsのジョブ機能を試してみました。Data Studioのタスクを続けてや、定期的に実行させたいといった場合に活用できると思います。