IBM i 上のオブジェクトの作成日・最終使用日・使用日数などを調べたい

## おさらい：IBM i 上に存在する操作対象は全てオブジェクト

IBM i OSから操作可能（識別可能）な一つ一つはすべて「オブジェクト」とよばれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/a7b5ac26-b304-4a1d-afb6-0e2b8f8397a5.png)


**ほかのOSとの違いとしては、**
**・データベース（テーブル、ビュー、SQL関連のオブジェクト、ジャーナル（DBログ））等もすべてIBM i OSの管理するオブジェクト**
**・APサーバー（WebSphere Application Server）やHTTPサーバーの全てのファイル類、その他ミドルウェア、ベンダー製S/W類もIBM i OSの管理するオブジェクト**

になる、という点でしょうか。
補足すると[狭義のIFS上のテキストファイル、JPEG他イメージファイルetc.](https://qiita.com/gomAnomalocaris/items/50d98c4dbcde926a1445)もIBM i OSの管理するオブジェクトです。

## IBM i OSのオブジェクト管理はデータベース、ユーザープログラム、その他M/W、IBM i OSオブジェクト、etc.に分け隔てなくすべて共通

***IBM i OS上で操作可能な一つ一つのオブジェクトはすべてOSが共通の操作体系で管理されている、よって以下のようなIBM i OSが管理するする属性・情報はすべてのオブジェクトが等しく保持しています。***
***・オブジェクトの作成日時***
***・オブジェクトの作成ユーザー・プロフィール***
***・オブジェクトの使用日数***
***・オブジェクトのバックアップ・復元情報***

以下が本稿の本題となりますが、IBM i OSのオブジェクトの作成日・最終使用日・使用日数等を調べる方法になります。

## オブジェクトの作成日・変更日・最終使用日・使用日数等は DSPOBJD コマンドで確認できる

DSPOBJD（DiSPlay OBJect Definition）コマンドの使用例はこちら

PF（テーブル）TOKMSPのオブジェクト属性を5250端末上に表示する
```
DSPOBJD OBJ(DEMOLIB/TOKMSP) OBJTYPE(*FILE) OUTPUT(*)
```
上記でOUTPUTパラメーターを*PRINT, *OUTFILEとするとスプール、PF(テーブル）に出力できます。*OUTFILEの場合は以下のように出力先PF名も指定します。
```
DSPOBJD OBJ(DEMOLIB/TOKMSP) OBJTYPE(*FILE) OUTPUT(*OUTFILE) OUTFILE(GOMALIB/OBJINF_1) 
```
OUTFILEのPF名、ライブラリー名は任意です。

くどいですが、DSPOBJDコマンドを使用するとオブジェクトの種類（システムオブジェクトか、データベースオブジェクトか、その他M/Wか、ユーザー作成アプリケーション関連オブジェクトか等）に関係なく基本的には共通の情報を取得できます。

たとえばユーザー作成RPGプログラムの場合は以下のように指定します。
```
DSPOBJD OBJ(DEMOLIB/IPH110) OBJTYPE(*PGM) OUTPUT(*) 
```
OBJTYPEが*PGMと指定するのが上のPF(テーブル)の場合との相違ですね。

※OUTPUTパラメーターのデフォルトは '*' (5250ディスプレイに表示）なので省略できます。

### DSPOBJDコマンドの実行例①　テーブル
実行コマンド例はこちら
```
DSPOBJD OBJ(DEMOLIB/TOKMSP) OBJTYPE(*FILE) 
```
出力例がこちら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/6b0eef22-b412-44e3-92db-2f655d6fc027.png)
5250表示の場合、この画面でOPT欄に 5 または　8　を入力して情報を確認します。以下でいくつか紹介します。

以下の画面ではオブジェクト（例ではDBテーブル）の作成日・作成ユーザー・作成したシステム名（IBM i LPAR毎に固有のシステム名）などが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/695937e3-81e3-4811-a044-8cdbbe8554d6.png)


ページをスクロールすると、以下のような画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/57e03ba1-a674-4cbd-8320-1aa67d1275e5.png)

この画面では、システム・レベルという欄でこのDBテーブル（TOKMSP）がOS/400 V4R5で作成されたことがわかります。実際操作しているIBM i は7.5なので10世代前のバージョンになりますね(^^;。2001年にこのテーブルはCRTPFされ（OS/400 V4R5で）た、作成ユーザーはSAWADA さん、と言う事が分かります。

このシステムは社内のテスト環境で記憶ではAdvanced S20->POWER5->POWER7->POWER8->POWER9->POWER10と5回、OSバージョンとしては、V4R5->V5.x->V6.1->V7.Xがn個の5回以上マイグレーションしているはずです。そしてこの間、このテーブルは再作成やリコンパイルなどは行っておらずV4R5で作成したオブジェクトをバックアップ&レストア、で使い続けています。
※OS/400 V5R4 -> IBM i 6.1 ではマイクロコードが大幅書き換えがありオブジェクト・コンバージョンという最新コードへの最適化が為されているのでバイナリーレベルでは変化がありますが、これはユーザー、アプリケーションには一切影響がありませんでした。

***上のサンプルではソースファイルの属性がブランクです。これはこのテーブルがSQL DDLで作成された為です。Db2 for i は一般的なSQL DDLではなくCRTPFコマンドという方法で作成されることが一般です（でした）。その場合SQL DDLに相当する情報をDDSというソースに記述してCRTPFコマンド（コンパイルコマンド）で指定してPF（テーブル）を作成します。その情報がこの欄に入ります。***

### 実行例②　RPGプログラムの例

RPGプログラムの場合は下記のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/8653a357-d039-4e11-bd5b-40a30d0ed3a1.png)

上記の画面ではコンパイル時に指定したソース名が確認できます。

### （実行例①つづき）最終使用日の確認

更にスクロールすると、下記の画面が表示されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/7d5228fc-58c2-477a-896d-0776edba2d24.png)

ここでは、
最終使用日が2025/03/18とあり当画像作成日の一週間前だったことが分かります。
使用日数カウウント　はこのPF（テーブル）が作成・復元されて以降何日間アクセス（READ or UPDATE）があったかが分かります。上の方の画像で2024/1/4に作成（ここでは現在のシステムにバックアップイメージから復元された日付）されたことが分かるので、これ以降の使用日数は95日だとわかります。

### （つづき）保管情報の確認
更にスクロールすると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/9216b8b2-9109-4890-a7ae-22b59d443b35.png)

上記画像ではこのPFが2025/3/28にバックアップされたことがわかります。
また、現在のシステムに復元された日付は2023/2/20であることも分かります。

あれ？上の方ではこのPFの作成日は2024/1/4だったはず・・ということですので、おそらくはまず2023/2/20にバックアップからこのPFが復元され、その後2024/1/4にSQL DDLから同じ名前で（再）作成されたのではないか、という予想が成り立ちます。


以上、DBテーブルとRPGプログラムで紹介しましたが、他のオブジェクトもすべて同様な情報を保持しており、DSPOBJDコマンドで確認できます。