EDUCAÇÃO E TECNOLOGIA

SAP Data Warehouse Cloud: 仮想データアクセス – Oracle編 – Vol1

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 – 管理者ガイド – 「ソースへの接続」

SAP Help Portal : SAP HANA SDI and SAP HANA SDQ