Technical Articles
SAP Data Warehouse Cloud: 仮想データアクセス – Oracle編 – Vol1
※ 最新版はこちらのBlog を参照してください。
SAP HANAやSAP HANA Cloud、そして、SAP Data Warehouse Cloudには「仮想データアクセス」という機能があります。
正確には、Smart Data Integration (以下、「SDI」) という機能を使ってリモートシステムのデータソースと連携する機能です。
今回は、仮想データアクセスについて、SAP Data Warehouse Cloud を利用して試していただくことを目的に、その設定手順について解説していきたいと思います。
連携対象のデータベースは、(一番相談が多い) Oracle Database です。
※ 今回のBlog 対象者はこちらのDWCの基本的な操作を経験済みの方になります。
仮想データアクセス
「仮想」という言葉通り、「HANA上にテーブルにアクセスしたら、実はテーブル自体はリモートシステムにあって、自動的にリモートシステムにアクセスしてデータを取ってきている」のが仮想データアクセスです。
各システムにアクセスしてデータをダウンロードし、手元のExcelでデータを突き合わせて・・・のようなことをしなくても、DWCにアクセスすれば分散している各システムのデータに簡単にアクセスできることがメリットです。
ただし、毎回、DWC経由でリモートシステムにアクセスすると性能面やソースシステムに対する予期せぬ負荷が掛かってしまうなど、幾つかの心配事もあると思います。
そのような時は、ある一時点のデータをDWC上にコピーして保持する「スナップショット」の機能や、ソースシステムでデータが変更されたら、すぐにその差分情報をDWCに反映させる「リアルタイムレプリケーション」の機能も併せて検討、利用することが可能です。
さらに、SAP HANA Cloud とDWCではこの「仮想テーブル」と「スナップショット」と「レプリカ」をコマンド1つで切り替えられるのが嬉しいところです。
もう少し概要を理解したい方は、下記の動画もご確認いただけたらと思います。
SAP HANA Cloud – 仮想データアクセス
SAP Data Warehouse Cloud – 仮想データアクセスとデータ連携
システム構成
今回のシステム構成は下記の通りです。
DP Agentについて
注意点はこのSDIのコンポーネントの1つである、「DP Agent (Data Provisioning Agent)」用のサーバーを用意することです。
このDP Agent のソフトウェアのライセンスはDBサーバー側のSAP HANA / SAP HANA Cloud / DWCに含まれるので、インストールは何台でも可能なのですが、DP Agent 用のサーバーを別途、用意することを推奨しています。仮想サーバーでも良いので是非、ご準備ください。
※ ソースシステム(連携対象DBサーバー)上にインストールすることも可能です。ただし、当然ながら、ソースシステムのリソースを使用するので注意が必要です。
DP Agent用のサーバーの最小必要スペックは下記の通りです。
・16GBメモリー、30GBのディスク容量、4 CPU Core
最新の情報、サイジング情報などは PAM(Product Availability Matrix)をご確認ください。
※ 注意 : Oracle Database と連携する場合は、Oracle Database が稼働するOSとDP Agent が稼働するサーバーのOSを一致させる必要があります。
OracleがWindowsで稼働している場合はDP Agent が動作するOSもWindows、Oracle がUNIX/Linuxで稼働している場合は、DP Agentが動作するOSはLinuxになります。
詳しくは前出のPAMをご確認ください。
設定の流れ
設定は少々手間ですが、一つ一つはそれほど難しくない (と思います) ので、落ち着いて進めていきましょう。
Oracle に詳しくない人は、身近な「Oracle 使い」に声を掛けて、助けてもらってください。
1. DP AgentのインストールとOracle用の追加設定
2. Oracleデータベースの設定
3. DWCへのDP Agent の登録・設定
4. スペースでの接続設定
5. 仮想テーブルの作成
6. 仮想テーブルのスナップショット/レプリカの切り替え
DP AgentのインストールとOracle用の追加設定
今回はOracle Database on Windows を前提とした設定例をご紹介します。
まず、DP Agent (Data Provisioning Agent) のソフトウェアをダウンロードしてインストールします。通常はSAPのサポートサイトからソフトウェアをダウンロードしますが、DWCの商用環境のライセンスをお持ちでない方は、DWCのFree Trial を使って、下記の「SAP Development Tools」 のサイトからダウンロードしてください。
SAP Support サイトはこちら
Support Packages & Patches > By Alphabetical Index (A-Z) > H > SAP HANA SDI > SAP HANA SDI <version_number> > Comprised Software Component Versions > HANA DP AGENT <version_number>
SAP Development Tools のサイトはこちら
ソフトウェアをダウンロード後、圧縮ファイルを展開したら、「hdbsetup.exe」を管理者として実行します。
次に DP Agent をインストールするディレクトリを指定します。デフォルトのままでも良いのですが、1台のサーバーに複数のDP Agent をインストールする場合は、それを識別するディレクトリ名を付けることをお薦めします。
今回は「C:\user\sap\dataprovagent01」 とします。
DP Agentのユニークな名前(サービス名で識別可能)を付けます。今回は「SapJpn01」とします。
DP Agent を管理するOSユーザーとパスワードを指定します。OSユーザー名はDomain\User を入力しますが、Domainに参加していない場合は、Hostname\User を指定します。
ポート番号はデフォルトのままで結構です。設定情報を確認後、インストールを開始します。
次にOracleのクライアントライブラリーを「手動で」DP Agent のサーバーにコピーします。
コピー先は「C:\usr\sap\dataprovagent01\lib」になります。
OracleのクライアントソフトウェアをDP Agentが稼働するサーバーにインストール後に指定されたライブラリー( jar ファイル)を手動でコピーしても結構です。
※ 前出のPAM (Product Availability Matrix) を確認し、対象のOracle Database のバージョンと対応するクライアントライブラリーを確認します。
・ojdbc8.jar : C:\app\oracle\product\19.0.0\dbhome_1\jdbc\lib
・xdb6.jar : C:\app\oracle\product\19.0.0\dbhome_1\rdbms\jlib
・xmlparserv2.jar : C:\app\oracle\product\19.0.0\dbhome_1\lib
※ 「C:\app\oracle\product\19.0.0\dbhome_1」はOracleをインストールしたディレクトリ
Oracleのクライアントライブラリーのコピーが終わったら、DP Agent を再起動します。
コマンドプロンプトを「管理者として実行」します。
下記の画面の通り、DP Agent をインストールしたディレクトリ配下の「bin」 に移動し、「 agentcli.bat -configAgent 」コマンドを実行します。メニューにしたがって再起動してください。
C:\WINDOWS\system32> cd C:\usr\sap\dataprovagent01\bin
C:\usr\sap\dataprovagent\bin> agentcli.bat --configAgent
Configuring the Agent at the following location:
C:\usr\sap\dataprovagent01
Initializing DPAgent Configuration Tool
************************************************************
DPAgent Configuration Tool
************************************************************
1. Agent Status
2. Start or Stop Agent
:
b. Back
************************************************************
Enter Option: 2
************************************************************
Start or Stop Agent
************************************************************
1. Start Agent
2. Stop Agent
:
************************************************************
Enter Option: 2
Stopping agent service. Command: sc stop SAP_HANA_SDI_Agent_Service_Daemon_SapJpn01
Stop Service return code: 0
Agent was shutdown gracefully
Press Enter to continue...
<少し時間をおきます。停止するまで時間が掛かります>
************************************************************
Start or Stop Agent
************************************************************
1. Start Agent
:
************************************************************
Enter Option: 1
Agent service daemon location: C:\usr\sap\dataprovagent01\bin\DPAgentServiceDaemon.exe
Starting agent service. Command: sc start SAP_HANA_SDI_Agent_Service_Daemon_SapJpn01
Start Service return code: 0
Press Enter to continue...
************************************************************
Start or Stop Agent
************************************************************
:
3. Ping Agent
:
************************************************************
Enter Option: 3
Ping successful
Press Enter to continue...
************************************************************
Start or Stop Agent
************************************************************
:
q. Quit
b. Back
************************************************************
Enter Option: q
0
注意 : 初回にDP Agent をStopしたり、Start すると下記のメッセージが表示されることがありますが、DP Agent 自体が起動していれば無視して結構です。
DP Agentが起動しているかどうかは、上記の画面の通り、「Ping Agent」 で確認します。
SAP Note:2945498
----------------
2021-03-05 20:37:08,180 [ERROR] Message.write - Exception while writing to output stream: Connection reset by peer: socket write error (local port 50209 to address 127.0.0.1, remote port 5051 to address 127.0.0.1)
Oracle データベースの設定
Oracle データベースに対して、レプリケーション用のユーザーを作成します。
下記の図の通り、仮想データアクセス(またはレプリケーション)対象のテーブルを保持しているスキーマとは別のユーザーを作成します。
このレプリケーション用のユーザーのスキーマ内には、差分情報を管理するためのテーブルやトリガー、順序、プロシージャなどが作成されます。
このオブジェクト群は「リアルタイムレプリケーション」の設定をする際に作成されますが、「仮想データアクセス」、または「スナップショット」の際には本DBオブジェクトは作成されません。
下記のようにOracleのDB管理者でログインし、ユーザーを作成し、必要な権限を設定します。
仮想データアクセス対象のテーブルに対しての参照権限(オブジェクト権限)付与については、オブジェクト所有者が実施することが推奨ですが、今回は手順を簡略化するためにDB管理者が行っています。
-- SYSTEM ユーザーで Oracleにログイン (PDBにログイン)
-- <password> 部分は適宜、修正
connect system/<password>@ORCLPDB
-- Replication 用の Oracleユーザーを作成
-- <password> 部分は適宜、修正
CREATE USER REP_USER01 IDENTIFIED BY <password>
DEFAULT TABLESPACE "USERS"
TEMPORARY TABLESPACE "TEMP"
;
-- 権限設定 ※ システム権限
GRANT UNLIMITED TABLESPACE TO REP_USER01;
GRANT CREATE SESSION TO REP_USER01;
GRANT CREATE SEQUENCE TO REP_USER01;
GRANT CREATE PROCEDURE TO REP_USER01;
GRANT CREATE ANY TRIGGER TO REP_USER01;
GRANT ADMINISTER DATABASE TRIGGER TO REP_USER01;
GRANT CREATE TABLE TO REP_USER01;
-- 権限設定 ※ オブジェクト権限 : レプリケーション対象テーブルに対しての参照権限
GRANT SELECT ON ORDER_ENTRY.CUSTOMERS TO REP_USER01;
GRANT SELECT ON ORDER_ENTRY.PRODUCTS TO REP_USER01;
GRANT SELECT ON ORDER_ENTRY.ORDERS TO REP_USER01;
参考情報:
SDIのOracle Databaseとのリアルタイムレプリケーションの実装方法は、以前はOracle のREDO Log ファイルを読み込み、SQL文を生成してSAP HANAに対して差分データ更新する方法が主流でしたが、今後はこのトリガーベースの実装が主流となります。
内部的な実装としては、Oracle Database のLog Miner 機能を利用していたのですが、Oracle Database 19c からLog Miner 機能のサポートポリシーが変更になったことに伴い、SDIの実装方式も余儀なく変更することになりました。
Oracle Database 12c, 18cではLog Readの実装方式も可能ですが、Oracle Database 12c, 18c自体のサポート期限についても注意が必要ですし、今後、Oracle Database 19c への移行を検討しているお客様が多くなることを想定して、全てのOracle Databaseのバージョンに対して、このトリガーベースの実装を推奨しています。
また、DWCの場合は、Oracle Database のバージョンに関わらず、トリガーベースのレプリケーションのみの対応となりますので、ご注意ください (詳細はこちら )
次はいよいよ、DWC側のDP Agentの設定作業に入りますが、一度ここで休憩に入りましょう。
なお、ここまでの設定手順はDWCだけでなく、SAP HANA や SAP HANA Cloudでも共通の設定方法になります。
お疲れ様でした !!
参考情報:
・SAP Help Portal : SAP Data Warehouse Cloud – 管理者ガイド – 「ソースへの接続」