こちらのブログではABAP RFC Streaming Read 機能を利用し、SAP Data Warehouse CloudにS/4HANA、ECC、BWなどのABAPテーブルを連携する方法についてご案内します。
設定の流れ
1. ABAPシステム側での設定
1-a RFC宛先の作成
1-b SAP Gatewayのセキュリティ設定
2. DWC側での設定
概要
- SAP ABAPシステムのABAPテーブルから大量データをSAP Data Warehouse Cloudにロードする際、メモリ課題を回避するための設定
- 接続タイプ:ABAP、SAP ECC、SAP S/4HANA、SAP BWで利用可能
- 多くのシナリオで利用可能(少量データの取得、大量データの取得、長時間実行クエリの実行、複数同時実行、など)
注意点
- 小さなクエリではパフォーマンスが劣化する可能性あり
- ABAPシステム側での設定が必要
参考情報
- SAPヘルプ “Using RFC Streaming With Tables”
- SAPヘルプ “SAP S/4HANA On-Premise”
- SAPヘルプ “Prerequisites for ABAP RFC Streaming”
事前準備
各SAPシステムのユーザーには、権限が必要です。権限オブジェクトをトランザクションコード “PFCG”で設定する必要があります。管理しやすいように新規にロールを作成するのをお勧めします。
権限オブジェクトの一覧が、ヘルプに記載されてます。各権限オブジェクトのリンクに飛ぶと、どのように設定するかが記載されているので、それに沿って記載します。できあがったロールをデータ連携で使うユーザーに割り当てます。
それでは始めましょう!
1. ABAPシステム側での設定
1-a. RFC宛先の作成
下記の手順でABAPソースシステム側でRFC宛先を作成します。このRFC宛先で、DP Agentをソースシステムのサーバープログラムとして登録します。
①トランザクションコード “SM59″でTCP/IP接続を作成
②”RFC Destination”で任意の名前、Descriptionで説明を記入
③“Activation Type”で”Registered Server Program”を選択
④“Program ID”に”IM_HANA_ABAPADAPTER_*”を入力
⑤保存
1-b. SAP Gateway のセキュリティ設定 ~SAP_BASIS=Release:740、SPレベル:0016以上の場合~
SAP Gatewayにセキュリティ設定を行います。
設定例
- Gatewayにアクセスするためのネットワーク設定をする(名前解決、ポート開放、など)
- Gatewayにアクセス可能なホストをAccess Control List(ACL)に登録する
- reginfoファイルで外部プログラムを登録するための権限を管理する
※「Maintain ACL Files」を使えるバージョンは、SAP_BASIS=Release:740、SPレベル:0016以上になります。こちらに該当しない場合、後述の ”1-b. SAP Gateway のセキュリティ設定 ~SAP_BASIS=Release:740、SPレベル:0016未満の場合~“を参照ください。
手順(Gatewayにアクセス可能なホストをACLに登録する場合)
参考ノート:SAP Note 1806694、1850230
①トランザクションコード “SMGW”より、Goto→Expert Functions→External Security→Maintain ACL Filesを選択
②ACLファイルにエントリを追加して保存
<permit> <ip-address[/mask]> [tracelevel] [# comment]
1-b. SAP Gateway のセキュリティ設定 ~SAP_BASIS=Release:740、SPレベル:0016未満の場合~
SAP_BASIS=Release:740、SPレベル:0016未満の場合、Maintain ACL Filesの機能をサポートしておりません。そのため、直接secinfoファイルを編集する必要があります。 (詳細)
表記内容: P TP=*, USER=*, HOST=<DPAgent hostname>
ファイル名は、以下になります。(詳細)
■Linuxの場合
gw/sec_info = $(DIR_DATA)/secinfo
■Windowsの場合
gw/sec_info = $(DIR_DATA)/secinfo.DAT
*DIR_DATAは、インストールされたディレクトリです。
編集後、SAP GUIから以下のオペレーションを実行します。
ジャンプ > エキスパート機能 > 外部セキュリティ > 再読込
2. DWC側での設定
DWCへログインして以下のように設定を行います。
①DWCの左のナビゲーションから接続を選択します。
②対象スペースを選択し、DPAgentで作成したABAPシステムとの接続をチェックし、編集ボタンを押します。
③機能で”ストリーミング読み込み”を”オン”にし、以下の情報を登録します
- Gateway Host:通常はABAPサーバーと同じ
- Gateway Port:デフォルトは33<SID>
- RFC Destination:1-aで作成したRFC宛先の名前
以上で手順は終了です。
確認方法&調査方法
・トランザクションコード “SM37″で、ジョブ「IM_HANA_ABAPADAPTER_*」の実行履歴を確認します。
- プログラム「/SAPDS/RPT_STREAM_READ_TABLE」が実行されていればStreaming Readが実行されていると判断できます
・スナップショット作成などの連携中にT-CD:SMGWでGatewayの確認を行うと、DP AgentからABAPシステムにアクセスがあることが確認できます
- プロトコル:登録済通信
- リモートTP名:IM_HANA_ABAPADAPTER_*
・想定通り動作しない場合、下記手順でDP Agentでトレースを取得し、トレースファイルのメッセージより調査を行います。
①DP Agentの「dpagentconfig.ini」に「framework.log.level=ALL」をセットする(フレームワークとレースレベルをALLとする)
②リモートソースにて、RFCトレースをONとする(ABAPアダプターのみ)
③DP Agentを再起動する
④DWCで処理を実行する
⑤数分間処理を実行後、DP Agentのrootディレクトリにあるdpagent framework traceと
dev_jco.rfcファイルを確認する
⑥上記#1,2の設定を元に戻し、DP Agentを再起動する
・トランザクションコード “SMGW”での確認例
スナップショット作成などの連携中にSMGWでGatewayの確認を行うとDP AgentからABAPシステムにアクセスがあることが確認できます。
・トランザクションコード “SM37″での確認例
SM37で、ジョブ「IM_HANA_ABAPADAPTER_*」の実行履歴を見て、ここでプログラムが実行されていることを確認できます。
補足: CDCバッチサイズの調整
スペースからの接続の設定情報により、CDCバッチサイズはデフォルトの1MBになってます。値を変更することで時間短縮になりますが、ECCやネットワークの負荷によるため、バランスを取る必要があります。
パラメータの意味は、こちらのページに記載があります。DWCの場合、パラメータが制限されているので必要な箇所だけご参照ください。
設定エラー時のトレース取得方法
トレースの取得は下記手順で行います。
①DP Agentのiniファイルでトレースパラメータのレベルを変更
より詳細に取得するために、DP Agentをインストールしたサーバにdpagentconfig.iniがあります。この中で設定されているパラメータでframework.log.level=ALLを設定します。デフォルトはINFOです。
②DWC 側でRFCトレースをOn
”DWC 側の設定定義作成“のところで一番下にいくと”拡張プロパティを表示“があります。これをクリックすると以下の画面が表示されます。ここでRFCトレースをOnにします。
③処理実行後の情報
処理実行後DP Agentのサーバで以下のファイルにトレース情報が書き込まれます。
- dataprovagent/log/framwork.trc
- dataprovagent/dev_jco_rfc.trc
エラー時のTips
①RfcException: Connect to SAP gateway failed のエラー
RFCトレースをONにして、dev_jco_rfc.trcを確認時に以下メッセージがあった場合の対処方法
SAP Gatewayサーバでないホストにログインしようとして失敗しています。XXXXXXXを確認してDWC側設定のGateway Hostで正しいホスト名に修正してください。通常、アプリケーションサーバと同一です。他に間違ったケースとしては、SAP routerのサーバにしている可能性があります。
②RfcIoException: CPIC-CALL: SAP_CMACCPTP3 on convId のエラー
・RFCトレースをONにして、dev_jco_rfc.trcを確認し、以下メッセージがあった場合の対処方法
DPAgentのサーバとGatewayのサーバでホスト名前解決(/etc/hostsにお互いのホスト名を追加)する必要があります。また、FWの設定がある場合は、ポートを開ける必要があります。また、/etc/servicesに以下が設定されているか確認ください。
- sapgw00 3300/tcp
・RFCトレースをONにして、dev_jco_rfc.trcを確認し、以下メッセージがあった場合の対処方法
SAP Note #1806694, #1850230を参照してください。
構文
P TP=* HOST=<プログラム ID マッピングに基づくサーバ> CANCEL=* ACCESS=*
※<プログラム ID マッピングに基づくサーバ> は、DP Agentのサーバを指定します。
方法
- SAP Gatewayがあるサーバ (AAAAAAA)のreginfoに、下記内容を追加します。
『P TP=* HOST=BBBBBBB CANCEL=* ACCESS=*』なお、host:AAAAAAAに「reginfo」ファイルがなかった場合、新規で作成します。
③internal error: Cannot get remote source table definitions: Invalid session id, Code: 403, SQL State: HY000 のエラー
設定作業終了後、データビルダーでソースからダイアグラムにドラッグ&ドロップをした際に以下のメッセージが表示された場合の対処方法
ソースシステムのサービスを再起動することで解消されます。
参考情報
■SAP Note #1408081 – reg_info および sec_info の基本設定
■SAP Gateway Security Files secinfo and reginfo
■Gateway Security Files secinfo and reginfo
■Configuring Connections between Gateway and External Programs Securely
以上です。最後までお読みいただきありがとうございました!