4.3 デーモン・ジョブのスケジューリング
このデーモンの動作は、スケジュールするジョブを定義するYAML構成ファイルによって制御されます。
このYAMLファイルまたはスケジュール・ファイルの名前はscheduler.yamlです。SQLclデーモンによってこのファイルが読み取られて、ジョブがロードされスケジュールされます。
スケジュール・ファイルの場所、その構造、およびジョブをリロードするためにこのファイルをデーモンでアクティブにモニターする方法について学習します。
4.3.1 スケジュール・ファイルの場所
データベース・ツール(dbtools)のホーム・ディレクトリにスケジュール・ファイルが含まれています。
スケジュール・ファイルの場所は次のとおりです:
${HOME}/.dbtools/schedules/scheduler.yaml
このデーモンが初めて起動されたときに、それにより、この場所に、スケジュール・ファイル(コメントアウトされたサンプル・ジョブが含まれている)が自動的に作成されます。
初回実行時のデフォルト・コンテンツ:
cat ~/.dbtools/schedules/scheduler.yaml
jobs:
# - name: job-example
# cron: 0/2 * * * * ? *
# connection: named-conn-example
# payload: "@/path/to/script.sql arg1 arg2 arg3"
4.3.2 スケジュール・ファイルの構造
scheduler.yamlファイルには、ジョブ定義のリストを指すトップ・レベル・キー(jobs)が含まれています。
jobsリスト内の各ジョブ・エントリは、次のキーがあるオブジェクトです:
- name (必須): そのジョブの一意の識別子。この名前は、そのジョブのログ・ファイルにも使用されます。
- cron (必須): そのスケジュールを定義する7つのフィールド(秒から年まで)がある、Quartz互換のcron式。
- connection (オプション): 保存されているSQLcl接続(たとえば、
conn -save <name> -savepwdを使用して作成された接続)。保存されている接続を使用すると、対話形式のパスワード・プロンプトなしでそのジョブを実行できるようになります。省略した場合は、ジョブはデフォルトの接続(
/ as sysdba)を使用して実行されます。 - payload (必須): デーモンによって実行される有効なSQL、PL/SQL、またはSQLcl固有のコマンドまたはスクリプト。
ペイロードの例:
- インラインSQLまたはSQLclコマンド: 単純な単一行の操作に役立ちます。
payload: desc employees - 引数を指定したスクリプト・ファイル: 複数のユースケースにわたる再利用性と柔軟性を高めるために役立ちます。
payload: "@/path/to/generate_report.sql 2024 Q1"@で始まる文字列を引用符で囲むことに注意してください。この文字列を引用符なしで使用すると構文エラーが発生します。@文字はYAML仕様に準じて将来使用するために予約されていることが原因です。 - YAMLリテラル・ブロックを使用した複数行ペイロード: YAMLで直接定義されている長いSQLまたはPL/SQLスクリプトに最適です。
payload: | BEGIN DBMS_OUTPUT.PUT_LINE('Job started'); -- Add more PL/SQL logic here END; /
- インラインSQLまたはSQLclコマンド: 単純な単一行の操作に役立ちます。