Skip to Content
Technical Articles

SAP HANA Smart Data Integration(SDI)を使用した Oracle 12c データベース からSAP HANA 2.0 SPS04へのデータ レプリケーション方法

概要

このチュートリアルでは、Oracleデータベースからデータを抽出してSAP HANAにレプリケーションする方法を説明します。SAP Smart Data Integration(SDI)を使用して、Oracleデータベースから LogMinerを利用してリアルタイムでデータをレプリケーションするまでの手順をご紹介します。

SDIは、リアルタイムのデータ配信、大量データの移動、およびデータ連携機能を提供します。 SDIには、SAP HANAデータベースサーバ上のデータプロビジョニングサーバ(以下、DPサーバ)と、SAP HANAと外部ソース間の仲介を行うデータプロビジョニングエージェント(以下、DPエージェント)の2つのコンポーネントが含まれています。
DPエージェントは、データプロビジョニングアダプターを内包しています。 オンプレミスまたはクラウド内に配備する事でデータの連携、レプリケーション、変換シナリオを実現します。 データソースとは別のホストにインストールすることで、安全なエンタープライズ・ネットワークシナリオで利用することができます。

使いやすいWebアプリケーションを利用して、replication taskとflowgraphを設定する事で、リアルタイムまたはバッチのデータレプリケーションと変換シナリオを実行できます。
このチュートリアルでは、WebアプリケーションであるSAP HANA Web-based Development Workbenchを使用してSAP Smart Data Integrationの環境構築から、Oracle 12cにあるテーブルのreplication task を作成するまでを説明します。また、SAP HANA Cockpitを使用すれば、ユーザーはDPエージェント、リモートサブスクリプション、データロードを監視することができます。

このチュートリアルは、Maxime Simonのブログ「Replicating data from Oracle DB 12c to SAP HANA 2.0SPS04 using SDI」、そしてそのもととなっているFeng liuのブログ「Replicating Data from Oracle to HANA using SAP HANA Web IDE SDI」に基づいています。

ただし、このブログではSAP Web IDEは使用していません。またOracleデータベースのインストールについての説明を追記しています。

 

アーキテクチャ

クラウド、オンプレで構成される様々なデプロイメント形態の場合でも、SDIに利用するコンポーネントは同じですが、コンポーネント間の接続は、SAP HANAがオンプレミスにデプロイされているか、クラウドにデプロイされているか、またはファイアウォールの背後にデプロイされているかによって異なります。 ここでは既存のSAP HANAのランドスケープに基づいて、以下の様にSDIを構成配置します。

システム1:データプロビジョニングサーバ(SAP HANAサーバの内部コンポーネント)
システム2:データプロビジョニングエージェント
システム3:ソースシステム(Oracle 12c)

SAP HANAの内部コンポーネントであるDPサーバがTCP/IPプロトコルを使用してDPエージェントに接続し、デフォルトのポートとして5050を使用していることを示しています。

 

手順

1)     Oracle database 12c のインストール
2)     Oracle database の権限の設定
3)     SAP HANAサーバのDP サーバをアクティベート
4)     SAP Service MarketplaceからDP サーバ デリバリーユニットZIPファイルのダウンロード
5)     DP デリバリ―ユニットのインポート
6)     SAP Service MarketplaceからDP エージェントZIPファイルのダウンロード
7)     DPエージェントに必要なOracle driversの入手
8)     DP エージェントの設定
9)     WebブラウザによるWebディスパッチャの有効化と、全てのテナントへのアクセス設定
10)  リモートソースの作成
11)   replication taskの作成
12)   replication taskの実行
13)   データ配信のモニタリング

Oracle データベース 12c のインストール

このPoCでは、DPエージェントをインストールするWindowsホストにOracle データベース 12cをインストールしています。 これら2つのマシンを別にする事もできます(別のホストにインストールする方法を推奨します)。

Oracle データベース 12cはこちらから :  https://www.oracle.com/database/technologies/database12c-win64-downloads.html

 

インストーラーをダウンロードして解凍し、解凍したフォルダーのsetup.exeをクリックしてデータベースをインストールします。
ウィザードに従ってインストールします。

 

最初のオプションを選択して新規のデータベースを作成します

 

「デスクトップ・クラス」を選択します。

 

「Windows 組み込みアカウントの使用」 を選択します.

 

Oracleベース を指定します。 ここでは、C:\ Oracleを指定しています。

データベースのエディション、キャラクタ・セット、グローバル・データベース名、および管理パスワードを指定します。

データベースをシングルテナントとして作成するか、マルチテナントとして作成するかを選択します。 プラガブル・データベース(PDB)名 にpdborclという名前を指定して、マルチテナントデータベースとして作成します。

 

ウィザードに従ってインストールを完了します。

 

Oracle データベースの権限の設定

Oracleデータベースユーザーは、リアルタイムなデータの変更をキャプチャするため、そしてバッチもしくは初期ロードトランザクションを実行するために、特定の権限を持っている必要があります。 詳細については、「Oracle Database Permissions」のページをご覧ください。
SDIは、データベースレベルと、テーブルレベルのログの捕捉の両方をサポートしています。 ここではデフォルトのテーブルレベルのログの捕捉を使用することにします。
ログの捕捉のレベル設定は、Oracle Log Readerアダプター用のDP エージェント構成ツールの「アダプター設定」ウィンドウで、後から変更もできます。

必要な権限については次の場所にあるスクリプトで確認できます。<DPAgent_root>\LogReader\Scripts

Oracle DBをシングルテナント・データベースとして作成した場合は、oracle_init_example.sqlを実行してユーザーを作成し、必要なロール/権限を付与します。 (マルチテナント・データベースについては以下を参照してください

 

Oracle SQL Developer(またはSQL Plus)を使用して、ユーザー SYSそしてロールをSYSDBAとしてデータベースに接続します。

ユーザSYS、ロールをSYSDBAとしてSQLコンソールを開き、oracle_init_example.sqlスクリプトファイルの内容を実行します。関係する部分のコメントを外し、ユーザーによって提供されたユーザー名LR_USERを置き換える必要がある可能性があります。
このブログではSYSTEMユーザーを使用して、SAP HANAデータベースにアクセスします。 通常は専用のユーザを使って下さい。ここで示しているrole は、Oracleデータベースのログにアクセスするために必要な権限です。

ユーザーSYS、ロールをSYSDBAとしてSQLコンソールを開き、oracle_init_example.sql の内容を実行します。このファイルに含まれるSQLステートメントでは、Oracleデータベースに新しいユーザーLR_USERを作成し、すべてのデータベーステーブルのログにアクセスするロールを付与しています。
関係する部分のコメントを外し、ユーザーLR_USERは、使用する任意のユーザー名があれば置き換えてください。このブログではSYSTEMユーザーを使用して、SAP HANAデータベースにアクセスしますが、通常は専用のユーザを使って下さい。oracle_init_example.sqlの中で grantされているrole が、Oracleデータベースのログにアクセスするために必要な権限です。

 

 

Oracle データベースをマルチテナント・データベースとして作成した場合は、SYSDBAとSYSユーザーを使用して、コンテナ・データベースへの最初の接続を作成します。

oracle_multitenant_init_example_for_container_database.sql に含まれるスクリプトを実行して通信ユーザーを作成し、そのユーザに対してコンテナ・データベースで必要な権限を付与します。

次に、SYSDBAとSYSユーザーを使用して、プラガブル・データベースへの2番目の接続を作成します。

oracle_multitenant_init_example_for_pluggable_database.sqlに含まれるスクリプトを実行して通信ユーザーを作成し、そのユーザに対してプラガブル・データベースで必要な権限を付与します。

 

 

SAP HANAサーバのDP サーバをアクティベート

Smart Data Integrationを実行するには、SAP HANAサーバでDPサーバを有効にする必要があります。SAP HANAシステムがマルチテナントDBとして設定されている場合は、システムデータベースでALTER DATABASEステートメントを実行します。

HANA Studioを使用して、SYSTEMユーザーでSAP HANAのシステム・データベースに接続します。SYSTEMDBアイコンを右クリックして、コンテキストメニューから Configuration and Monitoring > Open Administrationを選択し、”Configuration”タブをクリックします。

 

daemon.iniにある、dpserver.<tenant_name>のサービスがアクティブであることを確認します。

アクティブでない場合は、SYSTEMDBでSQLコンソールを開き、次のステートメントを実行します。

ALTER DATABASE <database_name> ADD 'dpserver' AT LOCATION '<hostname>[:<port_number>]'

 

マルチデータベース・コンテナのシナリオで、DPサーバを削除したい場合は、SYSTEMDBで以下のALTER DATABASEステートメントを実行します。

ALTER DATABASE <database_name> REMOVE 'dpserver' AT LOCATION '<hostname>[:<port_number>]'

 

SAP Service MarketplaceからDP サーバ デリバリーユニットZIPファイルのダウンロード

ここではSAP HANAサーバ 2.00.045を使用しており、対応するバージョンのDPエージェントと配信ユニットをダウンロードする必要があります。
詳細については、SAP HANA SDIのProduct Availability Matrix(PAM)をご覧ください。必要なインストールパッケージは、SAPソフトウェアダウンロードセンターの次の場所にあります。

SAP Software Download Center > Software Downloads > Installations & Upgrades > By Alphabetical Index (A-Z)  H  SAP HANA SDI  SAP HANA SDI 2.0 > COMPRISED SOFTWARE COMPONENT VERSIONS > HANA DP 2.0

確認したバージョンのZIPファイルをクリックし、任意のフォルダに保存します。HANAIMDP<version number>.ZIP ファイルを解凍し、HANA_IM_DP.tgz も解凍します。

 

DP デリバリ―ユニットのインポート

マルチテナント・データベース構成の場合、前の手順でDPサーバを有効にしたテナント・データベースにデリバリーユニットをインポートする必要があります。
ここではPoCであるため、セキュリティを考慮せずに SYSTEMユーザーを使用してSAP HANA Studioからインポートします。 メニューの ファイル > インポート をクリックします。 表示されるインポートダイアログの “Select an import source” の検索ボックスに「delivery」と入力します。

 

表示されるナビゲーションツリーで Derivery Unit をクリックし、「次へ」をクリックします。 次に、インポートするターゲットシステムを選択し、「次へ」をクリックします。

 

Import Through Delivery Unit ダイアログで 「クライアント」ラジオボタンを選択し、Browse をクリックしてDelivery Unit をダウンロードしたフォルダに移動し、あらかじめ解凍しておいた HANAIMDP.tgz を選択して「Finish」をクリックします。

 

 

SAP Service MarketplaceからDP エージェントZIPファイルのダウンロード

次のステップでは、OracleデータベースからSAP HANAデータベースにデータをレプリケーションする時に使用するサーバに、DPエージェントをインストールします。 Oracleデータベースと同じサーバや、クラウド上のサーバ、または独自のローカルコンピューターのいずれにも配置できます。 このチュートリアルでは、Oracleデータベースと同じサーバにインストールすることにします。

SAP Software Download Center > Software Downloads > 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> と進みます。

 

SARファイルをダウンロードする場合は、次のコマンドを使用して、SAPCAR(SAPのアーカイブツール。SAP Software Download Center で入手可能です)SARファイルを解凍する必要があります。コマンド例を示します。

SAPCAR -xvf IMDB_DPAGENT200_03P_20-70002517.SAR

 

注意:DPエージェントのバージョンは、HANAのバージョンと一致させてください。 どのバージョンを使用するかは、HANA SDIのPAMで確認します。
DPエージェントをインストールして設定する際は、管理者ユーザーを使用する必要があります。

hdbsetup.exeを見つけ、右クリックして管理者として実行します。

 

“Install new SAP HANA Data Provisioning Agent” を選択し、インストールパスを指定します。 ここではデフォルト設定のままにしています。  >” C:\ usr \ sap \ dataprovagent”

 

 

Agent Unique Nameでは、インストールするホストにおいてユニークとなるように任意のDPエージェントの名前を指定します。

Domain\Username の指定は、インストールするホストOSで有効なドメイン(もしくはホスト名)\ ユーザ名を指定します。

 

 

DPエージェントに必要なOracle ドライバの入手

DPエージェントにはOracleデータベースのバージョンに応じて、データをインポートするためのOracleのライブラリが必要です。 必要なライブラリはProduct Availability Matrix (PAM) で確認します。

 

これらの必要なライブラリはOracle clientのフォルダー内で見つける事ができます。

    • ojdbc7.jar:  C:\Oracle\product\12.1.0\dbhome_1\jdbc\lib
    • xdb6.jar: C:\Oracle\product\12.1.0\dbhome_1\RDBMS\jlib
    • xmlparserv2.jar: C:\Oracle\product\12.1.0\dbhome_1\LIB

サポートライブラリをDPエージェントのlibフォルダーにコピーします。

 

DP エージェントの設定

DPエージェントの設定を行うGUIツール SAP HANA Data Provisioning Agent Configuration は現在ご利用が推奨されていません。従って、CUIモードの設定ツールによる手順をご紹介します。

Configuring the Agent in Command-Line Interactive Mode

コマンドライン エージェント構成ツールでは、DPA_INSTANCE環境変数に、DPエージェントのインストールルートの場所(<DPAgent_root>)を設定する必要があります。

Windowsの場合はコマンドプロンプトを「管理者として実行」し、DPA_INSTANCE環境変数をセットします。

set DPA_INSTANCE=C:\usr\sap\dataprovagent

 

<DPAgent_root>\bin に移動し、–configAgent パラメータを指定して、設定ツールを起動します。

 

agentcli.bat --configAgent

 

Enter Optionに 1 を指定してDPエージェントが開始されていることを確認してください。必要に応じて、Option 2 でDPエージェントを開始することができます。

Option 6 でDPエージェントをSAP HANAに接続します。

DPエージェントとDPサーバ間の通信に使用されるエージェント管理用のHANAユーザーが必要です。 エージェント管理用のHANAユーザーにはいくつかのSystem権限が必要です。詳細については  AGENT ADMIN and ADAPTER ADMINを参照してください。ここではPoCであるため、セキュリティを考慮せずに SYSTEMユーザーを使用しています。

 

 

SAP HANAテナントデータベースに接続するためのポートを知るには、HANA SYSTEMDBにSQLコンソールで接続し、HANA Studioで以下のSQLクエリを実行します。

 

SELECT * FROM SYS_DATABASES.M_SERVICES

 

DPサーバをインストールしたテナントデータベース(一番左のマスクした部分にデータベース名が表示されているindexserver)のSQLポートに接続します。 この場合は30041であることがわかります。

メインメニューに戻り、Option 7 を使用して、SAP HANAのテナントでアクティブなdpserverにエージェントを登録します。DPエージェントの名前とWindowsホストのIPアドレスを指定します。

 

 

このPoCではDPエージェントを dataprovagentという名前で登録しています。

メインメニューに戻り、Option 8 を使用してSAP HANAで使用するソースシステムに応じたアダプターを登録します。使用可能なすべてのアダプターを表示し、使用するアダプターを登録できます。 名前を入力して完了します。

 

OracleLogReaderAdapter が dpserverに登録されました。

 

WebブラウザによるWebディスパッチャの有効化と、全てのテナントへのアクセス設定

HANA Studioで、SYSTEMDBを右クリックして Administration panelを開きます。

Configuration タブをクリックします。 webdispatcher.ini > profile  を展開しwdisp/system_auto_configuration をダブルクリックし、 true をセットします。

xsengine.ini セクションで public_urls に、それぞれテナントデータベースをセットします。こちらを参照してください。

http_urlをダブルクリックし、http URLを設定します。また、https_urlも必要に応じて同様に設定します。

 

Webブラウザーを使ってアクセスする各テナントデータベースに独自のURLを割り当てます。 “Save”をクリックして変更を保存します。

 

 

Windowsホストの 「hostsファイル」を編集して、HANA SYSTEMDBとテナントデータベース用のIPアドレスを追加します。

hostsファイルは C:\Windows\System32\drivers\etc にあります。
hosts ファイルの編集には administrator 権限が必要です。
以下の様に HANA システムの IP address と、ホスト名を追加します。

xxx.xxx.xxx.xxx                  <SYSTEMDB 用の任意のホスト名>
xxx.xxx.xxx.xxx                  <tenant DB 用の任意のホスト名>

これで、各テナントのWeb-base Developer Workbenchを含むSAP HANA XSアプリケーションにアクセスできるようになります。Web-base Developer Workbenchを使用してOracleデータベースをリモートデータソースに設定し、SAP HANAにデータをレプリケーションします。

 

リモートソースの作成

このチュートリアルでは、SAP HANA Web-based development workbenchを使用して、リモートソース、仮想テーブル、replication taskを作成しています。 また、SAP Web IDEを使用して同様の作業をすることもできます。SAP HANA Web-based development workbenchを利用するためには、 sap.hana.ide.roles::Developer ロールを持つユーザーが必要です。

HANA Studio、もしくは HANA Cockpitにログインし、データを複製するテナントDBにアクセスします。

SAP HANA Cockpit のURLは : https://<system db xs webserver host name>:51027/cockpit#Shell-home です。

SAP HANA Web-based Development Workbenchにログインします。 以下の SAP HANA XS WebサーバのURLからログインします。
http://<tenant db xs webserver host name>:80<SAPHANAinstance>/sap/hana/ide

 

 

Catalog を選択し、 Provisioningを展開して “Remote Sources” アイコンで右クリックし、new remote source をクリックします。

 

Oralceデータベース用のリモートソースを作成します。

リモートソースの定義で、Oracleが稼働しているデータベースホストとポート番号を直接指定するか、もしくは、DPエージェントホストのパスを指定して、OracleのTNSNAMES.oraファイルに基づくリモートソースを作成できます。

(C:\Oracle\product\12.1.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora)

Oracleデータベースをマルチテナント・データベースとしてインストールした場合は、コンテナデータベースサービス(CDB)の名前と、アクセスするプラガブルデータベースサービス(PDB)が必要です。

手順 2 「Oracleデータベースの権限の設定」 で指定したユーザー名とパスワードを入力します。

 

 

Oracle LogReaderアダプタは、LogMinerとトリガ―の2つのキャプチャモードをサポートしています。ログベースのレプリケーションはトリガーベースのレプリケーションよりも高機能であるため、ログベースのレプリケーションを使用します

作成したリモートソースに基を利用して仮想テーブルを作成するには、SAP HANAのシステムユーザであるsys_repoユーザーにアクセス権を付与する必要があります。
SAP HANA Studioでリモートソースを作成したユーザーでログインし、次のSQLを実行します。

 

GRANT CREATE VIRTUAL TABLE, CREATE REMOTE SUBSCRIPTION ON REMOTE SOURCE "<Remote_source_name>" to _SYS_REPO;
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON SCHEMA "<schema_name>" TO _SYS_REPO WITH GRANT OPTION;

 

replication taskの作成

リモートソースのテーブルからSAP HANAのテーブルにデータを複製するには、.hdbreptaskファイルを作成して複製プロセスを設定します。 .hdbreptaskが設定されたら、それをアクティベートし、ストアド・プロシージャ、リモート・サブスクリプション、1つ以上のレプリケーション対象に対応する仮想テーブル、およびターゲット・テーブルを生成します。 Initial Load Onlyを選択した場合はリモートサブスクリプションは必要ありません。それ以外の場合は、リモートサブスクリプションが作成されます。 ストアドプロシージャが呼び出され、初期ロードが実行されます。 realtime を有効にすると、その後の更新が自動的に配信されます。

初期ロード中のソースデータの更新は、初期ロードでキャプチャされ、初期ロードが完了した後の変更はリアルタイムに複製されます。
スキーマの変更がSAP HANAターゲットテーブルに適用されるレプリケーションを選択した場合、replication taskに関連付けられているソーステーブルのDDL変更はSAP HANAにも伝播します。

SAP HANA Web-based Development Workbenchのメニューから、”Editor” にアクセスします。

まず最初にreplication taskを格納するため、Contentフォルダーを右クリックして、任意の名前でpackageを作成します。
次にそのPackageを右クリックして、新しいreplication taskを作成します。

作成したリモートソースを選択し、仮想テーブル(データを物理的に格納しません)を作成するスキーマと、データをレプリケーションするスキーマを定義します。

レプリケーションするリモートオブジェクトに対するレプリケーションのふるまいを選択できます。

 

Replication behavior Description
Initial load only Performs a one-time data load without any real-time replication. Always available.
Initial + Realtime Performs the initial data load and enables real-time replication. Available when CDC is supported, for tables and virtual tables.
Realtime Enables real-time replication without performing an initial data load. Available when CDC is supported, for tables and virtual tables.
No data transfer Replicates only the object structure without transferring any data. Always available.
Initial + realtime with structure Performs the initial data load, enables real-time replication, and tracks object-level changes. Available when CDC is supported and for tables.
Realtime only with structure Enables real-time replication and tracks object-level changes without performing an initial data load. Available when CDC is supported and for tables.

レプリケーションするすべてのオブジェクトを定義したら、replication taskを保存してアクティブ化します。

 

replication taskの実行

replication taskを開始するには、タスクを右クリックして “Execute” を選択します。

 

replication task を実行すると、リモートサブスクリプションがキューステータスに設定されます。 データの初期ロードが実行されてから、リモートサブスクリプションが Distribute ステータスに設定されます。
初期ロード中にソースデータに加えられた変更、追加、または削除は、ターゲットシステムでも更新されます。 その後、ソースデータに加えられた変更はすべて、ターゲットに対してリアルタイムに更新されます。

レプリケーションの状況はSAP HANA Web-based Development WorkbenchのCatalogにあるターゲットテーブルで結果を直接確認することができます。また、以下の監視ツールを利用する事もできます。

 

データ配信のモニタリング

監視タスクを実行するユーザーに権限 sap.hana.im.dp.monitor.roles :: Monitoring を付与する必要があります。(10.「リモートソースの作成」参照)

Subscription Monitor は以下のURLでアクセスできます。
http://<host name>:80<2 digit instance number>/sap/hana/im/dp/monitor/?view=DPSubscriptionMonitor

Replication Task Monitor は以下のURLでアクセスできます。
http://<host name>:80<2 digit instance number>/sap/hana/im/dp/monitor/?view=IMTaskMonitor

DP Agent Monitor は以下のURLでアクセスできます。
http://<host name>:80<2 digit instance number>/sap/hana/im/dp/monitor/?view=DPAgentMonitor

 


 

当ブログのすべてのコンテンツの元となっている記事を作成した、Maxime Simon 、そしてそのもとの記事の作成者である Werner Dähn  、 Feng Liu に感謝いたします。Smart Data Integration に関する情報が必要な場合は、ソースとなった記事も参考にしてください。

 

Fumihisa Yagawa

Be the first to leave a comment
You must be Logged on to comment or reply to a post.