
さいしょに

この記事ではConnectのライブラリとなる[異常終了DBログ]ライブラリについて解説します。
ライブラリ群の全体の話についてはこちらの本記事に記載しています。
ライブラリの特徴
異常終了DBログはConnectの各スクリプトが異常終了となったときに処理の最後にログ情報としてデータベースに書き込みを行うライブラリです。
処理開始DBログで処理のスタートを記録し、正常終了DBログや異常終了DBログで終了情報をデータベースに書き込みます。
処理開始DBログがあってのこちらのライブラリになりますので、まずはこちらの記事をご覧ください。
なぜログをデータベースに書き込むのか
ログはテキストファイルに書き込むのが定番です。いざというときにテキストファイルを開けて情報を読みますよね。
これをデータベースに置き換えると、いろいろデータ分析ができるんです。
- このスクリプトは平均何分くらいかかるのか
- 夜間連携は昔よりも時間がかかっていないか
などなどです。
スクリプトが増えると運用管理が大変になるので、それを楽にするためにもデータベースにログを書くようにしましょう。
DBログに必要なテーブルの作り方はこちらの記事で解説しています。
ライブラリの詳細
引き渡し変数
異常終了DBログライブラリで必要な変数はこちら。

親スクリプトから渡してほしい変数はこちらの4つです。
- 実行スクリプトID
- タイムスタンプ
- 処理開始日時
- エラーメッセージ
です。
親スクリプトからは実行スクリプトIDを持たせればOKです。
親スクリプトからの変数の渡し方はこちら。

親スクリプトからは自身の変数である
を渡します。
エラーメッセージ変数に渡す情報は[${try_catch:error_message}]です。これはTry-Catchコンポーネントの中でエラーになったときのメッセージ情報になります。
同じように[メール送信]ライブラリの異常終了時にも同じエラーメッセージを渡しますね。
処理の流れ

[異常終了DBログ]ライブラリはコンポーネントが5つです。
[処理開始DBログ]ライブラリでデータベースに登録した情報(処理開始情報)を引き継ぎつつ、終了情報をデータベースに書き込みます。
日付取得

まずは現在時刻を取得します。日付のフォーマットは
とすればOKです。
処理開始日時抽出

[ETL_EventLog]テーブルには[処理開始DBログ]でスクリプト実行時の情報が書かれています。この情報から[開始日時]を取得します。
[正常終了DBログ]は処理終了時なので、処理終了時刻は把握できますが、処理開始時刻は把握できないので、テーブルから取得をするのです。
処理を取得するSQLはこちらです。
SELECT
ETL_EventLog.開始日時
FROM
ETL_EventLog
WHERE
ETL_EventLog.イベントID ='${実行スクリプトID}'
変数格納

取得した開始日時をスクリプト変数の[処理開始日時]に格納します。
EventLog_TRN挿入

別記事にも書いていますが、ログテーブルは2つあります。
- ETL_EventLog
- ETL_EventLog_TRN
ETL_EventLogは常に最新情報のみを管理するテーブル(見たらすぐに最新の情報がわかる)
ETL_EventLog_TRNは過去の情報を保持するテーブルです。
ここではまず過去情報を保持するETL_EventLog_TRNテーブルへの書き込みをします。過去情報を保持するテーブルにはINSERTをします。
INSERT INTO ETL_EventLog_TRN (
イベントID,
ステータス,
開始日時,
終了日時,
メッセージ
) VALUES (
'${実行スクリプトID}',
'3',
'${処理開始日時}',
'${タイムスタンプ}',
'${エラーメッセージ}'
)

このようなデータが書き込まれます。
処理開始日時とタイムスタンプ(処理終了日時)、エラーメッセージ、そして異常終了のアナウンスをする訳ですね。
EventLog更新

今度はEvent_Logテーブルに書き込みをします。
ここでは[実行スクリプトID]をキーにして、正常終了の時刻を書き込みます。
UPDATE ETL_EventLog
SET
ステータス = '3',
終了日時 = '${タイムスタンプ}',
メッセージ = '${エラーメッセージ}'
WHERE
イベントID = '${実行スクリプトID}'
このようなデータが書き込まれます。

[異常終了DBログ]ライブラリは以上で終了です。
さいごに
異常終了DBログライブラリについては以上となります。
わずか5コンポーネントの簡単な処理ですが、この処理を組み込むだけでスクリプトの運用管理はとても楽になります。
効果に気付くのは運用してしばらく経ったあとになるかと思いますが、ぜひ初めて構築をするときから取り込んでいただけると嬉しいです。
他のライブラリについてもこちらで解説していますので、ぜひご覧になってください。
https://navi.wingarc.com/product/drsum/21332