これは InterSystems FAQ サイトの記事です。
ジャーナルファイルのサイズが大きすぎて、管理ポータルで検索やフィルタリング等できない場合、以下の2つの方法で参照することができます。
① ^JRNDUMP ユーティリティを使用する方法
② プログラムで参照する方法
============================================================
① ^JRNDUMP ユーティリティを使用する方法 例えば、グローバル参照 ^ABC を含むジャーナルファイルのすべてのレコードを選択する場合は、以下のようになります。
※以下、すべてのコマンドは %SYS ネームスペースで実行してください。
DO SELECT^JRNDUMP("C:\MyCache\mgr\journal\YYYYMMDD.001","","","^ABC",1)
グローバル参照 ^ABC に完全に一致するレコードのみを選択する場合は、以下のようになります。
DO SELECT^JRNDUMP("C:\MyCache\mgr\journal\YYYYMMDD.001","","","^ABC",0)
グローバル ^ABC に対するローカルの Set 処理のレコードのみを選択する場合は、以下のようになります。
DO SELECT^JRNDUMP("C:\MyCache\mgr\journal\YYYYMMDD.001","","","^ABC","",6)
グローバル ^ABC に対するローカルおよびリモートの Set 処理のレコードのみを選択する場合は、以下のようになります。
DO SELECT^JRNDUMP("C:\MyCache\mgr\journal\YYYYMMDD.001","","","^ABC","","s")
詳細は下記ドキュメントページをご覧ください。
^JRNDUMP を使用したジャーナル・レコードの表示
============================================================
② プログラムで参照する方法 %SYS.Journal.Record クラスを使用して、任意のジャーナルファイルのレコード内容を取得することができます。
set jrn="C:\intersystems\cache\mgr\journal\20160101.003"
set log="C:\temp\journal.log"
set file=##class(%File).%New(log)
do file.Open("WSN")
set rs=##class(%ResultSet).%New("%SYS.Journal.Record:List")
do rs.Execute(jrn)
while rs.Next() {
set time=rs.Get("TimeStamp")
set type=rs.Get("TypeName")
set gref=rs.Get("GlobalReference")
set gval=rs.Get("NewValue")
set line=time_" ["_type_"] "_gref
if type="SET" { set line=line_"="_gval }
do file.WriteLine(line)
}
do file.Close()
※このサンプルコードは、表示対象のデータが一般的なテキストデータのみで構成されていることを前提に記述されています。
※データにコントロールコード等非表示のデータが含まれる場合にはファイルに正確に出力されない場合があります。
詳細は下記クラスリファレンスをご覧ください。
クラスリファレンス(%SYS.Journal.Record:List)