このセクションでは、これまでに作成してアクティベートした設定を使用して、SharePlex 複製の速度と正確性を示します。テストを実行する前に、各システムで SQL*Plus を実行し、データベースに接続して、両方のデモンストレーションテーブルからすべての行を選択します。
これらのテーブルは、空でインストールされました。データが含まれている場合は、TRUNCATE を実行して新しい状態でデモンストレーションを開始できるようにします。
このテストで、複製が進行していることを検証します。
次のように入力して、ソーステーブル(splex.demo_src)にレコードを挿入してコミットします。
SharePlex は変更分を複製して、「ターゲット」テーブルへ post します。
次のクエリを入力して、「ターゲット」システムの splex.demo_dest テーブル内に現在新しいレコードがあることを確認します。
挿入した行がソーステーブルと同様にターゲット内にも現在存在することが表示されます。
このテストで、SharePlex が大量のデータを迅速で正確に複製することを確認します。
perf_mon.sh スクリプトを実行します。このスクリプトで、Post プロセスの速度を監視します。このスクリプトが実行されると、処理された操作数を判断するために Post プロセスがポーリングされます。指定された間隔で指定された回数だけこのポーリングが繰り返され、SharePlex がその間 post した秒当たりの INSERT、UPDATE、DELETE、COMMIT の数が計算されます。結果は画面に表示されます。以下は、UNIX、Linux、および Windows システムでの手順です。
UNIX および Linux システム
次の構文を使用して、SharePlex 製品ディレクトリの util サブディレクトリから perf_mon を実行します。ポーリングの頻度と間隔は、制御できます。
構文:
#_polls は Post プロセスをポーリングする回数です。
poll_interval は、ポーリング間の間隔です。
例:
この例では、60 秒間隔で Post プロセスが 10 回ポーリングされます。
Windows システムの場合
SharePlex 製品ディレクトリの bin サブディレクトリから、コマンドプロンプトで sp_perf_mon を実行します。次の構文を使用します。Windows システムでは、ポーリングは毎秒行われ、Ctrl + C コマンドで抹消するまで続きます。
port_number は、SharePlex のポート番号です。
例:
注:このスクリプトは、同じポートを使用する複数の post キューでは機能しません。
このテストで、ターゲットシステムが利用できないときにソースシステム上で複製するデータを SharePlex がキューに留める方法を示します。
「ターゲット」システムで SharePlex をシャットダウンし、このシステムが利用不能であることをシミュレートします。
ターゲットシステムは、SharePlex をシャットダウンすることで「利用不能」にされたので、そのシステム上でデータを受け取るための Import サービスが利用不能になり、レコードはソースシステム上の export キュー内に留められます。システム上のすべての SharePlex キューのステータスを表示する qstatus コマンドを発行して、このことを確認できます。
sp_ctrl(sysA)> qstatus
次の図 1 のような画面が、ソースシステムで qstatus を発行したときに表示されます。ソースシステム上に post キューがないことに注意してください。これは、このシステムがソースシステムとしてのみ使用されているからです。通常、この設定の post キューは別のシステム、つまりターゲットシステムにあります。ただし、設定が別のシステムでアクティブになっている場合は、このシステムもターゲットシステムとなることもあります。
図 2: ソースシステムで発行された qstatus コマンドの例。
注:SharePlex がターゲットシステムで実行されていないので、そのシステムの post キューは表示できません。通常の状況では、SharePlex が両方のシステムで実行されている場合、ターゲット上で sp_ctrl を実行する代わりに post キューを表示するには、「ソース」システムで [on host] オプション付きの qstatus コマンドを使用できます。(host をターゲットシステムの名前で置き換えます。)
sp_ctrl (sysA) > qstatus on host
このテストで、ターゲットシステムが再び使用可能になったときに停止ポイントから SharePlex が処理を再開する方法を示します。
すべての SharePlex プロセスが「ターゲット」システムで開始されたことを確認するために、status コマンドを発行します。
status コマンドにより、実行中のプロセスと発生したエラーを示して、SharePlex Status Database が要約されます。次の画面は典型的な status ウィンドウです。
図 3: ターゲットシステムで発行された status コマンドの例
status コマンドは、sp_ctrl 内で複製のステータスを表示できるいくつかのコマンドの 1 つです。エラーの説明も含めた詳細なステータス情報を表示するには、lstatus コマンドを使用できます。
SharePlex プロセスが開始されると、複製が再開されます。「ターゲット」システムで SQL*Plus を実行し、ソースシステム上でスクリプトによって挿入されたレコードが現在はターゲットデータベースに存在することを確認します。
SQL> select * from splex.demo_dest;
このテストで、プライマリインスタンスに対する割り込みの後に SharePlex がどのように回復するかを示します。
割り込みをシミュレートするために、「ソース」システムで Capture プロセスを停止します。
テスト 2 で作成したスクリプトを使用して、レコードを splex.demo_src へ INSERT および COMMIT します。
「ソース」システムで Capture プロセスを再開します。
Capture が開始されたことを確認するために、ソースシステムで SharePlex プロセスのステータスをチェックします。
「ターゲット」システムで SQL*Plus を実行し、ソースシステム上でスクリプトによって挿入されたすべてのレコードが現在はターゲットシステムに存在することを確認します。
このテストで、ソースおよびターゲットテーブルから 1 つのコマンドでデータを削除できるようにする TRUNCATE TABLE コマンドの複製を示します。
SQL*Plus で、「ソース」システム上の splex.demo_src に TRUNCATE TABLE コマンドを発行します。
ソースシステム上で直ちに qstatus コマンドを発行し、その後再び発行します。トランザクションがキューを通ってターゲットシステムへ移動していることがわかります。
「ターゲット」システム上で SQL*Plus を実行し、ターゲットテーブルの splex.demo_dest が空であることを確認します。
これがこのデモの最終テストです。sp_ctrl で compare コマンドを使ってソーステーブルとターゲットテーブルを比較して、同期を確認する方法を紹介します。次に同期されていない行を、repair コマンドを使って修復します。
表示されたキューが 0 になるまで、「ターゲット」システム上の sp_ctrl 内で qstatus コマンドを発行して、すべてのデータが splex.demo_dest へ post されたことを確認します。
ソースシステムの sp_ctrl 内で、compare コマンドを発行します。sp_ctrl(sysA)> compare splex.demo_src
「ソース」システム上で compare status コマンドを使い、比較結果を表示します。非同期の列がないことが示されます。
「ターゲット」システムで、splex.demo_dest 内の NAME 列の値を変更するために、行のいくつかに対して UPDATE コマンドを発行します。これが、ソースおよびターゲットテーブルが非同期になる原因となります。
ソースシステムで compare コマンドを再度発行します。これは、splex.demo_dest 内の行を、splex.demo_src内の行と比較します。
同期化されていない行を修復するには、repair コマンドを発行します。
修復を確認するには、ソースシステムで repair status コマンドを発行します。ステータスに、テーブルが修復されたことが表示されます。
修復が正確だったことを確認するには、両テーブル内のすべての行を表示する SELECT 文を使用して、ソースおよびターゲットテーブルを手動で比較できます。
ヒント:SharePlex には、設定内のすべてのソーステーブルをターゲットテーブルと比較する compare using コマンドも用意されています。
これで、基本 SharePlex デモンストレーションを終了します。
この章では、選択した SharePlex の機能を示します。この演習を UNIX、Linux、および Windows システムで実行すると、以下の機能を示すことができます。
重要!これらのデモンストレーションは、SharePlex を紹介するためのデモ用途向けに作成されています。実際の稼動環境への展開や複製確立の基盤としての使用は行わないでください。複製を適切に実装するには、『SharePlex 管理者ガイド』を使用してください。これらのデモンストレーションは、このマニュアルに出てくる順序で実行することをお勧めします。
ヒント:デモンストレーションで使用するコマンドについては、『SharePlex リファレンスマニュアル』で説明しています。
SharePlex にはいくつかの SQL スクリプトが用意されており、その中には、この章で説明するデモンストレーションに必要なすべてのオブジェクトをインストールする p2p.sql と od.sql もあります。このようなスクリプトは、SharePlex 製品ディレクトリの util サブディレクトリにあります。デモンストレーションに使用するソースおよびターゲットシステムで、これらのスクリプトを実行します。DBA ロールと SELECT ANY TABLE 特権を持つ既存ユーザーとして、SQL*Plus でスクリプトを実行します。
次の項目を指定するように、プロンプトが表示されます。
od_employee | ||
---|---|---|
名前 ---------------------------- |
Null? --------------- |
タイプ ------------- |
EMP_NO | NOT NULL | NUMBER |
EMP_FIRST_NAME | VARCHAR2 | |
EMP_LAST_NAME | VARCHAR2 | |
EMP_DOB | DATE | |
EMP_DEPT_NO | NUMBER | |
EMP_TIMESTAMP | DATE |
od_timesheet | ||
---|---|---|
名前 ---------------------------- |
Null? --------------- |
タイプ ------------- |
TS_EMP_NO | NUMBER | |
TS_IN_TIME | DATE | |
TS_OUT_TIME | DATE | |
TS_MOD_TIME | DATE |
od_department | ||
---|---|---|
名前 --------------------------- |
Null? --------------- |
タイプ ------------- |
DEPT_NO | NOT NULL | NUMBER |
DEPT_NAME | VARCHAR2 | |
DEPT_CODE | VARCHAR2 |
od_salary | ||
---|---|---|
名前 --------------------------- |
Null? --------------- |
タイプ ------------- |
SALE_EMP_NO | NUMBER | |
SAL_VALUE | NUMBER | |
SAL_CHANGED | DATE |
od_sales_emp_data | ||
---|---|---|
名前 ------------------------------ |
Null? --------------- |
タイプ ------------- |
EMP_NO_KEY | NOT NULL | NUMBER |
EMPLOYEE_NAME | VARCHAR2 (70) | |
SALARY | NUMBER | |
DEPARTMENT | VARCHAR2 (50) |
oxc_table | ||
---|---|---|
名前 ----------------------------- |
Null? -------------- |
タイプ ------------- |
EXC_NO | NOT NULL | NUMBER |
EXC_TYPE | VARCHAR2 (6) | |
EXC_TARGET_TABLE | VARCHAR2 (66) | |
EXC_FIXED | VARCHAR2 (3) | |
EXC_INFO | VARCHAR2 (500) | |
EXC_TIMESTAMP | DATE |
このデモンストレーションは、compare コマンドを利用して、パフォーマンスに関する簡単なデモを行います。
以下は、UNIX、Linux、および Windows システムで SharePlex を起動するための手順です。ソースおよびターゲットシステムで Shareplex を起動します。
UNIX システムと Linux システム
SharePlex の管理者(SharePlex Admin グループのメンバ)としてシステムにログオンします。
SharePlex 製品ディレクトリ(バイナリを含むディレクトリで、以下の構文では productdir 変数で表記)の bin サブディレクトリから、sp_cop および sp_ctrl を実行します。
Windows システムの場合
sp_ctrl 内で、ソースシステムの od_department、od_salary、od_timesheet、および od_employee テーブルをターゲットシステムの同じテーブルへ複製する、od.config という名前の複製用設定を作成します。
この設定を作成するために、sp_ctrl 内の create config コマンドを使用します。このコマンドで、SharePlex のデフォルトのテキストエディタ、つまり UNIX および Linux の場合は vi、Windows の場合はワードパッド内に新しいファイルが開かれます。
テキストエディタ内で編集コマンドを使用し、以下のテンプレート 1 に従って設定を作成して、次のように置き換えます。
列内のキャラクタ間にスペースを入れないでください。列と列の間は 2 つ以上のスペースまたはタブで区切ります。
テンプレート 1:デモンストレーション設定「od.config」
datasource:o.source_SID |
| |
owner.od_department | owner.od_department | target_host@o.target_SID |
owner.od_salary | owner.od_salary | target_host@o.target_SID |
owner.od_timesheet | owner.od_timesheet | target_host@o.target_SID |
owner.od_employee | owner.od_employee | target_host@o.target_SID |
設定のエントリの作成を終了したら、:wq コマンド(vi)またはFile > Save(ワードパッド)を使用してファイルを保存します。SharePlex により、ファイルが config サブディレクトリに自動的に保存されます。
重要!別のデモンストレーションにも必要なので、この設定をシステムに保管しておきます。
設定をアクティベートするには、sp_ctrl の activate コマンドを使用します。このコマンドは設定をアクティベートする前に、データベース ORACLE_SID およびソースシステムを使ってオブジェクト名を検証します。
ターゲットシステムの od_salary テーブルには、ON DELETE CASCADE 制約が含まれています。制約の名前は od_sal_emp_no_fk です。ターゲットテーブルの制約を無効にするか、カスケード削除を処理するように SharePlex を設定できます(Post が ON DELETE CASCADE 依存性を検出し、複製されたカスケード削除の子テーブルへの post を抑止します)。
制約を処理するように SharePlex を設定するには
以下のパラメータを設定します。
SQL*Plus を使用して制約を無効にするには
SQL> alter table od_salary disable constraint od_sal_emp_no_fk;
ターゲットシステムの od_timesheet テーブルにも、トリガが含まれています。トリガの名前は od_timesheet_mod です。ターゲットテーブルのトリガが原因で SharePlex が非同期エラーを返すので、「ターゲット」テーブルでのみ、このトリガを無効にします。
SQL> alter trigger od_timesheet_mod disable;
sp_ctrl 内で、od.config 設定のために activate config コマンドを発行します。
sp_ctrl(sysA)> activate config od.config
これで、compare コマンドを示します。このコマンドは、ソースおよびターゲットテーブルを比較して、それらの同期化を確認します。同期化されていない行が見つかった場合は、repair コマンドで再同期できます。
デモンストレーションオブジェクトをインストールしたスキーマ内にインストールされた od_add_emps プロシージャを実行することで、ソースシステム上の od_employee および od_salary テーブルにデータを投入します。このプロシージャには、部門(department)へ挿入する従業員(employee)数を指定する IN パラメータが 1 つあります。デフォルトの部門数は 5 です。100 の IN パラメータを使用して 500 の新規従業員を od_employee テーブル内に、500 のエントリを od_salary テーブル内に作成します。
「ソース」システム上の sp_ctrl 内で、od_employee テーブルに対して 1 回、od_salary テーブルに対して 1 回、compare コマンドを発行します。テーブルの所有者、ターゲットシステムの名前、ターゲットの ORACLE_SID で、以下の構文内の適切な変数を置き換えます。
「ソース」システムの sp_ctrl 内で、compare status コマンドを発行します。これで、比較の進捗状態が表示されます。両方の compare プロセスが終了するまで、このコマンドを発行し続けます。
「ソース」システム上で compare status コマンドを発行して、比較結果を表示します。
結果には、同期されていない行がないことが表示されます。
「ターゲット」システムの od_employee から、行をいくつか削除します。これで、そのテーブルとソーステーブルが同期しないようになります。
ソースシステム上で、od_employee テーブルに対して再度 repair コマンドを発行します。これで、非同期状態が修復されました。
sp_ctrl(sysA)> repair source_owner.od_employee
ソースシステムで repair status コマンドを発行します。repair コマンドが欠けている行をターゲットの od_employee テーブルに追加したので、非同期行がないことが表示されます。
sp_ctrl(sysA)> repair status
このデモンストレーションで、SharePlex 複製のパフォーマンス統計を表示できるようになります。
perf_mon.sh スクリプトを実行します。このスクリプトで、Post プロセスの速度を監視します。このスクリプトが実行されると、処理された操作数を判断するために Post プロセスがポーリングされます。指定された間隔で指定された回数だけこのポーリングが繰り返され、SharePlex がその間 post した秒当たりの INSERT、UPDATE、DELETE、COMMIT の数が計算されます。結果は画面に表示されます。以下は、UNIX、Linux、および Windows システムでの手順です。
UNIX システムと Linux システム
次の構文を使用して、SharePlex 製品ディレクトリの util サブディレクトリから perf_mon を実行します。ポーリングの頻度と間隔は、制御できます。
構文:
#_polls は Post プロセスをポーリングする回数です。
poll_interval は、ポーリング間の間隔です。
例:
perf_mon.sh 10 5
この例では、5 秒間隔で Post プロセスが 10 回ポーリングされます。
Windows システムの場合
SharePlex 製品ディレクトリの bin サブディレクトリから、コマンドプロンプトで sp_perf_mon を実行します。次の構文を使用します。Windows システムでは、ポーリングは毎秒行われ、Ctrl + C コマンドで抹消するまで続きます。
port_number は、SharePlex のポート番号です。
例:
注:このスクリプトは、同じポートを使用する複数の post キューでは機能しません。
© 2021 Quest Software Inc. ALL RIGHTS RESERVED. Feedback Terms of Use Privacy