古いスプール・ファイルを一括削除したい
Question
当社で利用しているIBM i (AS/400)は、リプレイス前のスプールなども引き継いでいる為、システム上に多くのスプールが残っている状況です。
昔は古いスプールも必要だったため移行していましたが、現在はPDFにしてデータ保管する運用や、OSの機能としてスプール・ファイルの保管もできるようになっている為、古いスプールはシステム上から削除しようと考えています。
例えば、半年以上前に作成したスプールを対象に削除するようなことはできますでしょうか。
Answer
コマンドではありませんが、以下のプロシージャを使用することで実現可能です。
SYSTOOLS.DELETE_OLD_SPOOLED_FILES
https://www.ibm.com/docs/en/i/7.5?topic=services-delete-old-spooled-files-procedure
※ V7R3以上で使用できるプロシージャです。
以下のオプションを使用することで細かな指定が可能になります。
- DELETE_OLDER_THAN
スプール・ファイルの削除の開始点を定義するタイム・スタンプ値です。このタイム・スタンプより古いスプールは削除の対象となります。デフォルト値は現在のタイプスタンプ -3か月です。
- P_OUTPUT_QUEUE_LIBRARY_NAME
対象の出力待ち行列が存在するライブラリー名を指定します。デフォルトは *ALL です。
- P_OUTPUT_QUEUE_NAME
対象の出力待ち行列の名前を指定します。デフォルトは *ALL です。
- P_USER_NAME
スプールを所有するユーザーの名前を指定します。デフォルトは *ALL です。
- PREVIEW
対象のスプールを削除するのか、結果セットとして戻すかを指定します。
NO...スプールは削除されます
YES...スプールの結果セット・リストが返されます。スプールは削除されません。
デフォルトは NO です。
ライセンス「DB2 Query Manager and SQL Development Kit(ST1)」が入っていればSTRSQLより実行も可能、RUNSQLに組み込むこともできます。
以下の例では、QUSRSYS/QPRINT 内で、180日(約6か月)より古いスプールを削除する指定をしています。
CALL SYSTOOLS.DELETE_OLD_SPOOLED_FILES(
DELETE_OLDER_THAN => CURRENT DATE - 180 DAYS,
P_OUTPUT_QUEUE_LIBRARY_NAME => 'QUSRSYS',
P_OUTPUT_QUEUE_NAME => 'QPRINT',
PREVIEW => 'NO');
スプール・ファイルが削除されたことがわかるかと思います。
CLプログラムに組み込む場合のサンプルは以下です。(簡単なプログラムです)
PGM
RUNSQL SQL('CALL +
SYSTOOLS.DELETE_OLD_SPOOLED_FILES(DELETE_OL+
DER_THAN => CURRENT DATE - 180 +
DAYS, +
P_OUTPUT_QUEUE_LIBRARY_NAME => +
''QUSRSYS'', -
P_OUTPUT_QUEUE_NAME => +
''QPRINT'', -
PREVIEW => ''NO'')') COMMIT(*NONE)
SNDPGMMSG +
MSG('QUSRSYS/QPRINT にある 180 日より古い +
スプールを削除しました ')
ENDPGM
なお、スプール・ファイルの削除テストをされる際は、事前にスプール・ファイルのバックアップをご取得ください。誤った指定をしてしまうと、最悪システム上のすべてのスプール・ファイルを削除してしまう場合があります。
昔はCLROUTQで対象の出力待ち行列にあるスプールを全削除するか、スプールに満了日をセットして削除する、あるいはプログラムを組んで対応するしかなかったかと思います。
現在は専用のプロシージャが用意されていて、とても便利な時代になったように思います。
by かんぴょう木綿さん