【IRIS/Cache】マクロを使ったジャーナル操作

本記事は、マクロによるジャーナルファイルのリストア方法についての解説になります。

※この記事は下記の方向けになります。
  • マクロを利用してジャーナルを操作したい方

はじめに

ひょんな事から、ジャーナル操作用のマクロを発見したので、紹介致します。

ジャーナル用インクルードファイルの構成はこんな感じ

%syJrninc.inc
 ├ include %syJrnRecord.inc
 └ include %sySystem.inc

正直、一生使うことも無いだろうな・・・と思います。
 → $zu(78)系列がジャーナル関連らしい・・・と認識はした。

とは言え、どこかで何かの役に立つかもしれないので、いくつかのマクロをご紹介します。

では、いってみよう!

マクロご紹介

ジャーナルの停止

%SYSネームスペースで動作可能

new $namespace
s $namespace = "%SYS"
w !,$$$JRNSTOP

ジャーナルファイルの切り替え

引数には、切り替え理由のコードを渡す。

ClassMethod test()
{
	w !,$$$JRNSWITCH(1)
}

カレントジャーナルファイルの取得

最新のオフセット値(アドレス)とジャーナルファイルが取得できます。

ClassMethod test()
{
	w !,$$$JRNCUR // 43606832,d:\iris\mgr\journal\test20250421.002
	w !,$$$JRNCURNAM // d:\iris\mgr\journal\test20250421.002
}

オフセット値(アドレス)とジャーナルファイル名を取得

IMJに格納されているファイル名と最後のチェックポイントにおけるアドレスを返す。
そのため、$$$JRNCURとは異なる値が返る

ClassMethod test()
{
	w !,$$$JRNCUR    // > 7450832,d:\iris\mgr\journal\test20250422.002
	w !!,$$$JRNINDEX // > 7437516,d:\iris\mgr\journal\test20250422.002,197,197,7385548,23260,7434892,197

	// ディスクに書き込まれた minxfilecnt 値 (WIJ)
	w !!,$$$TRANSFILECNTONDISK // > 197
}

ジャーナルのステータスを取得する

ジャーナルのステータスを取得します。

ClassMethod test()
{
	w !,$$$JRNSTATUS,!     // neabled^paused^suspended^faiil^frozen^type
	
	w !,$$$ISJRNENABLED    // 1:enabled
	w !,$$$ISJRNPAUSED     // 1:paused
	w !,$$$ISJRNSUSPENDED  // 1:suspended
	w !,$$$ISJRNIOERR      // 1:fail
	w !,$$$ISJRNFROZEN     // 1:frozen
	
	w !,$$$ISJRNTROUBLED
}

ジャーナルファイルの有効性を確認する

ClassMethod test()
{
	s path="D:\IRIS\mgr\journal"
	, file="test20250421.002"
	w !!,$$$JRNCHECK(path_"\"_file) // 有効なファイルの場合「1」が返る
}

ジャーナルファイルの削除

ClassMethod test()
{
	s path="D:\IRIS\mgr\journal"
	, file="test20250420.002"
	w !!,$$$DELJRNFILE(path_"\"_file)
}

諸々の情報取得

ClassMethod test()
{
	s file = "D:\IRIS\mgr\journal\test20250425.001"
	w !,$$$JRNMAXSIZE(file) // ジャーナルファイルの最大サイズ取得
	w !,$$$GetJrnDataSize(file) // ジャーナルファイルのサイズ取得?データサイズ?
	w !,$$$GetJrnFileSize(file)  // ジャーナルファイルのサイズ取得

	w !,$$$JRNFNEXT(file) // 次のジャーナルファイル名取得
	w !,$$$JRNFPREV(file) // 前のジャーナルファイル名取得

	w !,$$$JRNSWREASON(file) // 切り替え理由の取得

	w !,$$$GETJRNPREFIX // ジャーナルファイルのプリフィックスを取得
	w !,$$$SETJRNPREFIX("hoge") // プリフィックスの設定
}

マーカーの作成

このマクロは、もしかしたらワンチャン使うかも!?

ClassMethod test()
{
	w !,$$$SETJRNMARKLOC(4649, "よろしく!")
}

おわりに

今回ご紹介するマクロは以上になります。

このインクルードファイルには、他にも色々とマクロが設定されていますが、使い方が分からないマクロが多いです。

もっと時間があれば、ゆっくり調べる事も吝かではないのですが・・・

とは言え、これらのマクロは非推奨です。
んー、使うことが無いだろうと思うと時間の無駄を感じますね。

いつか手すきの時が出来たら、じっくり調べるとします。