2019.07.11
 

古いジャーナル・レシーバーを削除したい

Question

弊社ではデータベースジャーナルを設定しています。 更新履歴を確認するために設定をしているのですが、レシーバーの削除を忘れてしまい、しばしばディスク容量が圧迫することがあります。 ジャーナルの設定で、レシーバーを自動削除することは出来るようですが、それだと現在接続されているレシーバーのログまでしか確認が出来ません。

そこで、例えば過去7日分のログを残し、それ以外のレシーバーを自動削除することは可能でしょうか。

Answer

システム管理でのレシーバー削除は、ご認識の通り切り離されたものはすぐに削除されてしまいます。

したがって、やりたいことを実現させるためにはプログラムを作成していただく必要があります。

ジャーナル情報を取得するAPI「QjoRetrieveJournalInformation」もありますがコーディングが難しいため、別の方法を考えてみました。

コマンド「WRKJRNA」を使用して、関連付けされているジャーナル・レシーバーの一覧を出力することが可能です。

  1. WRKJRNA でレシーバー情報を出力する
  2. 例:WRKJRNA JRN(& JLIB/& JJRN) OUTPUT(*PRINT) DETAIL(*RCVDIR)

    これにより、レシーバー一覧が以下のようにスプールに吐き出されます。

    AS画面ショット
  3. 出力したスプールをデータベースファイルに書き出す
  4. 例:CPYSPLF FILE(QPDSPJNA) TOFILE(XXXLIB/XXXPF) SPLNBR(*LAST)

    出力したスプールファイルを物理ファイルにコピーします。 このままコピーをした場合、スプールのヘッダーなどもそのままコピーされますので、どのようにコピーするかの一工夫が必要になります。 以下は、加工してコピーした後のファイルの例です。

    AS画面ショット
  5. レシーバーの接続日を取り出し、その日付が過去1週間(7日)よりも前であればフラグを立てる
  6. 本日日付からマイナス7日をした日付と、レシーバーの接続日を比較し、レシーバーの接続日のほうが古ければ、フラグを立てます。 日付計算になる為RPGで別プログラムを作成するほうが簡単かと思います。

  7. フラグが立ったレシーバーを削除する
  8. 例:DLTJRNRCV JRNRCV(& RCVLIB/& RCVNAM) DLTOPT(*IGNINQMSG *IGNEXITPGM *IGNTGTRCV)

    例では、パラメータ「DLTOPT」に3つのパラメータを指定していますが、この指定ですと、切り離されたレシーバーがどんな状態でも強制的に消してしまいますので、貴社環境に合わせて変更してください。

    *IGNTGTRCV・・・リモートジャーナルが存在する場合、リモートジャーナルに完全にコピーされていることを確認しません。
    *IGNINQMSG・・・照会メッセージを無視します
    *IGNEXITPGM・・・ユーザー出口プログラムを無視します。

これにより、一定期間より古いレシーバーを削除するプログラムが作成できるかと思います。

但し、今回レシーバー情報取得のためにスプールファイルを使用しています。

スプールファイルのレイアウトは、OSのバージョンによって仕様が変わる可能性があります。

バージョンアップをする場合は、バージョンアップ後もプログラムが稼働するかきちんと確認し、ご利用ください。

ページトップ

ボタン