IBM Cloud PowerVSのIBM i にデータベースファイルを転送したい

オンプレだと悩む暇なくできてしまうのですがクラウドだと色々お作法が必要でした、というお話です。

掲題、オンプレだとSAVFをローカルに用意する→FTP転送する。以上。なのですが、、
今回は（も）パブリックN/WからPowerVSに接続する想定のため、SSH接続前提→SFTP転送になるのですが、SFTPではSAVFを転送できない。（SFTPはIFSかPFのみOK,PCローカルにPFはつくれない…）、となります。

ない頭を絞って考えたもっともラクチンな方法が以下です。
手順1.ターゲットのPowerVS上にDb2テーブルを作成する　（CRTPTF OR SQL DDL）
    今回はSEUで別サーバーのDDSをコピーしました。DDL生成して流した方がスマートだったなと後で気づきました‥
手順2.別サーバーのDb2からアップロード用のxlsxファイルを用意する。＊この操作もACSのデータ転送機能を利用しました。アップロード時に必要な定義ファイル(.fdfx)を生成するためです。
手順3.SSH経由でACSデータ転送を起動、xlsxファイルをIBM i にアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/d1bf9123-0d79-179a-2f02-08bda065de4c.png)

以下の手順は、前提としてACS導入済み、Windows（ほか）にsshクライアントが導入済み、sshでIBM iに接続済み、の前提です。この辺の手順は以下に記載しています。
■IBM CloudのIBM i にACSでssh接続する手順
https://qiita.com/gomAnomalocaris/items/9eb2ced60c9830704b65

手順1.Db2 for i テーブルを作成する

今回はレガシーな5250からSEUでテーブル定義を記述し、CRTPFコマンドでテーブルを作成しました。実際は別システムの5250開いてコピペしました‥技術者の風上にも置けません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/978f5476-5c40-1410-67f3-95f06d8c1905.png)

・・・ですが、今どきの技術者は元システムでテーブルをACSその他SQLインターフェースから開いて元テーブルのDDLを生成するのがいいと思います。
下記例ではACSからスキーマを実行し、該当のテーブルを右クリックしてSQLの生成 を選択し、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/52178e9e-5c7b-7990-0e6b-f6803d75a9ce.png)

内容を確認します。通常変更するパラメーター等はありません。利用目的によってはオプション欄でANSI形式でDDLを生成する等設定ができます。（デフォルトはDb2形式で生成）。また、今回は生成したDDLをウィンドウに表示しますが、ファイル保管も可能です。ウィンドウ右下の生成ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/c0a45ee1-b1c8-fdd4-cb74-2afa17f8d136.png)

生成中のメッセージが一瞬出て…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/c39c8745-d1a6-1f7e-6c13-2916a303e2f3.png)

DDLが生成されました。これをターゲットのPowerVSのSQLスクリプト実行画面に張り付けて実行すればテーブルを作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/42258950-b317-c6ee-50eb-daa263f44cb0.png)

手順2.ACSでXLSXファイルをダウンロード＆アップロードする

まず今回オンプレの別システムから得意先マスターのデータをXLSXでダウンロードします。
ACSのエミュレーター画面等から　IBM i からのデータ転送　を開いて、参考に設定画面を添付します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/fd09f9bd-9d99-2c0c-0cc3-df57edb5f035.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/2f89b2c9-a1a3-62f4-2fe5-3a5123c2517f.png)

上記を設定し、転送の開始　ボタンを押すとXLSXファイルがPCローカルに生成されます。
ここで生成したXLSXとクライアントファイル記述 FDFXを使用してPowerVSにデータ転送します。

IBM i へのデータ転送 を開いて以下のようなパラメーターを入力します。
注意点としてSSH経由でデータ転送するので、宛先ホスト名がPowerVS IBM iではなくlocalhostになる点です。もし接続先システムに未登録の場合は、ACSシステム構成画面からlocalhostを追加してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/bfd29199-f533-5820-a7f5-6fff47226d2f.png)

用意が完了したらACSでPowerVSにアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/df52cf16-3b7f-821f-62dd-d287d983be58.png)
ファイルの詳細 画面でクライアント・ファイル記述を使用するにチェックし、ダウンロード時作成したfdfxファイル名を指定します。今回のケースでは　メンバー置換のみ、の設定でアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/25730858-920f-6852-0dcc-18e58f8da0aa.png)

転送の開始　ボタンを押すとアップロードが実行されます。
今回途中で転送が止まってしまいました…あれれ？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/36a7098e-d08e-e281-a7c8-68b08b706075.png)
とおもったらテーブル初期値が最大13,000レコードでした。この辺は変わってないですね～。レコード件数の拡張をOK返すと、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/e21e20aa-ca2d-7c4c-d289-0efaaa5eb285.png)
無事アップロードが完了しました。

お疲れ様でした～♪
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/6cb4d1fc-44a5-d929-6681-337b55bb8759.png)

■2923/10/19追記■
・・・ところが実はsftpでもSAVFが転送可能である、との情報を今更見つけました…
こちらです。筆者様に感謝。
WinSCPを使って”IBM i”のライブラリーへ「*SAVF」を転送
https://ushiday.hatenablog.jp/entry/20091111/1257909397

ポイントは
・PCローカルの転送元SAVFの拡張子を .FILE　にする（例 LIB_SAVF.FILE）
以上です。
あとは、sftpセッション中で
put C:\LIB_SAVF.FILE 
等とすればOKでした。