Chat now with support
Chat with Support

SharePlex 8.6.6 - 管理ガイド

このガイドについて このガイドで使用されている表記規則 SharePlex の概要 SharePlex の実行 複数の SharePlex インスタンスの実行 sp_ctrl でのコマンドの実行 SharePlex パラメータ 複製のための Oracle 環境の準備 設定ファイルの作成 オープンターゲットのターゲットへの複製の設定 複製方法の設定 分割レプリケーションの設定 名前付きキューの設定 変更履歴ターゲットを維持するための SharePlex の設定 Oracle DDL の複製 エラー処理のセットアップ データの変換 SharePlex セキュリティ機能の設定 実稼動環境での複製のアクティベート SharePlex の監視 複製上の問題の防止および解決方法 非同期データの修復 Oracle の高可用性を維持するための手順 アクティブな複製環境の変更 Oracle アプリケーションのパッチまたはアップグレードの適用 ソースまたはターゲット上の Oracle データのバックアップ Capture プロセスのチューニング Post プロセスのチューニング 付録 A:ピアトゥピアの説明図 付録 B:SharePlex 環境変数

JMS ターゲットへの複製の設定

オープンターゲットのターゲットへの複製の設定 > JMS ターゲットへの複製の設定

概要

SharePlex Post プロセスは、JMS(Java Messaging Service)キューまたはトピックに接続して書き込むことができます。データは、データ定義、操作タイプ、および変更された列の値を含む、XML レコードとして書き込まれます。このデータは、ソースで発生した順番で連続した一連の操作として書き込まれます。その後、ターゲットデータベースに順番に post することも、外部のプロセスやプログラムによって使用することもできます。

注: SharePlex を使用して JMS に複製する場合にサポートされているプラットフォーム、データ型、および操作については、『SharePlex リリースノート』を参照してください。

ソースでの SharePlex の設定

データを JMS に複製する場合は、次のように、ソースシステムでソースデータベースと SharePlex を設定します。

サプリメンタルロギングの有効化

ソースシステムで、Oracle ソースデータベース内の PK/UK サプリメンタルロギングを有効にします。ターゲットで適切なキーを構築するためには、SharePlex に Oracle キー情報が含まれている必要があります。

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE) COLUMNS;

SP_OCT_USE_SUPP_KEYS パラメータの設定

ソースシステムで、SP_OCT_USE_SUPP_KEYS パラメータの値に 1 を設定します。このパラメータは、行の更新 / 削除時に Oracle の補助ログが設定した列をキー列として使用する場合に使用します。補助ログとこのパラメータの両方が設定されている場合、常に SharePlex によってキーが構築され、その SharePlex キーが Oracle キーと一致することが保証されます。

このパラメータの詳細については、『SharePlex リファレンスガイド』を参照してください。

複製の設定

ソースで、キャプチャおよびルーティング情報を指定する SharePlex 設定ファイルを作成します。設定ファイル内で必要とされる構造は複製方法に応じて異なりますが、ここでは、JMS キューまたはトピックを介してデータをルーティングする場合に必要な構文を示します。

Datasource:o.SID
src_owner.table !jms[:tgt_owner.table] host

ここで、

  • SID は、ソース Oracle データベースの Oracle SID です。
  • src_owner.table は、ソーステーブルの所有者名およびテーブル名です。
  • !jms は、SharePlex が JMS に post することを示す必須キーワードです。
  • :tgt_owner.table はオプションであり、ターゲットテーブルの所有者と名前を指定します。使用するのは、いずれかのコンポーネントがソーステーブルのコンポーネントと異なる場合です。!jms:tgt_owner.table の間には、スペースを使用できません。大文字と小文字を正しく区別した名前を入力します。この名前は、"MySchema"."MyTable" のように二重引用符で囲みます。
  • host はターゲットシステムの名前です。

注: 詳細については、次を参照: 設定ファイルの作成

ソース設定の例

Datasource:o.ora112

MY_SCHEMA.MY_TABLE !jms:"MySchema2"."MyTable2" sysprod

ターゲットでの SharePlex の設定

一連の手順で、ターゲット上に Java プロバイダを設定し、SharePlex Post プロセスを設定して JMS 構造に接続します。SharePlex は、Active MQ および IBM MQ ターゲットをサポートしています。

Active MQ ターゲットでの SharePlex の設定

一連の手順で、SharePlex Post プロセスを設定して、Active MQ キューまたはトピックに post します。

  • Active MQ は必ずしも、SharePlex を実行しているマシンにインストールする必要はありません。ただし、一連の手順に従って、SharePlex のインストールディレクトリ内の場所に ActiveMQ jar ファイルをコピーする必要があります。
  • SharePlex は Java Runtime Engine(JRE)1.6向けにコンパイルされていますが、ActiveMQ 5.13 および 5.14 は JRE 1.7 を使用します。このため、一連の手順には、JRE 1.7 バイナリを指し示すソフトリンクの作成も含まれます。

この手順の例では、次のようなディレクトリの名前付け規則を使用します。

名前 ディレクトリ
SharePlex SharePlex インストールディレクトリ
amq SharePlex ディレクトリ内の Active MQ 用の作業ディレクトリ。

amq ターゲットへの post を設定するには

  1. SharePlex ターゲットサーバ上に JRE 1.7 をインストールして設定します。
  2. SharePlex/lib/providers の下に amq ディレクトリを作成します。

    shareplex/lib/providers/amq

  3. 次のプロバイダ JAR ファイルおよび HS 依存関係を amq ディレクトリにコピーします。

    shareplex/lib/providers/amq/activemq-all.jar

    shareplex/lib/providers/amq/slf4j.jar

  4. JRE 1.7 ホームディレクトリを指し示すために、JAVA_HOME および JRE_HOME 変数を設定します。
  5. 新しい JAVA_HOME を PATH 変数に追加します。
  6. SharePlex/.app-modules/openbridge ディレクトリの下に、JRE 1.7 バイナリを指し示すソフトリンクを作成します。

    1. SharePlex をシャットダウンします(実行中の場合)。
    2. ディレクトリを SharePlex/.app-modules/openbridge に変更します。
    3. 次のコマンドを発行します。

      MV jre/ jre1.6/

    4. JRE 1.7 を検索して、SharePlex/.app-modules/openbridge/jre へのシンボリックリンクを作成します。
    5. 次のコマンドを発行します。

      ln –s /home/xxx/java7/jre1.7.0_09 jre

      次に例を示します。

      hostname/home/xxx/prod80/.app-modules/openbridge> ls -ltr

      total 24

      drwxr-xr-x 2 xxx dba 4096 Jan 11 14:04 temp/

      drwxr-xr-x 8 xxx dba 4096 Jan 11 14:04 jre1.6/

      drwxr-xr-x 2 xxx dba 4096 Jan 11 14:05 plugins/

      drwxr-xr-x 2 xxx dba 4096 Jan 11 14:05 configuration/

      -r—1 xxx dba 160 Jan 11 14:05 bridge.ini

      -rwxr-xr-x 1 xxx dba 711 Jan 11 14:05 bridge*

      lrwxrwxrwx 1 xxx dba 31 May 10 15:08 jre -> /home/xxx/java7/jre1.7.0_09/

  7. producerFlowControl="true" のすべての値を "false" に設定します。このパラメータの補足説明については、次の URL を参照してください。http://activemq.apache.org/producer-flow-control.html
  8. sp_cop を開始します。(設定はまだアクティベートしないでください)
  9. sp_ctrl を実行します。
  10. target コマンドを発行して、JMS キューまたはトピックに post するように Post を設定します。次にコマンドの例を示します。

    コマンドの説明とオプションについては、「JMS 設定の表示および変更」を参照してください。

    JMS キューに post する場合

    sp_ctrl> target x.jmsset jms factory_class=org.apache.activemq.jndi.ActiveMQInitialContextFactory

    sp_ctrl> target x.jms set jms provider_url=tcp://w2k3-64bit:61616

    sp_ctrl> target x.jms set jms lib_location=shareplex/lib/providers/amq

    sp_ctrl> target x.jms set jms queuename=SHAREPLEX.Q1

    JMS トピックに post する場合

    sp_ctrl> target x.jmsset jms factory_class=org.apache.activemq.jndi.ActiveMQInitialContextFactory

    sp_ctrl> target x.jms set jms provider_url=tcp://w2k3-64bit:61616

    sp_ctrl> target x.jms set jms lib_location=shareplex/lib/providers/amq

    sp_ctrl> target x.jmsset jms destination=topic

    sp_ctrl> target x.jms set jms queuename=SHAREPLEX.Q1

IBM MQ ターゲットでの SharePlex の設定

一連の手順で、SharePlex Post プロセスを設定して、IBM MQ キューまたはトピックに post します。

この手順の例では、次のようなディレクトリの名前付け規則を使用します。

名前 ディレクトリ
MQClient IBM MQ クライアントインストールディレクトリ
SharePlex SharePlex インストールディレクトリ
ibmmq SharePlex ディレクトリ内の IBM MQ 用の作業ディレクトリ。

IBM MQ ターゲットへの post を設定するには

  1. データベースサーバか、SharePlex Post プロセスを実行する中間サーバで、最新バージョンのJava Runtime Engine(JRE)をインストールして設定します。
  2. JAVA_HOME および JRE_HOME 環境変数を適切なディレクトリに設定します。
  3. SharePlex オペレーティングシステムユーザープロファイルの一部として、JAVA_HOME および JRE_HOME パスを PATH 変数に追加します。
  4. データベースサーバか、SharePlex Post プロセスを実行する中間サーバで、MQClient ディレクトリに IBM MQ クライアントをインストールします。
  5. IBM MQ Explorer ユーティリティによって生成された .bindings ファイルを中間層サーバから SharePlex ターゲットサーバ上の MQClient/lib ディレクトリにコピーします。

    :Post プロセスは、このファイルを使用して、IBM MQ の中間層サーバに関する情報を取得します。

  6. IBM MQ 8.x を使用している場合、MQ 8.x ディストリビューションに同梱されている JRE へのソフトリンクを作成します(SharePlex に同梱されている JRE 1.6 は MQ 7.x との互換性はありますが、8.x との互換性はありません)。

    1. $ cd SharePlex/.app-modules/openbridge
    2. $ mv jre jre.old

    3. $ ln –s /MQClient/java/jre64/jre jre

  7. SharePlex/lib/providers ディレクトリ内に ibmmq ディレクトリを作成します。

  8. .bindings ファイルとすべての .jar ファイルを MQClient/java/lib ディレクトリから SharePlex/lib/providers/ibmmq ディレクトリにコピーします。

    $ cp MQClient/java/lib/.bindings SharePlex/lib/providers/ibmmq

    $ cp MQClient/java/lib/*.jar SharePlex/lib/providers/ibmmq

  9. 作成した ibmmq ディレクトリから MQClient/lib ディレクトリへのソフトリンクを作成します。

    $ cd SharePlex/lib/providers/ibmmq

    $ ln –sMQClient/libibmmq

  10. sp_cop を開始します。(設定はまだアクティベートしないでください)
  11. sp_ctrl を実行します。
  12. target コマンドを発行して、JMS キューまたはトピックに post するように Post を設定します。次にコマンドの例を示します。

    コマンドの説明と追加オプションについては、「JMS 設定の表示および変更」を参照してください。

    JMS キューに post する場合

    sp_ctrl> target x.jmsset jms factory_name=SharePlexQcf

    sp_ctrl> target x.jmsset jms lib_location=ibmmq

    sp_ctrl> target x.jms set jms provider_url=file:/MQClient/app/mqm83client/lib

    sp_ctrl> target x.jms set jms queuename=SHAREPLEX.Q1

    sp_ctrl> target x.jms set jms user=myusername

    sp_ctrl> target x.jms set jms password=mypassword

    JMS トピックに post する場合

    sp_ctrl> target x.jmsset jms factory_name=SharePlexQcf

    sp_ctrl> target x.jmsset jms lib_location=ibmmq

    sp_ctrl> target x.jms set jms provider_url=file:/MQClient/app/mqm83client/lib

    sp_ctrl> target x.jms set jms queuename=SHAREPLEX.T1

    sp_ctrl> target x.jms set jms destination=topic

    sp_ctrl> target x.jms set jms user=myusername

    sp_ctrl> target x.jms set jms password=mypassword

JMS 設定の表示および変更

JMS への出力について、現在のプロパティ設定を表示するには、次のコマンドを使用します。

target x.jms show

プロパティ設定を変更するには、次のコマンドを使用します。

target x.jms [queue queuename] set jms property=value

ここで、

  • queue queuename は Post キューの名前です。複数の Post プロセスが存在する場合は、このオプションを使用します。
  • property および value については、次の表に示します。

表 3: JMS ターゲットプロパティ

プロパティ 入力値 デフォルト

factory_class=factory_class

必須。ファクトリクラスの完全修飾クラス名。プロバイダの初期コンテキストファクトリのクラス名を指定するように JNDI 環境プロパティ java.naming.factory.initial を設定します。

なし

provider_url=url

必須。オブジェクト名コンポーネントなしの RMI URL。初期コンテキストとして使用されているレジストリの場所を指定するように JNDI 環境プロパティ java.naming.provider.url を設定します。

なし

lib_location=path

必須。JAR ファイルをインストールしたディレクトリへのパス。

なし

destination={queue | topic}

メッセージングドメイン。有効な値は queue(ポート - ポート)、または topic(発行元 - サブスクライバモデル)です。

queue

factory_name=factory_name

JNDI 接続ファクトリ参照の名前。コンマ区切りのリストで複数の名前を指定できます。例:(jndi.name1, jndi.name2)

なし

user=user

JMS にアタッチしているユーザーの名前。認証が必要ない場合は、これと password オプションを省略します。

なし

password=password

JMS ユーザーのパスワード。

なし

queuename=JMS_queuename

JMS キューまたはトピックの名前。

OpenTarget

persistent={yes | no}

yes の場合、送信操作の一部としてディスクストレージにメッセージを記録します。

no の場合、ログを記録しません。

yes
session_transacted ={yes | no}

no は、複製されたメッセージごとに JMS コミットを発行するように Post に指示し、各メッセージをすぐに認識して消費できるようにします。これがデフォルトです。

yes は、トランザクション方式で操作するように Post に指示します。このモードでは、Post は以下に基づく間隔で JMS コミットを発行(メッセージを認識して消費できるように)します。

  • データが Post キューから読み込み-解放される前にコミットを発行します。これは、SP_OPX_READRELEASE_INTERVAL パラメータの設定値で制御されます。
  • SP_OPX_READRELEASE_INTERVAL に到達するまで、JMS 書き込みごとにコミットを発行します。これは、SP_OPX_CHECKPOINT_FREQ パラメータの設定値で制御されます。
no
properties

使用している JMS プロバイダが SharePlex で提供されるデフォルトのプロパティが含まれるメッセージを消費できない場合に、このオプションを使用します。これでプロパティを削除または追加できます。プロパティはコンマ区切りリストで指定します。

  • プロパティを追加するには、name=value という形式で指定します。
  • SharePlex プロパティを削除するには、名前の先頭にダッシュを付けます。たとえば、次の文字列は 2 つの SharePlex プロパティを削除します。-JMSXDeliveryCount,-JMSXGroupSeq
なし
client_id 使用している JMS プロバイダがデフォルトの SharePlex クライアント ID が含まれるメッセージを消費できない場合に、このオプションを使用します。この値は、プロバイダが受け入れるクライアント ID に設定します。 なし
commit_frequency

JMS サーバへの post をトランザクション方式で実行するように Post が設定されるときに、このオプションを使用します(target コマンドの session_transacted プロパティでの指定に従って、各メッセージの後ではなく、一定の間隔で JMS コミットを発行します)。このパラメータは、JMS コミットの間隔を指定します。SP_OPX_READRELEASE_INTERVAL パラメータに関連して機能します。有効な値は、1 以上の正の整数です。

1500

回復オプションの設定

JMS プロセスが突然中止されたり、JMS プロセスが実行されているマシンが停止したりすると、JMS ターゲットに行変更が 2 回書き込まれることがあります。ユーザーは、重複を検出して破棄することにより、この動作を管理する必要があります。

トランザクション内の行の変更操作について、それぞれのレコードはすべて同じトランザクション ID を持ち、シーケンス ID でもマークされます。この属性はそれぞれ、XML 出力の txn 要素の下の id および msgIdx です(「XML について」を参照)。

トランザクション ID はトランザクションがコミットされた時点の SCN であり、シーケンス ID はトランザクション内の行変更のインデックスです。この 2 つの値は、回復時に JMS キューに再書き込みされた場合、同じであることが保証されます。

必要な場合、次のコマンドを使用して、行の変更レコードすべてに追加のメタデータを含めるようにターゲットを設定できます。

target target [queue queuename] set metadata property[, property]

表 4: オプションの JMS メタデータプロパティ

プロパティ 説明
time 操作がソースに適用された時刻。
userid 操作を実行したデータベースユーザーの ID。
trans 操作を追加したトランザクションの ID。
size トランザクション内の操作の数。

例:

target x.jms set metadata time, userid, trans, size

メタデータをリセットするには

target x.jms [queue queuename] reset metadata

メタデータを表示するには

target x.jms [queue queuename] show metadata

メモリ設定の操作

複数の名前付き Post キューを介して JMS に対する大量のトランザクションを処理するように Post を設定した場合、Post JMS ブリッジに追加のメモリの割り当てが必要になる可能性があります。デフォルト設定は、256 MB および 512 MB です。

JMS ブリッジのメモリを増やすには

openbridge.ini ファイルを開いて、次の形式でパラメータを設定します。

-Xms=512m

-Xmx=1024m

-XX:PermSize=512m

-XX:MaxPermSize=1024m

デバッグの設定

キューまたはトピックへの書き込みが成功または失敗のどちらであるかをロギングするように、Post を設定できます。これについては、デバッグ設定で制御します。

デバッグを有効にするには

openbridge.ini ファイルを開いて、-OB_debugToLog パラメータを true に設定します。

-OB_debugToLog=true

XML について

XML 形式は、簡単に消費できるように、操作とスキーマ「タイプ」に分割されます。これらは XSD の観点から見ると実際には同一であり、異なるタイプではありません。テンプレート XML は、可能なすべての属性と要素を表します。個々の XML は、サポートする操作ごとに最低限の出力を表します。

起動後、Post は、テーブルの変更レコードを初めて書き込むとき、まずそのテーブルのスキーマレコードを書き込みます。各スキーマレコードには、テーブル名と、各列の対象の詳細が含まれます。スキーマレコードは、そのスキーマに変更が発生しない限り、Post 実行中にテーブルごとに 1 回のみ書き込まれます。その後、新しいスキーマレコードが書き込まれます。Post が停止して起動した場合、Post が変更レコードを受信するとテーブルごとに 1 回、スキーマレコードが再び書き込まれます。

スキーマレコードテンプレート

<?xml version="1.0" encoding="UTF-8" ?>  
<?opentarget version="1.0" ?>  
<opentarget>  
    <txn  
        id="xs:integer"  
        oracleTxnId="xs:string"   
        commitTime="xs:dateTimeStamp" />  
    <tbl  
        name="xs:string"  
        utcOffset="xs:integer"
        <cmd ops="schema">  
            <schema>  
                <col  
                    name="xs:string"  
                    xmlType="xs:string"  
                    key="xs:boolean"  
                    nullable="xs:boolean"  
                    length="xs:integer"  
                  />  
            </schema>  
        </cmd>  
    </tbl>  
</opentarget>

表 5: スキーマテンプレートの説明(* = オプション)

要素 属性 説明

txn

 

トランザクションのメタデータ

 

id

現在のトランザクションの ID

 

oracleTxnId *

Oracle トランザクション ID

 

commitTime*

トランザクションのコミットのタイムスタンプ

tbl

 

テーブルのメタデータ

 

name

テーブルの完全修飾名

 

utcOffset

ログの UTC オフセット

cmd

 

操作のメタデータ(スキーマの場合は、操作なし)

 

ops

このテーブルに生成されるレコードのタイプ。スキーマの場合、値は schema

schema   列のメタデータ
col   列のメタデータ(これらのうち 1 つの要素がテーブルのレコードごとに出現)

 

name

列の名前

 

xmlType

XML データ型

 

key

キーフラグ(true、false)

 

nullable

Null 許容フラグ

 

length

列の長さ

操作レコードテンプレート

<?xml version="1.0" encoding="UTF-8" ?>
<?opentarget version="1.1" ?>
<opentarget>
    <txn
        id="xs:integer" 
        msgIdx="xs:integer" 
        msgTot="xs:integer" 
        oracleTxnId="xs:string"
        commitTime="xs:dateTimeStamp"
        userId="xs:string" />
    <tbl 
        name="xs:string"
        <cmd ops="xs:string">
            <row id="xs:string">
                <col name="xs:string"></col>
                <lkup>
                    <col name="xs:string"></col>
                </lkup>
            </row>
        </cmd>
    </tbl>
</opentarget>

表 6: 操作テンプレートの説明(* = オプション)

要素 属性 説明
txn   操作のトランザクションメタデータ
  id 現在のトランザクションの ID
  msgIdx トランザクションでの現在のレコードのインデックス
  msgTot* トランザクション内のメッセージの合計数
  oracleTxnId * Oracle トランザクション ID(System Change Number(SCN)から取得)
  commitTime* トランザクションのコミットのタイムスタンプ
  userId * 操作を実行したユーザー ID
tble   テーブルのメタデータ
  name 完全修飾テーブル名
cmd  

操作のメタデータ

  ops 操作のタイプ(挿入、更新、削除、切り詰め)
row   操作で変更した行のメタデータ
  id Oracle ROWID
col   列の変更データ(これらのうち 1 つの要素が操作の変更された列ごとに出現)
  name 列名と、その列の変更後の値
lkup   更新および削除操作で使用する前イメージ
col   列の前イメージ(これらのうち 1 つの要素が操作の変更された列ごとに出現)
  name 列名と、その列の前の値またはキー値(操作によって異なる)

注: id 属性と msgIdx 属性を組み合わせて、操作を一意に識別します。

サポートするデータ型

Oracle データ型を XML に変化する方法を示すチャートについて、『SharePlex リリースノート』を参照してください。

サンプル XML レコード

ソーステーブル

これは、サンプル操作が生成されるテーブルです。

SQL> desc products

Name

Null?

Type

PRODUCT_ID

NOT NULL

NUMBER

DESCRIPTION

 

VARCHAR2(600)

PRICE

 

NUMBER

ソース DML 操作
insert into products values (230117, ‘Hamsberry vintage tee, cherry’, 4099);
commit;
update products set price=3599 where product_id=230117 and price=4099;
commit;
delete products where product_id=230117;
commit;
truncate table products;
スキーマレコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218316945" commitTime="2014-10-10T13:18:43" userId="85" oracleTxnId="3.10.1339425" />
<tbl name="MFG.PRODUCTS" utcOffset="-5:00">
<cmd ops="schema">
<schema>
<col name="PRODUCT_ID" xmlType="decimal" key="true" nullable="false" length="22" />
<col name="DESCRIPTION" xmlType="string" key="false" nullable="true" length="600" />
<col name="PRICE" xmlType="decimal" key="false" nullable="true" length="22" />
</schema>
</cmd>
</tbl>
</opentarget>
挿入レコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218316945" msgIdx="1" msgTot="1" commitTime="2014-10-10T13:18:43" userId="85" oracleTxnId="3.10.1339425" />
<tbl name="MFG.PRODUCTS">
<cmd ops="ins">
<row id="AAAmDbAAEAAApRrAAA">
<col name="PRODUCT_ID">230117</col>
<col name="DESCRIPTION">Hamsberry vintage tee, cherry</col>
<col name="PRICE">4099</col>
</row>
</cmd>
</tbl>
</opentarget>
更新レコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218318728" msgIdx="1" msgTot="1" commitTime="2014-10-10T13:19:12" userId="85" oracleTxnId="1.17.970754" />
<tbl name="MFG.PRODUCTS">
<cmd ops="upd">
<row id="AAAmDbAAEAAApRrAAA">
<col name="PRICE">3599</col>
<lkup>
<col name="PRODUCT_ID">230117</col>
<col name="PRICE">4099</col>
</lkup>
</row>
</cmd>
</tbl>
</opentarget>
削除レコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218319446" msgIdx="1" msgTot="1" commitTime="2014-10-10T13:19:25" userId="85" oracleTxnId="5.23.1391276" />
<tbl name="MFG.PRODUCTS">
<cmd ops="del">
<row id="AAAmDbAAEAAApRrAAA">
<lkup>
<col name="PRODUCT_ID">230117</col>
</lkup>
</row>
</cmd>
</tbl>
</opentarget>
切り捨てレコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218319938" commitTime="1988-01-01T00:00:00" userId="85" oracleTxnId="11.4.939801" />
<tbl name="MFG.PRODUCTS">
<cmd ops="trunc" />
</tbl>
</opentarget>

Kafka ターゲットへの複製の設定

オープンターゲットのターゲットへの複製の設定 > Kafka ターゲットへの複製の設定

概要

SharePlex Post プロセスは、Kafka ブローカーに接続して書き込むことができます。データは、データ定義、操作タイプ、および変更された列の値を含む、XML レコードとして書き込まれます。このデータは、ソースで発生した順番で連続した一連の操作として書き込まれます。その後、ターゲットデータベースに順番に post することも、外部のプロセスやプログラムによって使用することもできます。

Kafka に post する場合のガイドライン

  • SharePlex Post プロセスは、Kafka プロデューサーとして機能します。SharePlex Post プロセスは、単一のブローカー内のデフォルトパーティンション 0 で単一のトピックに書き込みます。複数のトピックまたは複数のブローカーをサポートするには、名前付き Post キューを使用して、複数の Post プロセスを設定します。詳細については、「名前付き post キューの設定」を参照してください。
  • SharePlex Post プロセスは、トピックを作成しません。ユーザーが Kafka からトピックを作成する必要があります。
  • パフォーマンス上の理由で、Post はメッセージをまとめてバッチ処理してから Kafka ブローカーに送信します。バッチサイズを制御する調整用のパラメータが用意されています。このパラメータを使用して、パフォーマンスと遅延のバランスを取ることができます。

注: SharePlex を使用して Kafka に複製する場合にサポートされているプラットフォーム、データ型、および操作については、『SharePlex リリースノート』を参照してください。

ソースでの SharePlex の設定

データを Kafka に複製する場合は、次のように、ソースシステムでソースデータベースと SharePlex を設定します。

サプリメンタルロギングの有効化

ソースシステムで、Oracle ソースデータベース内の PK/UK サプリメンタルロギングを有効にします。ターゲットで適切なキーを構築するためには、SharePlex に Oracle キー情報が含まれている必要があります。

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE) COLUMNS;

SP_OCT_USE_SUPP_KEYS パラメータの設定

ソースシステムで、SP_OCT_USE_SUPP_KEYS パラメータの値に 1 を設定します。このパラメータは、行の更新 / 削除時に Oracle の補助ログが設定した列をキー列として使用する場合に使用します。補助ログとこのパラメータの両方が設定されている場合、常に SharePlex によってキーが構築され、その SharePlex キーが Oracle キーと一致することが保証されます。

このパラメータの詳細については、『SharePlex リファレンスガイド』を参照してください。

複製の設定

ソースで、キャプチャおよびルーティング情報を指定する SharePlex 設定ファイルを作成します。設定ファイル内で必要とされる構造は複製方法に応じて異なりますが、ここでは、データを Kafka にルーティングする場合に必要な構文を示します。

Datasource:o.SID
src_owner.table !kafka[:tgt_owner.table] host

ここで、

  • SID は、ソース Oracle データベースの Oracle SID です。
  • src_owner.table は、ソーステーブルの所有者名およびテーブル名です。
  • !kafka は、SharePlex が Kafka に post することを示す必須キーワードです。
  • :tgt_owner.table はオプションであり、ターゲットテーブルの所有者と名前を指定します。使用するのは、いずれかのコンポーネントがソーステーブルのコンポーネントと異なる場合です。!kafka:tgt_owner.table の間には、スペースを使用できません。大文字と小文字を正しく区別した名前を入力します。この名前は、"MySchema"."MyTable" のように二重引用符で囲みます。
  • host はターゲットシステムの名前です。

注: 詳細については、次を参照: 設定ファイルの作成

ソース設定の例

Datasource:o.ora112

MY_SCHEMA.MY_TABLE !kafka:"MySchema2"."MyTable2" sysprod

ターゲットでの SharePlex の設定

一連の手順で、SharePlex Post プロセスを設定して、Kafka に接続します。Kafka ブローカーを実行している必要があります。

Kafka への post を設定するには

  1. Kafka トピックを作成します。
  2. sp_cop を開始します。(設定はまだアクティベートしないでください)
  3. sp_ctrl を実行します。
  4. target コマンドを発行して、Kafka ブローカーおよびトピックへの post を設定します。次にコマンドの例を示します。

    sp_ctrl> target x.kafkaset kafka broker=localhost:9092

    sp_ctrl> target x.kafka set kafka topic=shareplex

    コマンドの説明とオプションについては、「Kafka 設定の表示および変更」を参照してください。

Kafka 設定の表示および変更

Kafka への出力について、現在のプロパティ設定を表示するには、次のコマンドを使用します。

target x.kafka show

プロパティ設定を変更するには、次のコマンドを使用します。

target x.kafka [queue queuename] set kafka property=value

ここで、

  • queue queuename は Post キューの名前です。複数の Post プロセスが存在する場合は、このオプションを使用します。
  • property および value については、次の表に示します。

表 7: Kafka ターゲットプロパティ

プロパティ 入力値 デフォルト
broker

必須。Kafka ブローカのホストおよびポート番号、または複数のブローカのコンマ区切りのリスト。このリストは、Kafka クラスタへのブートストラップです。Post は、これらのブローカのいずれかに接続できる限り、クラスタ内の他のブローカを検出します。

localhost:9092
compression.code オプション。Kafka でデータを圧縮するかどうかを制御します。オプションは、nonegzip、または snappy です。 なし
topic

必須。ターゲットの Kafka トピックの名前。

この文字列には、特殊なシーケンス %o または %t を含めることができます。%o シーケンスは、複製されるテーブルの所有者名で置き換えられます。%t シーケンスは、複製されるテーブルのテーブル名で置き換えられます。この機能は、true に設定した Kafka サーバ設定 auto.create.topics.enabled と一緒に使用できます。さらに、default.replication.factor および num.partitions のサーバ設定はトピックが自動作成されるときにデフォルトとして使用されるため、これらの設定も確認してください。

shareplex
client_id

オプション。呼び出しを追跡するために Post がリクエストごとに送信するユーザー定義の文字列。

なし
partition

オプション。以下のいずれかが必要です。

  • 固定パーティション番号:Post に対し、指定されたパーティション番号にのみメッセージを post するよう指示します。たとえば、0 に設定すると、Post はパーティション 0 にのみ post します。このオプションは、テストで使用する場合や、同じ Kafka トピックにデータを post するチャネルが複数ある場合に適しています。
  • キーワード rotate:Post に対し、ラウンドロビン方式でトピックのすべてのパーティションにメッセージを適用するよう指示します。新しいメッセージごとにパーティションが変更されます。たとえば、トピックに 3 つのパーティションがある場合、メッセージはパーティション 0、1、2、0、1、2 といった順に post されます。
  • キーワード rotate trans:これは rotate オプションと似ていますが、メッセージごとではなくトランザクションごとにパーティションが増分される点が異なります。たとえば、トピックに 3 つのパーティションがある場合、メッセージはコミットされるまではパーティション 0 に、次にコミットされるまではパーティション 1 に、順に post されます。このオプションは、複数のテーブルを単一のトピックに複製する場合に適しています。このオプションを使用すると、複数のパーティションにわたってデータを分散しながら、トランザクションのすべての操作を単一のパーティションで保持できます。このため、単一のパーティションから読み取るコンシューマが、完全なトランザクションのストリームを受け取ることができます。
なし
request.required.acks オプション。これは Kafka クライアントパラメータです。デフォルトでは、すべてを意味する値 -1 に設定されます。すべてが実際に意味するのは同期状態のすべてのレプリカであるため、この件については Kafka のドキュメントを参照してください。このパラメータを min.insync.replicas サーバパラメータと一緒に使用して、可用性とデータの一貫性に関して動作を調整できます。重要:これらの設定によっては、Kafka プロデューサ(この場合は SharePlex)と Kafka クラスタの間でデータが失われる可能性があります。 なし
threshold_size

オプション。Post が Kafka ブローカに送信するおおよそのネットワークパケットサイズ*(キロバイト単位)。

メモ

  • 最大パケットサイズは 128,000 KB です。
  • パケットサイズは概数です。
10000KB

* 遅延を避けるために、Post は、着信メッセージがそれ以上ないことを検出すると、しきい値が満たされるのを待たずに即座にパケットを Kafka に送信します。

回復オプションの設定

Kafka プロセスが突然中止されたり、Kafka プロセスが実行されているマシンが停止したりすると、Kafka トピックに行変更が 2 回書き込まれることがあります。ユーザーは、重複を検出して破棄することにより、この動作を管理する必要があります。

トランザクション内の行の変更操作について、それぞれのレコードはすべて同じトランザクション ID を持ち、シーケンス ID でもマークされます。この属性はそれぞれ、XML 出力の txn 要素の下の id および msgIdx です(「XML について」を参照)。

トランザクション ID はトランザクションがコミットされた時点の SCN であり、シーケンス ID はトランザクション内の行変更のインデックスです。この 2 つの値は、回復時に Kafka トピックに再書き込みされた場合、同じであることが保証されます。

必要な場合、次のコマンドを使用して、行の変更レコードすべてに追加のメタデータを含めるように Post を設定できます。

target x.kafka [queue queuename] set metadata property[, property]

表 8: オプションのメタデータプロパティ

プロパティ 説明
time 操作がソースに適用された時刻。
userid 操作を実行したデータベースユーザーの ID。
trans 操作を追加したトランザクションの ID。
size トランザクション内の操作の数。

例:

target x.kafka set metadata time, userid, trans, size

メタデータをリセットするには

target x.kafka [queue queuename] reset metadata

メタデータを表示するには

target x.kafka [queue queuename] show metadata

XML について

XML 形式は、簡単に消費できるように、操作とスキーマ「タイプ」に分割されます。これらは XSD の観点から見ると実際には同一であり、異なるタイプではありません。テンプレート XML は、可能なすべての属性と要素を表します。個々の XML は、サポートする操作ごとに最低限の出力を表します。

起動後、Post は、テーブルの変更レコードを初めて書き込むとき、まずそのテーブルのスキーマレコードを書き込みます。各スキーマレコードには、テーブル名と、各列の対象の詳細が含まれます。スキーマレコードは、そのスキーマに変更が発生しない限り、Post 実行中にテーブルごとに 1 回のみ書き込まれます。その後、新しいスキーマレコードが書き込まれます。Post が停止して起動した場合、Post が変更レコードを受信するとテーブルごとに 1 回、スキーマレコードが再び書き込まれます。

スキーマレコードテンプレート

<?xml version="1.0" encoding="UTF-8" ?>  
<?opentarget version="1.0" ?>  
<opentarget>  
    <txn  
        id="xs:integer"  
        oracleTxnId="xs:string"   
        commitTime="xs:dateTimeStamp" />  
    <tbl  
        name="xs:string"  
        utcOffset="xs:integer"
        <cmd ops="schema">  
            <schema>  
                <col  
                    name="xs:string"  
                    xmlType="xs:string"  
                    key="xs:boolean"  
                    nullable="xs:boolean"  
                    length="xs:integer"  
                  />  
            </schema>  
        </cmd>  
    </tbl>  
</opentarget>

表 9: スキーマテンプレートの説明(* = オプション)

要素 属性 説明

txn

 

トランザクションのメタデータ

 

id

現在のトランザクションの ID

 

oracleTxnId *

Oracle トランザクション ID

 

commitTime*

トランザクションのコミットのタイムスタンプ

tbl

 

テーブルのメタデータ

 

name

テーブルの完全修飾名

 

utcOffset

ログの UTC オフセット

cmd

 

操作のメタデータ(スキーマの場合は、操作なし)

 

ops

このテーブルに生成されるレコードのタイプ。スキーマの場合、値は schema

schema   列のメタデータ
col   列のメタデータ(これらのうち 1 つの要素がテーブルのレコードごとに出現)

 

name

列の名前

 

xmlType

XML データ型

 

key

キーフラグ(true、false)

 

nullable

Null 許容フラグ

 

length

列の長さ

操作レコードテンプレート

<?xml version="1.0" encoding="UTF-8" ?>
<?opentarget version="1.1" ?>
<opentarget>
    <txn
        id="xs:integer" 
        msgIdx="xs:integer" 
        msgTot="xs:integer" 
        oracleTxnId="xs:string"
        commitTime="xs:dateTimeStamp"
        userId="xs:string" />
    <tbl 
        name="xs:string"
        <cmd ops="xs:string">
            <row id="xs:string">
                <col name="xs:string"></col>
                <lkup>
                    <col name="xs:string"></col>
                </lkup>
            </row>
        </cmd>
    </tbl>
</opentarget>

表 10: 操作テンプレートの説明(* = オプション)

要素 属性 説明
txn   操作のトランザクションメタデータ
  id 現在のトランザクションの ID
  msgIdx トランザクションでの現在のレコードのインデックス
  msgTot* トランザクション内のメッセージの合計数
  oracleTxnId * Oracle トランザクション ID(System Change Number(SCN)から取得)
  commitTime* トランザクションのコミットのタイムスタンプ
  userId * 操作を実行したユーザー ID
tble   テーブルのメタデータ
  name 完全修飾テーブル名
cmd  

操作のメタデータ

  ops 操作のタイプ(挿入、更新、削除、切り詰め)
row   操作で変更した行のメタデータ
  id Oracle ROWID
col   列の変更データ(これらのうち 1 つの要素が操作の変更された列ごとに出現)
  name 列名と、その列の変更後の値
lkup   更新および削除操作で使用する前イメージ
col   列の前イメージ(これらのうち 1 つの要素が操作の変更された列ごとに出現)
  name 列名と、その列の前の値またはキー値(操作によって異なる)

注: id 属性と msgIdx 属性を組み合わせて、操作を一意に識別します。

サポートするデータ型

Oracle データ型を XML に変化する方法を示すチャートについて、『SharePlex リリースノート』を参照してください。

サンプル XML レコード

ソーステーブル

これは、サンプル操作が生成されるテーブルです。

SQL> desc products

Name

Null?

Type

PRODUCT_ID

NOT NULL

NUMBER

DESCRIPTION

 

VARCHAR2(600)

PRICE

 

NUMBER

ソース DML 操作
insert into products values (230117, ‘Hamsberry vintage tee, cherry’, 4099);
commit;
update products set price=3599 where product_id=230117 and price=4099;
commit;
delete products where product_id=230117;
commit;
truncate table products;
スキーマレコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218316945" commitTime="2014-10-10T13:18:43" userId="85" oracleTxnId="3.10.1339425" />
<tbl name="MFG.PRODUCTS" utcOffset="-5:00">
<cmd ops="schema">
<schema>
<col name="PRODUCT_ID" xmlType="decimal" key="true" nullable="false" length="22" />
<col name="DESCRIPTION" xmlType="string" key="false" nullable="true" length="600" />
<col name="PRICE" xmlType="decimal" key="false" nullable="true" length="22" />
</schema>
</cmd>
</tbl>
</opentarget>
挿入レコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218316945" msgIdx="1" msgTot="1" commitTime="2014-10-10T13:18:43" userId="85" oracleTxnId="3.10.1339425" />
<tbl name="MFG.PRODUCTS">
<cmd ops="ins">
<row id="AAAmDbAAEAAApRrAAA">
<col name="PRODUCT_ID">230117</col>
<col name="DESCRIPTION">Hamsberry vintage tee, cherry</col>
<col name="PRICE">4099</col>
</row>
</cmd>
</tbl>
</opentarget>
更新レコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218318728" msgIdx="1" msgTot="1" commitTime="2014-10-10T13:19:12" userId="85" oracleTxnId="1.17.970754" />
<tbl name="MFG.PRODUCTS">
<cmd ops="upd">
<row id="AAAmDbAAEAAApRrAAA">
<col name="PRICE">3599</col>
<lkup>
<col name="PRODUCT_ID">230117</col>
<col name="PRICE">4099</col>
</lkup>
</row>
</cmd>
</tbl>
</opentarget>
削除レコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218319446" msgIdx="1" msgTot="1" commitTime="2014-10-10T13:19:25" userId="85" oracleTxnId="5.23.1391276" />
<tbl name="MFG.PRODUCTS">
<cmd ops="del">
<row id="AAAmDbAAEAAApRrAAA">
<lkup>
<col name="PRODUCT_ID">230117</col>
</lkup>
</row>
</cmd>
</tbl>
</opentarget>
切り捨てレコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218319938" commitTime="1988-01-01T00:00:00" userId="85" oracleTxnId="11.4.939801" />
<tbl name="MFG.PRODUCTS">
<cmd ops="trunc" />
</tbl>
</opentarget>

SQL または XML ファイルのターゲットへの複製の設定

オープンターゲットのターゲットへの複製の設定 > SQL または XML ファイルのターゲットへの複製の設定

概要

SharePlex は、複製した Oracle データを SQL または XML 形式のファイルに post できます。このデータは、ソースで発生した順番で連続した一連の操作として書き込まれます。その後、ターゲットデータベースに順番に post することも、外部のプロセスやプログラムによって使用することもできます。

この章では、このターゲットに対する複製をサポートする、一連の設定プロセスを説明します。

注: SharePlex を使用して SQL または XML ファイルに複製する場合にサポートされているプラットフォーム、データ型、および操作については、『SharePlex リリースノート』を参照してください。

ソースでの SharePlex の設定

ソースで、キャプチャおよびルーティング情報を指定する SharePlex 設定ファイルを作成します。設定ファイル内で必要とされる構造は複製方法に応じて異なりますが、ここでは、データを SQL または XML ファイルにルーティングする場合に必要な構文を示します。

Datasource:o.SID
src_owner.table !file[:tgt_owner.table] host

ここで、

  • SID は、ソース Oracle データベースの Oracle SID です。
  • src_owner.table は、ソーステーブルの所有者名およびテーブル名です。

  • !file は、Post にファイルへの書き込みを指示する必須キーワードです。
  • tgt_owner.table はオプションであり、ターゲットテーブルの所有者と名前を指定します。使用するのは、いずれかのコンポーネントがソーステーブルのコンポーネントと異なる場合です。
  • host はターゲットシステムの名前です。

注: 詳細については、次を参照: 設定ファイルの作成

ソース設定の例

次の例では、スキーマ PROD 内の parts テーブルを Oracle インスタンス ora112 からターゲットシステム sysprod 上のファイルに複製しています。

Datasource:o.ora112

PROD.parts !file sysprod

ターゲットでの SharePlex の設定

データを XML 形式で出力するには

デフォルトでは、SharePlex が XML 形式でファイルに書き込むデータをフォーマット処理します。出力ファイルのプロパティを変更する必要がない限り、ユーザーがターゲットのセットアップを実行する必要はありません(「ターゲット設定の表示および変更」を参照)。

データを SQL 形式で出力するには

  1. sp_cop を開始します。
  2. sp_ctrl を起動します。
  3. 次の必須の target コマンドを発行して、SQL のレコードを出力します。注:すべて小文字を使用してください。 

    target x.file [queue queuename] set format record=sql

    target x.file [queuequeuename] set sql legacy=yes

    ここで、 queue queuename は、指定したキューと関連付けられている SharePlex Post プロセスに対するコマンドのアクションを制限します。

    これらの設定と、ユーザーが設定できるその他のオプションプロパティの説明については、「ターゲット設定の表示および変更」を参照してください。

ターゲット設定の表示および変更

ファイルへの出力について、現在のプロパティ設定を表示するには、次のコマンドを使用します。

target x.file show

設定を変更するには、次の target コマンドを使用します。

target x.file [queue queuename] set [category] property=value

target

SQL について

SQL 形式のファイル内のすべてのトランザクションの先頭には、SQL ファイル内のトランザクションシーケンスおよび一意のトランザクション ID を含むコメントがあります。SQL ファイルの最後にあるコメント行には、ファイル内の行数が示されます。たとえば、次に示しているのは、トランザクションが 1 つの SQL ファイルの例です。この例でのトランザクション ID は 2-113319 です。ファイルに含まれる行は 9 行です。

/installed/vardir> cat opx/0000000010_20140305140820_legacy.sql

-- 0000000001 2-113319 03052014140813 03052014140813

DELETE FROM "ROBIN"."TEST_TYPES" WHERE ORA_NUMBER = '22345' AND ROWNUM = 1;

INSERT INTO "ROBIN"."TEST_TYPES" (ORA_NUMBER, ORA_DATE, ORA_RAW, ORA_ROWID,

ORA_FLOAT, ORA_CHAR, ORA_VARCHAR2, ORA_TIMESTAMP, ORA_TIMESTAMP_TZ,

ORA_TIMESTAMP_LTZ) VALUES('22345', '08132066000000', '0123456789ABCDEF'

, 'AAAAAAAAAAAAAAAAAA', '12350', 'Character ', 'Variable data'

, '10201998021300.22000', '06172002080000.00000', '06172002160000.00000');

COMMIT;

-- EOF 0000000009

XML について

XML 形式は、簡単に消費できるように、操作とスキーマ「タイプ」に分割されます。これらは XSD の観点から見ると実際には同一であり、異なるタイプではありません。テンプレート XML は、可能なすべての属性と要素を表します。個々の XML は、サポートする操作ごとに最低限の出力を表します。

起動後、Post は、テーブルの変更レコードを初めて書き込むとき、まずそのテーブルのスキーマレコードを書き込みます。各スキーマレコードには、テーブル名と、各列の対象の詳細が含まれます。スキーマレコードは、そのスキーマに変更が発生しない限り、Post 実行中にテーブルごとに 1 回のみ書き込まれます。その後、新しいスキーマレコードが書き込まれます。Post が停止して起動した場合、Post が変更レコードを受信するとテーブルごとに 1 回、スキーマレコードが再び書き込まれます。

スキーマレコードテンプレート

<?xml version="1.0" encoding="UTF-8" ?>  
<?opentarget version="1.0" ?>  
<opentarget>  
    <txn  
        id="xs:integer"  
        oracleTxnId="xs:string"   
        commitTime="xs:dateTimeStamp" />  
    <tbl  
        name="xs:string"  
        utcOffset="xs:integer"
        <cmd ops="schema">  
            <schema>  
                <col  
                    name="xs:string"  
                    xmlType="xs:string"  
                    key="xs:boolean"  
                    nullable="xs:boolean"  
                    length="xs:integer"  
                  />  
            </schema>  
        </cmd>  
    </tbl>  
</opentarget>

表 11: スキーマテンプレートの説明(* = オプション)

要素 属性 説明

txn

 

トランザクションのメタデータ

 

id

現在のトランザクションの ID

 

oracleTxnId *

Oracle トランザクション ID

 

commitTime*

トランザクションのコミットのタイムスタンプ

tbl

 

テーブルのメタデータ

 

name

テーブルの完全修飾名

 

utcOffset

ログの UTC オフセット

cmd

 

操作のメタデータ(スキーマの場合は、操作なし)

 

ops

このテーブルに生成されるレコードのタイプ。スキーマの場合、値は schema

schema   列のメタデータ
col   列のメタデータ(これらのうち 1 つの要素がテーブルのレコードごとに出現)

 

name

列の名前

 

xmlType

XML データ型

 

key

キーフラグ(true、false)

 

nullable

Null 許容フラグ

 

length

列の長さ

操作レコードテンプレート

<?xml version="1.0" encoding="UTF-8" ?>
<?opentarget version="1.1" ?>
<opentarget>
    <txn
        id="xs:integer" 
        msgIdx="xs:integer" 
        msgTot="xs:integer" 
        oracleTxnId="xs:string"
        commitTime="xs:dateTimeStamp"
        userId="xs:string" />
    <tbl 
        name="xs:string"
        <cmd ops="xs:string">
            <row id="xs:string">
                <col name="xs:string"></col>
                <lkup>
                    <col name="xs:string"></col>
                </lkup>
            </row>
        </cmd>
    </tbl>
</opentarget>

表 12: 操作テンプレートの説明(* = オプション)

要素 属性 説明
txn   操作のトランザクションメタデータ
  id 現在のトランザクションの ID
  msgIdx トランザクションでの現在のレコードのインデックス
  msgTot* トランザクション内のメッセージの合計数
  oracleTxnId * Oracle トランザクション ID(System Change Number(SCN)から取得)
  commitTime* トランザクションのコミットのタイムスタンプ
  userId * 操作を実行したユーザー ID
tble   テーブルのメタデータ
  name 完全修飾テーブル名
cmd  

操作のメタデータ

  ops 操作のタイプ(挿入、更新、削除、切り詰め)
row   操作で変更した行のメタデータ
  id Oracle ROWID
col   列の変更データ(これらのうち 1 つの要素が操作の変更された列ごとに出現)
  name 列名と、その列の変更後の値
lkup   更新および削除操作で使用する前イメージ
col   列の前イメージ(これらのうち 1 つの要素が操作の変更された列ごとに出現)
  name 列名と、その列の前の値またはキー値(操作によって異なる)

注: id 属性と msgIdx 属性を組み合わせて、操作を一意に識別します。

サポートするデータ型

Oracle データ型を XML に変化する方法を示すチャートについて、『SharePlex リリースノート』を参照してください。

サンプル XML レコード

ソーステーブル

これは、サンプル操作が生成されるテーブルです。

SQL> desc products

Name

Null?

Type

PRODUCT_ID

NOT NULL

NUMBER

DESCRIPTION

 

VARCHAR2(600)

PRICE

 

NUMBER

ソース DML 操作
insert into products values (230117, ‘Hamsberry vintage tee, cherry’, 4099);
commit;
update products set price=3599 where product_id=230117 and price=4099;
commit;
delete products where product_id=230117;
commit;
truncate table products;
スキーマレコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218316945" commitTime="2014-10-10T13:18:43" userId="85" oracleTxnId="3.10.1339425" />
<tbl name="MFG.PRODUCTS" utcOffset="-5:00">
<cmd ops="schema">
<schema>
<col name="PRODUCT_ID" xmlType="decimal" key="true" nullable="false" length="22" />
<col name="DESCRIPTION" xmlType="string" key="false" nullable="true" length="600" />
<col name="PRICE" xmlType="decimal" key="false" nullable="true" length="22" />
</schema>
</cmd>
</tbl>
</opentarget>
挿入レコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218316945" msgIdx="1" msgTot="1" commitTime="2014-10-10T13:18:43" userId="85" oracleTxnId="3.10.1339425" />
<tbl name="MFG.PRODUCTS">
<cmd ops="ins">
<row id="AAAmDbAAEAAApRrAAA">
<col name="PRODUCT_ID">230117</col>
<col name="DESCRIPTION">Hamsberry vintage tee, cherry</col>
<col name="PRICE">4099</col>
</row>
</cmd>
</tbl>
</opentarget>
更新レコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218318728" msgIdx="1" msgTot="1" commitTime="2014-10-10T13:19:12" userId="85" oracleTxnId="1.17.970754" />
<tbl name="MFG.PRODUCTS">
<cmd ops="upd">
<row id="AAAmDbAAEAAApRrAAA">
<col name="PRICE">3599</col>
<lkup>
<col name="PRODUCT_ID">230117</col>
<col name="PRICE">4099</col>
</lkup>
</row>
</cmd>
</tbl>
</opentarget>
削除レコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218319446" msgIdx="1" msgTot="1" commitTime="2014-10-10T13:19:25" userId="85" oracleTxnId="5.23.1391276" />
<tbl name="MFG.PRODUCTS">
<cmd ops="del">
<row id="AAAmDbAAEAAApRrAAA">
<lkup>
<col name="PRODUCT_ID">230117</col>
</lkup>
</row>
</cmd>
</tbl>
</opentarget>
切り捨てレコード
<?xml version="1.0" encoding="UTF-8"?>
<?opentarget version="1.1"?>
<opentarget>
<txn id="2218319938" commitTime="1988-01-01T00:00:00" userId="85" oracleTxnId="11.4.939801" />
<tbl name="MFG.PRODUCTS">
<cmd ops="trunc" />
</tbl>
</opentarget>

ファイルストレージとエージング

Post は一連のファイルに書き込みます。アクティブな作業ファイルには、current_ というラベルが先頭に付加され、変数データディレクトリの opx/current サブディレクトリに保存されます。

出力形式 現在のファイルの名前
SQL

current_legacy.sql

XML

current_prodsys.XML

   

重要: current_ ファイルを開いたり、編集したりしないでください。

Post は、max_recordsmax_size、および max_time パラメータを使用して、新しいアクティブファイルを開始するポイントを決定します。この切り替えが起こると、Post は処理したデータを変数データディレクトリの opx サブディレクトリ内のシーケンスファイルに移動します。このファイル名には、Post キュー名、日時、および増分 ID が含まれています。

SQL ファイル:

/installed/vardir> ls -1 opx

0000000000_20140305130858_legacy.sql

0000000001_20140305131130_legacy.sql

0000000002_20140305131212_legacy.sql

0000000003_20140305133835_legacy.sql

0000000004_20140305134028_legacy.sql

XML ファイル:

/installed/vardir> ls -1 opx

0000000000_20140305130858_prodsys.XML

0000000001_20140305131130_prodsys.XML

0000000002_20140305131212_prodsys.XML

0000000003_20140305133835_prodsys.XML

0000000004_20140305134028_prodsys.XML

ファイル切り替えを強制的に適用するには

Post を停止しなければ、current ファイルは表示することも使用することもできません。current ファイル内のデータにアクセスするには、target コマンドを switch オプション付きで使用して、データをシーケンスファイルに移動します。これで、使用も表示も可能になります。このコマンドを発行した後に、Post が新しいレコードを処理してから、切り替えが起こります。

target x.file [queue queuename] switch

複製方法の設定

複製方法の設定

この章では、異なる複製目的をサポートするための SharePlex の設定手順について説明します。実稼働実装は、ソースとターゲットを 1 つずつ含む基本の設定から、名前付きキュー、複数のターゲット、分割データなどを含む SharePlex の複数のインスタンスまで、幅広い種類があります。

組織における SharePlex のすべての展開方法を予測してドキュメント化することは困難です。このドキュメントの目的は、基本的な展開タイプを設定するための手順をわかりやすく示して、ニーズに合わせて展開タイプを組み合わせて展開できるようにすることにあります。展開に関する追加のサポートは、当社のプロフェッショナルサービス組織から受けることができます。

コンテンツ
Related Documents

The document was helpful.

Select Rating

I easily found the information I needed.

Select Rating