ジャーナルファイルの内容を管理ポータル以外で参照することはできますか?

ジャーナルファイルのサイズが大きすぎて、管理ポータルで検索やフィルタリング等できない場合、以下の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") // 時間:yyyy-mm-dd hh:mm:ss
    set type=rs.Get("TypeName")  // タイプ:SET、KILL、xxTrans など
    set gref=rs.Get("GlobalReference") // グローバル参照
    set gval=rs.Get("NewValue")  // 更新後の値
    /* if gref["ABC" { */
    set line=time_" ["_type_"] "_gref
    if type="SET" { set line=line_"="_gval }
    do file.WriteLine(line)
    /* } */
  }
  do file.Close()


詳細は下記クラスリファレンスをご覧ください。
クラスリファレンス(%SYS.Journal.Record:List)


該当する製品: Caché, Ensemble, HealthShare/Caché Based, IRIS Data Platform, HealthShare/IRIS Based, IRIS for Health
関連トピック: ジャーナルレコードのタイプの意味を教えてください
添付ファイル:

アンケートにご協力をお願いします
このトピックは参考になりましたか?
このトピックに関するお問い合わせ

FAQトップに戻る