DB2システム・テーブル - バッチ・ランタイム・ログはメインフレームにありますか? DB2 for iSeriesには、実行時にステータス(アクティブ/完了)、最も重要なことにV_SQL_STATEMENT_TEXT
- 最後のSQL実行のステートメントを含むジョブ情報を返すテーブル関数QSYS2.GET_JOB_INFO()
があります。最後に実行されたSQLステートメントを取得するDB2システム・ランタイム・テーブル
シナリオ: 実行時に最後に実行されたSQL文をCobol Batch Jobで取得したいとします。これの主目的は、ジョブの実行中にCOMMITまたはROLLBACKが発行されたかどうかを判別することです。その目的は、小さなプログラムを作成し、それを「コントローラ」と呼ぶこと、コミットまたはコミットの間隔が発行されたときにDB2を監視すること、またはロールバックすることです。より具体的には、この「コントローラ」はミニOSとして動作し、メインプログラムを起動する能力を有する。
たとえば、メインプログラムがROLLBACKを発行した場合、「コントローラプログラム」は特定のビジネスロジックを発行し、更新を制御できます。更新は、T1タイプとT2タイプの両方のDB2接続で実行できます。これにより、更新はバッチクライアント側またはEXCIで実行されているJava側で実行されます(EXCIはRRSリカバリを使用します)。
....大丈夫、_why_これは欲しいですか?どのようなビジネス上の問題を解決しようとしていますか?あなたがしようとしている「監視と決定」は、厳しい競争条件の対象となることに注意してください。'ROLLBACK'または' COMMIT'のどちらかが発行された後に何か他のことをすると、意思決定を試みると大規模な頭痛を引き起こす可能性があります。これらの両方の文はほぼ常に即座に成功しますが、余分な行を追加するなどの作業を追加したい場合は、完全にウィンドウの外に出ます。特に、エラーのために自動呼び出しされる可能性がある 'ROLLBACK'の場合... –
@ Clockwork-Muse私は全く同意するが、このアプローチは頭痛の原因となり易い。簡単にするために、メインプログラムがexec SQLコミットを発行した場合、コントローラープログラムもRRSコミット(SRRCMIT)を発行する必要があります。メインプログラムがSQLロールバックを発行した場合、コントローラーはRRSロールバックSRRBACK)。既存のメインプログラムを更新することはできないため、このアプローチを選択しました。免責事項:このアプローチはまだ設計中です。異なるアプローチをテストしており、後で最も効果的なアプローチを選択します。ありがとう! – Cee
私はこの機能を一度も使ったことがないので(すべてに話すことはできません)、このアプローチが破滅していると感じています。あなたの "Main"プログラムが何らかの理由で停止している場合、あなたが望むように何もコミットされません。私が読んでいる小さなものから、あなたは 'COMMIT'か' SRRCMIT'のどちらかを呼びたいと思っているようですが、その両方を使うのではなく、コマンドを発行したときの効果がわかりません。いくつかの余分な処理 - しかしどこ?)。あなたが望むものは監視プログラムではなく、何らかの解釈/ラッパー・レイヤーだと思えますが、私はあなたがCOMMITを置き換えることができるかどうか疑問に思っています... –