メニューボタン
サポートチーム便り2023.07.26

古いスプール・ファイルを一括削除したい

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 かんぴょう木綿さん

あわせて読みたい記事

PAGE TOP