注意: 先に進む前に、SharePlexのデモオブジェクトがインストールされていることを確認します。「デモのための事前の作業ページを参照してください。
このデモでは、レプリケーションのコンフリクトを解決するために一般的なコンフリクト解決手順を使用するようSharePlexを設定します。汎用コンフリクト解決では、1つのPL/SQLプロシージャを使用して複数のテーブルのコンフリクトを解決できます。
以下のようなコンフリクト解決戦略のデモが行われます。
重要! ピアツーピアレプリケーションは、すべてのビジネスアプリケーションに対応しているわけではありません。環境に適している場合、カスタムのコンフリクト解決手順を作成するなど慎重な分析と実行が必要です。一般的に、それらはこのデモの手順よりも複雑です。このデモは、本番環境でのピアツーピア展開を行う根拠として使用しないでください。ピアツーピアレプリケーションの詳細については、『SharePlex管理ガイド』を参照してください。
注意: このデモでは、デモオブジェクトがdemoというスキーマにあることを前提としています。異なる場合は、実際のスキーマで置き換えてください。
両方のシステム(両方のデータベース)で以下の手順を実行します。
SharePlexをシャットダウンします。
sp_ctrl(peer1)> shutdown
デモオブジェクトを所有するユーザに、SharePlexの初回インストール時にSharePlexスキーマにインストールされたsp_crパッケージを実行するシステム特権を付与します。
SQL>grant execute on sp_cr to user_name
SharePlex製品ディレクトリのutilサブディレクトリからp2p.sqlスクリプトを実行します。これにより、od_employee_genデモのコンフリクト解決ルーチンがインストールされます。
以下のプロンプトが表示されます。
以下の手順でSharePlexを設定します。
各システムで、conflict_resolution.SIDファイル(ここで、SIDはローカルデータベースのORACLE_SID)をテキストエディタで使用します。このファイルの保存場所は、SharePlex変数データディレクトリのdataサブディレクトリです。
注意: Postは、レプリケーションの競合が発生したときにこのファイルをチェックし、呼び出すべき解決プロシージャがあるかどうかを判断します。
各システムで、conflict_resolution.SIDファイルに以下のエントリを作成します。各列を少なくとも数個のスペースかタブ文字で区切ります。
demo.od_employee | IUD | demo.od_employee_gen |
注意: 最初のコンポーネントはテーブルで、2番目はそのテーブルで競合が発生した場合に解決ルーチンが呼び出される操作タイプを指定し、3番目は使用される解決ルーチンの名前です。
peer1(信頼できるソース)に、peer2上のod_employeeテーブルにod_employeeテーブルを複製するod_peer1という名前の設定ファイルを作成します。
sp_ctrl(peer1)> create config od_peer1
demo.od_employee | demo.od_employee | peer2@o.SID |
peer2(2番目のソース)に、peer1上のod_employeeテーブルにod_employeeテーブルを複製するod_peer2という名前の設定ファイルを作成します。
sp_ctrl(peer2)> create config od_peer2
demo.od_employee | demo.od_employee | peer1@o.SID |
注意: すべての列が同一である場合に、postが同期が取れていない挿入を検出できるようにするために、SP_OPO_SUPPRESSED_OOSを0に設定します。sp_ctrl:set paramSP_OPO_SUPPRESSED_OOS0からこのコマンドを発行し、list param modifiedコマンドを使用してこのパラメーターが設定されていることを確認します。
以下の手順を実行して、レプリケーションをアクティベーションして開始します。
peer1でod_peer1の設定をアクティベーションします。
peer2でod_peer2の設定をアクティベーションします。
各システムで、設定が正常にアクティベーションされたことを確認します。「File Name(ファイル名)」の下に「od_peer1」または「od_peer2」(システムにより異なる)という名前が表示され、「State(状態)」の下に「Active」と表示されます。
sp_ctrl(source)>list config
このデモでは、peer1で発生したINSERTで、peer2から複製された競合するINSERTが上書きされます。
peer2でod_employeeに行を挿入しますが、COMMITは発行しません。
SQL (peer2) > INSERT INTO OD_EMPLOYEE VALUES (1,'John','Doe',to_date('04/01/1949','MM/DD/RRRR'),1,to_date('01/01/2017','MM/DD/RRRR'));
peer1で同じ行(同じ値)を挿入しますが、COMMITは発行しません。
SQL (peer1) > INSERT INTO OD_EMPLOYEE VALUES (1,'John','Doe',to_date('04/01/1949','MM/DD/RRRR'),1,to_date('01/01/2017','MM/DD/RRRR'));
このデモでは、コンフリクトがある場合、最後に更新された行が優先されます。
注意: タイムスタンプの優先度を機能させるためには、EMP_TIMESTAMPフィールドおよび他の列をNULLでない値に変更しなければなりません。UPDATE文のtimestamp列が更新されていないか、NULL値に変更されている場合、ストアドプロシージャは競合を解決できません。同期外れの問題が発生します。
peer1で、od_employeeテーブルのEMP_FIRST_NAMEとEMP_TIMESTAMP列を以下のようにUPDATEします。
SQL (peer1) > UPDATE OD_EMPLOYEE SET EMP_FIRST_NAME = 'James', EMP_TIMESTAMP = to_date('01/01/2017','MM/DD/RRRR') WHERE EMP_NO = 1;
peer2で、異なる更新値を使用して同じ列をUPDATEします。ただし、キー値は同じにします。
SQL (peer2) > UPDATE OD_EMPLOYEE SET EMP_FIRST_NAME = 'Harry', EMP_TIMESTAMP = to_date('02/02/2017','MM/DD/RRRR') WHERE EMP_NO = 1;
両方のシステムで、同時にCOMMITを発行します。
両方のシステムで、Postキューを表示して、更新操作がキューに入っていることを確認します。それぞれのキューにメッセージが表示されます。
sp_ctrl(peer1)>qstatus
sp_ctrl(peer2)>qstatus
exc_tableという名前のテーブルが、デモオブジェクトのインストール時に指定したスキーマにインストールされました。SQL*Plusを使って、それぞれのコンフリクトに関する情報を見ることができます。以下はテーブルの説明です。
列 | 説明 |
---|---|
EXC_NO | コンフリクトの例外番号。 |
EXC_TYPE | SQL 文の種類。INSERT、UPDATE、DELETE のいずれか。 |
EXC_TARGET_TABLE | コンフリクトが発生したテーブル。 |
EXC_FIXED |
コンフリクト解決ルーチンの結果。YESは、ルーチンが成功したことを意味します。NOは、ルーチンが失敗し、行を手動で正しい値に変更する必要があることを意味します。 |
EXC_INFO | コンフリクトの原因。 |
EXC_TIMESTAMP | このマシンでコンフリクトが発生した時間。 |
このデモでは、SharePlexのインストール時に有効化されるデフォルトのDDLレプリケーションサポートを示します。必要に応じて、パラメーターを使用して他のDDLレプリケーションを有効にすることができます。
注意: このデモはOracleソースとターゲットのみをサポートしています。
ソースで、SP_OCT_REPLICATE_DDLパラメーターがデフォルトの3に設定されていることを確認します。このパラメーターは基本的なDDLレプリケーションを制御します。
sp_ctrl(source)>list param modified capture
SP_OCT_REPLICATE_DDLパラメーターは出力にリストされません。リストされている場合は、次のコマンドを発行します。
sp_ctrl(source)>reset param SP_OCT_REPLICATE_DDL
DDLレプリケーションをテストするには、以下の手順を実行します。
ソース上でsplex.demo_srcをTRUNCATEして空にします。
SQL> truncate table splex.demo_src;
SharePlexはTRUNCATEコマンドをターゲットに複製します。
ソース上でsplex.demo_srcに列を追加します。
SQL> alter table splex.demo_src add (department varchar2(30) not null default 'unknown');
ターゲット上でsplex.demo_destテーブルを記述します。
SQL> describe splex.demo_src;
テーブルには、新しいdepartment列を含む4つの列が含まれています。
ソース上で、department列を削除します。
SQL> alter table splex.demo_src drop column department;
ターゲット上でsplex.demo_destテーブルを記述します。
SQL> describe splex.demo_src;
これでテーブルには元の3列だけが含まれるようになります。
データベース・セットアップ・ユーティリティは、SharePlex接続を許可し、レプリケーションをサポートする必要なデータベースコンポーネントを確立するために、ソースまたはターゲットデータベースを自動的に設定します。
ターゲットHANAシステムでHANAのデータベース・セットアップ・ユーティリティ(hana_setup)を実行し、SharePlexで使用するユーザアカウント、スキーマ、テーブルを確立します。
サポート対象プラットフォーム上のHANA
HANAへの接続方法としてサポートされているのは接続文字列のみです。DSNを介した接続はサポートされていません。
セットアップユーティリティは、データベース上で動作し、SharePlexデータベースアカウントを作成するうえで必要な権限をSharePlexに付与するために、HANA管理者として実行する必要があります。
SharePlexの製品ディレクトリのbinサブディレクトリからhana_setupプログラムを実行します。
重要!SharePlexインスタンスをデフォルトの2100以外のポートにインストールした場合は、-pオプションを使用してポート番号を指定します。例えば、以下のコマンドではポート番号は9400です。
$ /users/splex/bin> hana_setup -p9400 |
表5: セットアップのプロンプトと対応
プロンプト | 対応 |
---|---|
Enter the HANA connection string [] : |
HANAデータベースシステムに接続する接続文字列を入力します。HANAに接続するためにSharePlexが接続文字列に必要なコンポーネントは以下の通りです。
例: SERVERNODE=server1.dept.abc.corp:30015;DRIVER=/usr/sap/hdbclient/libodbcHDB.so;CHAR_AS_UTF8=1 ユーザ、パスワード、およびデフォルトのデータベースは、セットアップユーティリティによって尋ねられるため指定する必要はありません。 |
Enter the HANA Administrator name : |
HANA管理者の名前を入力します。このユーザはSharePlexアカウントで作業を行います。 |
Enter the password for the Administrator account : |
管理者のパスワードを入力します。 |
Enter the name of the database : |
SharePlexで使用するテーブルやその他のオブジェクトを格納するデータベースの名前を入力します。新規または既存のデータベース名を入力できます。 |
Database name database does not exist. Would you like to create it? [y] : |
このプロンプトが表示される場合、指定されたデータベースは存在しません。Enterキーを押し、セットアップユーティリティで作成します。 |
Would you like to create a new SharePlex user [y]: |
Enterキーを押してデフォルトを受け入れ、指定したデータベースに新しいSharePlexデータベース・ユーザ・アカウントを作成するか、「n」と入力して既存のSharePlexアカウントを使用します。 |
Enter the name of the new SharePlex user: Enter the name of the existing SharePlex user: |
新規ユーザを作成するか、既存のユーザを使用するかによって、これらのプロンプトのいずれかが表示されます。SharePlexユーザの名前を入力します。
|
Enter the password of the SharePlex user : |
SharePlexユーザアカウントのパスワードを入力します。 |
Re-enter the password for the SharePlex user : |
このプロンプトは、新規ユーザを作成した場合にのみ表示されます。SharePlexのパスワードを再度入力します。 |
正常にセットアップされると、次のようなメッセージで終了します:
Completed SharePlex for HANA database configuration
SharePlex User name: splex
Database name: ndb5
Target specification in SharePlex configuration: r.ndb5
HANAターゲットへのSharePlexのレプリケーションを開始する前に、以下の権限をそのターゲットのSharePlexデータベースユーザ(SP_USERはSharePlexデータベースユーザの名前)に付与します。
さらに、レプリケートするオブジェクトを含む各スキーマの所有者としてログインし、そのスキーマで以下のように付与します。
© ALL RIGHTS RESERVED. 利用規約 プライバシー Cookie Preference Center