
はじめに
株式会社KYOSOでは、SAP BTP(Business Technology Platform)上でのSAP Fioriアプリケーション開発や、お客様のシステムの安定運用を支える技術支援を幅広く行っています。
今回は、リリース時の監査ログを定期的に取得・保存するという観点から、SAP HANA Databaseのプロシージャとジョブスケジューラを活用した自動化について調査する機会がありました。
SAP HANAでは、これらを組み合わせることで、日々のデータ処理を無理なく自動化することができます。特定のデータを履歴として蓄積したり、定期的な集計・更新を行ったりする場合、手作業の負担を減らしつつ、安定した運用を実現可能です。本記事では、プロシージャの作成からスケジュール実行までを実務レベルで解説します。
SAP HANAのプロシージャとは
SAP HANAのプロシージャ(ストアドプロシージャ)は、データベース内でSQLスクリプトを使用して、一連の処理を登録・実行するプログラムです。
高速なインメモリ処理により、大量データのバッチ処理や複雑な計算を、アプリケーション側ではなくDB側で直接完結させることができます。 これにより、アプリケーションへの影響なく、DB側で定型業務(監査ログの取得やデータのクレンジングなど)の責務を分離できます。
また、プロシージャはSQLScriptで記述され、IF文やループ処理にも対応しているため、複雑なバッチ処理やデータ抽出のカスタマイズを柔軟に行えることも大きな利点です。
実践:プロシージャの作成
まずは、処理の対象となるテーブルの準備と、実際のプロシージャ作成の流れを見ていきましょう。
① テスト用テーブルの準備
例として、ソーステーブルからターゲットテーブルへデータをコピーする環境を構築します。
-- 1. 参照用テーブル
CREATE COLUMN TABLE "TEST_SOURCE_TABLE" (
"ID" INTEGER PRIMARY KEY,
"DATA" NVARCHAR(50),
"CREATED_AT" LONGDATE DEFAULT CURRENT_TIMESTAMP
);
-- 2. ターゲットテーブル
CREATE COLUMN TABLE "TEST_TARGET_TABLE" (
"ID" INTEGER,
"DATA" NVARCHAR(50),
"COPIED_AT" LONGDATE DEFAULT CURRENT_TIMESTAMP
);
-- テストデータの投入
INSERT INTO "TEST_SOURCE_TABLE" ("ID", "DATA") VALUES (1, 'Sample Data A');
INSERT INTO "TEST_SOURCE_TABLE" ("ID", "DATA") VALUES (2, 'Sample Data B');
② プロシージャの定義
次に、ターゲットテーブルに対してデータ登録を実施するロジックを記述します。
CREATE PROCEDURE "TEST_PROCEDURE"()
LANGUAGE SQLSCRIPT
AS
BEGIN
INSERT INTO "TEST_TARGET_TABLE" ("ID", "DATA")
SELECT "ID", "DATA"
FROM "TEST_SOURCE_TABLE";
END;
作成したプロシージャは、以下のように HANA Database Explorer で確認可能です。
また、**「Create Statement」**タブから作成時のSQLを確認できるため、プロシージャを編集・修正したい時などに便利な機能です。

作成のポイント
- SQLScriptで記述し、
BEGIN〜ENDで囲みます。 - IF文やループ処理も記述できるため、複雑なバッチ処理にも対応可能です。
- 作成後は
CALL "TEST_PROCEDURE"();で手動実行し、正しく動作するか確認します。
スケジュール実行(CREATE SCHEDULER JOB)
作成したプロシージャを定期的に動かすには、スケジューラ機能を使用します。
ジョブの設定例
以下の設定では、特定のタイミングを指定してジョブを有効化します。
CREATE SCHEDULER JOB "TEST_SCHEDULER"
CRON '* * * * 7 20 00' -- (例: 毎日16:20実行)
ENABLE
PROCEDURE "TEST_PROCEDURE";
CRONの書き方
SAP HANA CloudのスケジューラにおけるCRON文字列は、以下の7つのフィールドをこの順序で指定します。一般的なCRON(分から始まる5フィールド)や他のDB(秒から始まる形式)とは順序が異なるため、注意が必要です。
| 順序 | フィールド | 指定可能な値 (Range) | 特記事項 |
| 1 | 年 (Year) | 1900 – 2099 | 特定の年、または毎年を指定 |
| 2 | 月 (Month) | 1 – 12 または JAN – DEC | |
| 3 | 日 (Day of Month) | 1 – 31 | |
| 4 | 曜日 (Day of Week) | 1 – 7 または SUN – SAT | 1 = 日曜日、7 = 土曜日 |
| 5 | 時 (Hour) | 0 – 23 | |
| 6 | 分 (Minute) | 0 – 59 | |
| 7 | 秒 (Second) | 0 – 59 |
重要な記号のルール:
- * (Asterisk) : そのフィールドのすべての値を対象とします、全フィールドに設定可能です。(例:毎年、毎月など)。
- ? (Question Mark) : 「日」または「曜日」のいずれかを指定した際、もう一方の値を無視するために使用します(両方に値を指定することはできません)。
- 数値の指定 : 曜日は 1が日曜日 である点に注意してください。
- タイムゾーン:HANADB内部のUTC基準
設定例:2026年の間、毎日 15:25:00 に実行:'2026 * * * 15 25 00'
参考文献:CREATE SCHEDULER JOB Statement (Data Definition)
ジョブの状態確認と監視
設定したジョブが正常に動作しているかは、システムビューでリアルタイムに確認できます。
SELECT * FROM M_SCHEDULER_JOBS;同様に、HANA Database Explorer 上で直接状態を確認することも可能です。
また、**「History」**タブを開くことで、これまでの実行結果(履歴)を一覧で確認できます。

確認できる主な内容:
- ステータス(RUNNING / SCHEDULED / ERROR)
- 実行履歴(最終実行時間やエラーメッセージなど)
- エラー時は
STATUSがERRORになるため、監視の起点として活用できます。
注意点
自動化を成功させるために、以下のポイントを必ず確認してください。
- ENABLEの指定:スケジュール実行を止めたい場合、明示的に DISABLE を指定する必要があります。
- 依存関係:プロシージャを削除すると、紐づくジョブも自動的に無効化されます。
- 負荷への考慮:大量データの集計などはDB負荷が高まるため、業務時間外の設定やパフォーマンス調査が必要になる可能性があります。
まとめ
SAP HANAのプロシージャとスケジューラを組み合わせることで、監査ログの取得やデータクレンジングなどの定型業務を安全に自動化でき、運用効率の向上が期待できます。
前述の通り、プロシージャによる定期実行は大量データや複雑な計算処理に対して高いパフォーマンスを発揮します。まずは本記事で解説した基本的な定期実行処理の検証から始め、その効果を確認していくことを推奨します。
今回の検証成果は、実際のプロジェクトにおける「リリース初期のログを定期蓄積したい」という運用メンバーの具体的な課題解決にも繋がりました。
本記事が検討の一助となれば幸いです。
最後までお読みいただきありがとうございました。
投稿者プロフィール

-
2021年入社、BS事業部所属。
現在はSAP BTP上でのSide-by-Side拡張開発に携わっており、SAP Fioriを活用した開発案件を担当しています。
社内のアプリケーションの開発基盤標準化や、社外活動の参加にも積極的に関わり、ナレッジの共有を通じてチーム全体のスキル向上にも貢献したいと考えています。


