XPA内で発行されたSQL分の取得
皆さんこんにちはアドバンス情報システムの川島です。
この度、あるシステムのリプレースを行う予定ですが下記のような機能を追加することになりそうなので投稿いたしました。
質問:
DBMSはMSSQLを予定しており、埋め込みSQLは極力使用しない方法でおります。 XPAが内部で自動生成したSQL文を取得することは可能でしょうか?
MAGIC単体で行う意ことが理想ですが不可能なら外部のツール(Magic Patrolなど)を使用すれば可能でしょうか?
内容:システム内で行う操作について別途ログを取得する。
1.ログインしたユーザ名と日時
2.画面の起動と終了
3.バッチ系処理の開始、終了と処理件数
4.発行されたSQL分の内容
この処理の中で1.から3.はプログラムで実装が可能ですが 4.のみが可能かどうかが分かりません。
経験等がございましたら教えてください。
お願いいたします。
-
川島様
開発版の標準機能「ログ取得」設定で可能かと思われます。
ただ、”いろいろ”な情報が出てきてしまう可能性もありますので、一度お試しで取得してみては如何でしょう。
開発版の メニュー オプション - 設定 - ロギング
です。
各項目の意味合いは、F1キーでHELPが起動します。
-
補足
1.ログインしたユーザ名と日時
は、関数で取得することが可能です
-
アドバンス情報システムの川島です。
早速のレスありがとうございました。
開発版においてデバック用に取得できることは知っているのですが、通常の運用時にDB更新処理時に
SQL文を取得して操作ログファイル(仮)に更新を行う処理を実現したいと思います。
(先方様の内部統制の関係で必要となりそうです。)
先方様では他の言語で作成されたシステムでは実現しておりXPAでも行いたい、とのことでした。
皆様の中にはこのような機能を実装された方はいますでしょうか?
よろしくお願いいたします。
-
川島さん
タスクが出来上がった暁には、そのタスクから発行されるSQL文は定型化されているはずですので、あらかじめそのSQL文をMagicのログから取得しておき、それをそのままテキスト文としてタスク内に埋め込んで、タスクが実行される都度、随時それを記録していくという方法はいかがでしょうか。
-
変わり得る変数やパラメータの値は、その都度、&でつないでいけばいいと思います。
-
こんにちはPuです。方法論ではなくてすみません(主観ですのでお許し下さい)
>SQL文を取得して操作ログファイル(仮)に更新を行う処理を実現したいと思います。
> (先方様の内部統制の関係で必要となりそうです。)
> 先方様では他の言語で作成されたシステムでは実現しておりXPAでも行いたい、とのことでした。
> 皆様の中にはこのような機能を実装された方はいますでしょうか?
言語系で開発する場合自身でSQL文を生成してexcute(実行)するので
SQL文を取得ではなく生成した内容をLOGに落とす事は良く行います
でもそれは生成したSQL文が正しいかったのかどうかを後で確認する為で
Magicはそれを行わなくても良い(正しいSQL文をMagicが生成してくれるので)のがメリットで
それをわざわざ行うのは...
目的がわかれば実装手段は色々あるかと
抽出条件等をlogに出力すれば目的に叶うとか...
Magicは正しいSQL文を生成してくれますので
でわ~でわ~ -
アドバンス情報システムの川島です。
今回の処理の主旨ですが、障害時の調査のために記録します。
いつ、どの画面で、誰が、何を、どのように
例)
いつ:YYYYMMDD HHMMSS
どの画面で:画面IDや画面名
誰が:部門コード、担当者コード
何を:どのテーブル
どのように:Select、Insert、Updata、Deleteのようにです。例えばある処理で障害が発生したときの調査に利用したりします。
イメージとしてXPAが内部で生成したSQLをログ等で取得してそのままテーブルに格納する。
-
SQL文を毎回リアルタイムで引用するのは難しいと思いますので、デバッグの時点で定型化されたSQL文をあらかじめ用意しておき、パラメータ等の必要部分だけを修正したテキストを保存していくという方法がいいと思いますよ。
-
こんにちはPuです。
障害の起き方によりLOG自体が出力できない場合も考えられます(アベンドした場合など)
上記は考えずSQL自体は正常に実行できたと仮定し
実行した日付と時刻とselectかupdateかinsertか等だけlogに落とし
実際実行されたsqlはSQLserverのlogから取得すれば良いのではないでしょうか
例)2022年7月25日の10時30~10時35分までに実行されたSQL文の取得は
-----------------------------------------------------------------------------------------------
SELECT st.text
,last_execution_time
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
WHERE last_execution_time >= '2022/07/25 10:30:00'
AND last_execution_time <= '2022/07/25 10:35:00'
ORDER BY last_execution_time
--------------------------------------------------------------------------------------------
上記で取得出来ますので調査可能だと思います
でわ~でわ~ -
アドバンス情報システムの川島です。
いろいろとありがとうございます。
プログラムの起動・終了・入力パラメータなどはプログラムで実装できますがこれだけが可能かどうか分か
らなくて。
Pu様
>実行した日付と時刻とselectかupdateかinsertか等だけlogに落とし
実際実行されたsqlはSQLserverのlogから取得すれば良いのではないでしょうかというのは操作ログ内には操作時の内容
・処理日、処理時間、操作内容(selectかupdateかinsert)、処理名 などを記録しておく
具体的な内容は取得用のSQLで取得して確認する。
という意味でしょうか? もしそうなら出来そうな気がします。
-
アドバンス情報システムの川島です。
MagicPatrolとかを使えば可能だったりしますか?
-
こんにちはPuです
>・処理日、処理時間、操作内容(selectかupdateかinsert)、処理名 などを記録しておく
>具体的な内容は取得用のSQLで取得して確認する。
>という意味でしょうか? もしそうなら出来そうな気がします。
はい、そういう意味です。
そもそもシステム開発にはお金も時間もかけた方がお客様にとって良いですが
障害時のログにお金をかけて完璧な物を作るのが果たして良いのかと言う観点で
手段としてこういう方法もありますと言う趣旨で記載させていただきました
毎日使用する物でもないですし、ユーザーの生産性が上がるわけでもないので
でわ~でわ~ -
川島様
MagicPatrol であれば、取得可能だと思います
MSJ殿の資料によれば、実行時の速度にも影響が少ないとのことでした。
-
msjadminです
内容:システム内で行う操作について別途ログを取得する。
1.ログインしたユーザ名と日時
2.画面の起動と終了
3.バッチ系処理の開始、終了と処理件数
4.発行されたSQL分の内容
3のバッチの処理件数の取得はできませんが
MagicPatrolを使うことで、その他の情報は取得することが可能です。
評価版のご提供も可能ですので、担当営業にお問い合わせください。
-
アドバンス情報システムの川島です。
MAGICPATROLの評価版をメーカー様よりお借りしてみました。
これで客先に提案をしてみたいと思います。
ありがとうございました。
サインインしてコメントを残してください。
コメント
15件のコメント