SAP Datasphereは、S/4HANAをはじめ、様々なシステムのデータを集約したデータ分析のための基盤を実現する DWH ソリューションです。そのため、様々なデータマネージメントシステムとの連携が求められており、幅広く利用されているRDBMSであるMicrosoft社のSQL Serverとの連携は非常に重要な機能要素となっています。
Datasphereのデータ連携の機能にはソースに応じて「仮想アクセス」、「リアルタイムアクセス」、「スナップショット」といった方式を提供しています。本ブログでは、Microsoft社のSQL Server(以下SQL Server) データベースとSAP Datasphre (以下、Datasphere) との「リアルタイムアクセス」によるデータ連携の設定について解説します。
本ブログで想定する SQL Server とDatasphere の連携のシステム構成図は下記の通りです。

図1. トリガーベースレプリケーションシステム構成
DP Agentは、ソースシステムからSQL Serverのテーブルトリガーを利用して収集した更新データを取得するためのエージェントソフトウエアです。DP Agent にはWindows 64Bit版、Linux x86 64Bit版、Linux Power版が提供されていますが、本ブログではWindows64Bit版を前提に解説いたします。
設定の流れは以下になります。
- 事前準備
- DP Agentの入手とインストール
- DP Agentの設定と接続
- SQL Server のJDBCドライバの設定
- SQL Server のトリガーベース レプリケーション用の設定
- SQL Server のトリガーベース レプリケーションの利用方法
1.事前準備
SQL Server 側の環境設定はこちらでは触れません。検証に使用できるデータベースサーバ、任意のデータベース(本ブログ内ではUSERDB)を準備いただき、任意のテーブル(EMPLIST)をデータベースオーナーで作成しておいてください。
DP Agent には、サポートされている Java runtime環境 (JRE) が必要です。SAP製 JVM はDP Agentのインストール パッケージにバンドルされていますが、サポートされている別の JRE を使用することもできます。サポートされている Java のバージョンについては、SAP PAM ( サーティフィケーション情報) をご参照下さい。
2.DP Agentの入手とインストール
DP Agentは
SAP Software Download Centerより、最新のSoftwareを入手してください。「HANA DP Agent 2.0」を条件に検索し、インストールするOSに適した最新のSupport Package、及びPatch を選択するようにして下さい(本ブログの執筆時点で SP07 Patch 30 (2.7.3) for HANA DP AGENT 2.0 が最新です)。
ダウンロードが済みましたら、任意のフォルダで解凍し、hdbsetup.exe を
「管理者として実行」します。

図2. ダウンロード / 解凍したファイルと、インストーラ
インストールフォルダを指定し、以下の必須パラメータを指定します。
- DP Agent名 (任意)
- DP Agentを起動するためのOSユーザ(要ドメイン名)
- パスワード
- パスワードの確認

図3. DP Agentのインストール画面
入力した情報を確認の上、Installを実行します。Installが完了しましたら、エージェントの起動を確認します。Windowsの場合はOS標準の「サービス」ツールを起動します。DP Agentは SAP_HANA_SDI_Agent_Service_Daemon_”指定したDP_Agent名” という名称でサービス登録されます。こちらで Status が 「Running」となっていれば正常に起動していることが確認できます。

図4. Windowsのサービスによる、DP Agentのステイタス確認
3.DP Agentの設定と接続
次の手順はDatasphereにて設定します。
まず最初に、DatasphereがDP Agentと接続するために、DatasphereのIP許可リストに、DP AgentをインストールしたホストのIPアドレスを入力します。Datasphereの左メニューから「システム」>「設定」を選択し、「IP許可リストタブ」>「信頼されたIP」を選択し、DP Agentが稼働しているIPアドレスを追加して、保存します。

図5. DP Agentと接続するためのIP許可リスト
次に、先ほどインストールしたDP Agentとの接続情報を登録します。「データ統合」タブをクリックしオンプレミスエージェント のカテゴリに表示される「+」タイル(新しいデータプロビジョニングエージェントの作成)をクリックし、新規のDP Agentの登録を開始します。

図6. データプロビジョニングエージェントの作成
任意の新しいDP Agentの登録名(先のWindowsにインストールしたDP Agentの名前)を入力し、作成ボタンをクリックします。

図7. エージェント名の指定
エージェント設定の画面が開きますが、ここでは特に入力する必要はありません。こちらで表示される情報が以後の手順で必要になります。
ここでDP AgentとDatasphereの接続に関して補足すると、こちらの示されているエージェント設定を見てわかるように、Datasphere側にはDP Agentが動作しているホストの情報を与えることはありません。ここで示されているDatasphereに関するネットワークの情報を、後方で設定するDP Agentに与えることで、DP AgentからDatasphereに接続を確立する事になります。
注意事項!
下で表示されている画面の情報を、以降の手順(DPAgent Configuration Tool)で参照する必要があるので、この画面を閉じずにおいておくか、必ず画面の内容を記録しておいてください。誤って閉じた場合は、作成されたタイルをクリックすることで表示させることができますが、
毎回パスワードが変更されるので、以降の入力と一致するように注意してください。
この Datasphere の画面をそのままに次の手順に進んでください。

図8. DPAgent Configuration Toolで参照する入力値
DP AgentをインストールしたホストでWindows コマンドプロンプトを
「管理者として実行」します。
C:\usr\sap\dataprovagent\bin(デフォルトのインストールフォルダの場合)にてDP Agent設定ツール(CUI ツール)を実行します。以下のコマンドを実行してください。
agentcli.bat --configAgent
DPAgent Configuration Tool のログイン画面が表示されます。まず管理者用のパスワードを設定するために2を入力して「2. Create New Admin User」を選択、Admin User Nameはデフォルトの[Administrator]のまま(何も入力せず)Enterキーを押します。このAdministratorはWindowsの管理者ユーザとは関連はなく、DP Agent用の管理者ユーザになります。以降でパスワードの設定と確認を行ってください。

図9. DPAgent Configuration Tool へのログイン
設定が完了したら、「1. Login」を選択し、設定したパスワードでAdminstratorでログインします。DPAgent Configuration Tool のメニューから 「7. SAP HANA Connection」を選択し、次に「2.Connect to SAP Datasphere via JDBC」を選択します。

図10. DPAgent Configuration Tool による設定
以降、対話形式の設定となりますので、以下の入力値を与えてください。なお、※で示された値を「図8. DPAgent Configuration Toolで参照する入力値」で示された画面から入手してください。なお、パスワード文字列はCut & Pastすることができますが、入力は表示されませんので、慎重に進めてください。
- DP Agent名 ※
- JDBC 経由で暗号化された接続を使用するか指定 (デフォルト true)
- SAP Datasphereのホスト名 ※
- SAP Datasphereのポート番号 ※
- Proxy (ご利用の環境に準じます)
- X.509 証明書ベースの認証を使用するか指定(デフォルト false)
- HANA User名 ※
- パスワード ※

図11. DPAgent Configuration Tool 設定項目
「b. Back」メニューで 図10. DPAgent Configuration Tool のメニューまで戻り、「2. Start or Stop Agent」を選択し、「2. Stop Agent Using Service」を実行したのち、「1. Start Agent Using Service」を実行してDP Agentを再起動します。この過程で再度ログインの画面になりますので、Administratorでログインして下さい。

図12. Start or Stop Agent による停止と起動(再起動)
図10. DPAgent Configuration Toolのメニューに戻り、「1. Agent Status」で、DP Agentの Status がRunningになっていることを確認します。

図13. DP Agentのステイタス画面
図8. DPAgent Configuration Toolで参照する入力値 のブラウザ ウィンドウに戻り、「閉じる」ボタンをクリックします。
「データ統合」タブを選択すると、作成したデータプロビジョニングエージェントのタイルが表示されています。エージェント名の下に「CONNECTED」が表示されれば、Windows上のDP Agent との接続が確立されます(少し時間をおいてから、「エージェントをリフレッシュ」ボタンをクリックして下さい)。
図14. DP Agentの接続確認
4.SQL Server のJDBCドライバの設定
SAP Datasphereから SQL Server へ接続するためのJDBCドライバを入手します。こちらの詳細はMicrosoft社の指示に準じてください。対応するJDBCドライバは
SAP PAM ( サーティフィケーション情報) をご参照下さい。入手したJDBCドライバを、C:\usr\sap\dataprovagent\lib(デフォルトのインストールフォルダの場合)に配置します。

図15. デフォルトのドライバーの格納先
「図14. DP Agentの接続確認」の画面で、登録したDP Agentのタイルのメニューから「編集」を選択します。

図16. DP Agentの接続を編集
MssqlLogReaderAdapterを選択し「閉じる」をクリックします。
注意:「保存」ボタンはアクティブになりませんが、選択したエージェントアダプタは「閉じる」で保存されます。

図17. SQL Server アダプタの有効化
「閉じる」ボタンを押して、しばらくすると、設定したDP Agent のタイルのSQL Server の表示が強調され、有効化を確認する事ができます。

図18. SQL Server アダプタの有効化確認
5.SQL Server のトリガーベース レプリケーション用の設定
SQL Server のトリガー ベースのレプリケーションを使用するためのアクセス許可と権限を付与します。必要な処理のテンプレートが
<DPAgent_root> /Trigger/の下にmssql_trigger_based_init.sql として提供されています。以下にそれを引用したサンプルを掲載します。
メモ帳等のエディタにて、以下の箇所( ’ ’ で囲まれた部分)をご自身の環境に準じて編集し、SQL Server で実行してください。なお、本サンプルでは最小限の権限設定を行うため、個別のテーブル(EMPLIST)を指定した権限設定となっております。汎用的な権限設定を行う場合は mssql_trigger_based_init.sql にあるOption#1の使用をご検討下さい。
sqlcmd -S 'SQL Serverホスト名',1433 -U 'データベース管理者' -P 'パスワード' --データベースオーナーでログイン
USE 'データベース名'; --複写するテーブルのデータベース名を代入
CREATE LOGIN SDI_USER WITH PASSWORD = 'パスワード'; --SDI_USER用の任意のパスワード代入
CREATE USER SDI_USER FOR LOGIN SDI_USER;
GO
GRANT CREATE TABLE TO SDI_USER; --レプリケーション用の設定、権限を、SDI_USERに付与
GO
CREATE SCHEMA SDI_USER; --レプリケーション用オブジェクト用スキーマ作成
GO
ALTER AUTHORIZATION ON SCHEMA::SDI_USER to SDI_USER; --スキーマにおけるすべてのコントロール権限の付与
GRANT SELECT ON dbo.EMPLIST TO SDI_USER; --レプリケーション対象のテーブルにのみ、SDI_USERに読み取り権限付与
GRANT ALTER ON dbo.EMPLIST TO SDI_USER; --レプリケーション対象のテーブルにのみ、CREATE DML TRIGGER 権限付与
GRANT CREATE PROCEDURE TO SDI_USER; --プロシージャの作成権限をSDI_USERに付与
GRANT ALTER ANY DATABASE DDL TRIGGER TO SDI_USER; -- DDL TRIGGER 権限をSDI_USERに付与
GO
USE [master];
GRANT VIEW SERVER STATE TO SDI_USER; -- レプリケーション処理時にトランザクションIDを取得するための設定
Go
図19. mssql_trigger_based_init.sqlをもととしたサンプル
以上で、設定は完了です。
6.SQL Server のトリガーベース レプリケーションの利用方法
ここまでの手順で設定した、SQL Server への接続を、Datasphereで利用してみましょう。
まずは、Datasphereの「接続」設定を行います。左メニューの「接続」を選択し、「作成」ボタンをクリックします。

図20. 新規の接続を作成
接続タイプの中から Microsoft SQL Serverのタイルをクリックします(右上にあるテキストボックスに「sql」と記入すると該当するタイルがフィルタできます)。

図21. 接続タイプの選択
MS SQL Serverに接続するために必要な情報を記入します。以下の項目は必須です。
- サーバ名: SQL Server名 インスタンス名はサポートしていません
- ポート: デフォルトは 1433
- データベース名: SQL Serverのデータベース名
- SQL Serverのバージョン
- ユーザ名: 図19で作成したSQL Serverのユーザ名
- パスワード: 上のユーザ用パスワード
- データプロビジョニングエージェント: 図11 で入力したDP Agent名

図22. 接続の作成
次の画面の接続プロパティは必要に応じて設定します。
最後に設定した接続の名称(この例ではRealtimeREP_SQLServer2019)を任意に入力し「接続を作成」をクリックします。
設定が完了したら作成した接続がリストされます。正常に作成されました」のメッセージを確認して下さい(メッセージは自動的に消滅しますのでご注意ください)。

図23. 作成された接続の確認
Datasphereの左メニューから「データビルダアイコン」を選択します。
新しいグラフィックビュー タイルをクリックします

図24. 新しいグラフィックビューの作成
左ペインで「ソース」タブをクリックし、「接続」アイコンを選択すると、前の手順で作成した接続名がリストされます。
「dbo(スキーマ)」「Table」の順に展開し、レプリケーション対象のテーブルが表示されるのを確認します。このテーブルをワークスペースへDrag&Dropします。

図25. SQL Server のテーブルの確認とビューの作成
ワークスペースにテーブルを配置すると、「テーブルのインポート」が表示されます。これはリモートデータソースであるSQL Server のテーブルを、Datasphereの「仮想テーブル」として定義することを意味しており、テーブルデータ(レコード)をインポートするわけではありません。仮想テーブルに関しては
こちらの「データ仮想化(フェデレーション)」をご参照下さい。この仮想テーブルの名前を指定し「インポートおよびデプロイ」を実行します。

図26. 仮想テーブルの名前の指定
ワークスペースに配置されると、これを参照するビューオブジェクトと自動的に連結されます。
配置した仮想テーブルをクリックしてコンテキストメニューから「データビューワ」を選択し、データが参照できるか確認します。このデータはリアルタイムにSQL Server から取得したデータです。

図27. SQL Server のテーブルデータのプレビュー
「保存」アイコンをクリックし、連結されたビューに名前をつけて保存します。ダイアログボックスに、任意のビュー名を入力します(ここではV_EMPLIST)。 続いて「デプロイ」アイコンをクリックし、有効化します。デプロイを開始したメッセージに続き、デプロイが完了したことを知らせるメッセージが確認できたら完了です。メッセージは自然消滅しますので注意してください。

図28. VIEWの保存とデプロイ
ここで作成されたビューは仮想テーブルとして利用する事ができますが、Datasphereの高速なパフォーマンスを利用するためにはデータをDatasphereに複製する必要があります。以下の手順でデータをSQL Server から複製します。
Datasphereのデータ連携の機能には、「仮想テーブル」、「スナップショット」、「リアルタイムアクセス」があることは最初に触れましたが、ここで「スナップショット」と「リアルタイムアクセス」を選択する事ができます。前者はバッチによる周期的なデータの転送、後者はソース側の更新を契機にDatasphereのデータが同期されます。今回はトリガーベースのレプリケーションを利用しますので、「リアルタイムアクセス」を使ったデータの同期を行います。
左メニューから「データビルダ」を選択します。ここまでの手順で作成した仮想テーブル(タイプ:リモートテーブル)と、それを参照するビューがリストされています。このうち仮想テーブルの左端のチェックボックスにチェックを入れ、「編集」アイコンをクリックします。

図29. 仮想テーブルからリアルタイムアクセスへの属性変更
仮想テーブルの属性画面が表示されるので、「リモート」タブを選択します。「データアクセス」の項目には「リモート」が表示されており、これはデータの実体がDatasphereにはなく、リモートソースであるSQL Server の仮想テーブルであることを示しています。「テーブルの複製」ボタンをクリックし、表示される「リアルタイムアクセスを有効化」を選択します。これにより仮想テーブルのデータをSQL Server からDatasphereに複製し、実体化します。

図30. 仮想テーブルからリアルタイムアクセスへの変更
「…completed」のメッセージが表示されたらレプリケーションの設定が完了です(メッセージは自然消滅します)。

図31. リアルタイムアクセスの設定完了
リフレッシュアイコンをクリックします。「データアクセス」が「(複製済)リアルタイム」に、ステータスが「有効」になっていることが確認できればデータがDatasphereに複製されたことを示しています(ステイタスの反映に若干時間がかかる場合があります)。

図32. リアルタイムアクセスのステイタス確認
SQL Serverを停止してもDatasphereでテーブルが参照できることも確認できます。また、SQL Server を起動してデータを更新し、Datasphere側にも反映される(逐次レプリケーション)ことを確認してみて下さい。
以上で、SQL Server のデータとDatasphereの「リアルタイムアクセス」によるデータ連携の設定は完了です。作成されたテーブルは、以降Datasphereのモデル作成に利用する事が出来、仮想テーブルより優れたパフォーマンスで処理する事が可能になります。