35 OCI XStream関数

この章では、OCIのXStream関数について説明します。

行論理変更レコード(LCR)は、各行の変更をカプセル化するのに使用されます。これには、スキーマ名、表名、DML操作および列値があります。更新操作の場合、列の前後両方の値が対象となります。列データは、表35-3の「プログラム変数」列で指定したフォーマットです。文字列は、クライアントの文字セットに変換されます。

DDL LCRは、各DDLの変更をカプセル化するのに使用されます。これには、オブジェクト名、DDLテキストおよびDDLコマンド(たとえば、ALTER TABLETRUNCATE TABLEなど)があります。DDLコマンド・コードのリストは、表A-1を参照してください。

関連項目:

NLS設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください

XStreamサンプル・プログラムは$ORACLE_HOME/demoディレクトリのxstream/oci内にあります。

各LCRにはトランザクションIDと位置もあります。Oracle Database外で取得されたトランザクションの場合、ストリーム内の各LCRの位置が確実に増加している場合、バイト互換性のあるRAW配列はすべてLCR位置として使用できます。

この章は、次の項目で構成されています。

35.1 XStreamインタフェースの使用について

Oracle Database 11gリリース2より、Oracle Streamsで、高パフォーマンスな、Oracle DatabaseとOracle以外のデータベース、非RDBMS Oracle製品、ファイル・システム、サード・パーティ・ソフトウェア製品などと間のほぼリアルタイムの情報共有インフラストラクチャを実現する、eXtended Streams (XStream) OutとXStream Inと呼ばれる拡張APIが提供されるようになりました。

XStreamは、Streamsインフラストラクチャ上に構築されます。

この項には次のトピックが含まれます:

関連項目:

OCI XStream関数

35.1.1 XStream Out

XStream Outは、リモート・クライアントのアウトバウンド・サーバーへの連結(Streams適用プロセス)、および論理変更レコード(LCR)形式での行変更の抽出を可能にします。

XStream Outを使用するには、他のStreams設定と同様、取得プロセスおよび適用プロセスを作成する必要があります。LOB、LONGおよびXMLTypeなど、Oracle Streamsでサポートされるすべてのデータ型がXStreamでサポートされます。そのような適用プロセスはアウトバウンド・サーバーと呼ばれます。取得およびアウトバウンド・サーバーは、同一のデータベース・インスタンス上にある場合とない場合があります。取得およびアウトバウンド・サーバーの開始後、行変更が取得され、アウトバウンド・サーバーに送信されます。外部クライアントは、OCIを使用してこのアウトバウンド・サーバーに接続できます。接続の確立後は、アウトバウンド・サーバーからのLCRの待機中、クライアントをループさせることができます。クライアントでは、クライアント側のコールバックがLCRが受信されるたびに起動されるように登録できます。必要に応じていつでもクライアントをアウトバウンド・サーバーから連結解除できます。再起動時には、アウトバウンド・サーバーはREDOストリームのどの位置でクライアントへのLCRのストリームを開始するか認識しています。

この項には次のトピックが含まれます:

関連項目:

35.1.1.1 LCRストリーム

LCRストリームの特性について説明します。

  • LCRストリームは反復可能である必要があります。

  • LCRストリームには、アセンブルおよびコミット済のトランザクションのリストが含まれている必要があります。

  • 1つのトランザクションからのLCRは連続しています。LCRストリーム内にはトランザクションのインターリーブはありません。

  • LCRストリーム内の各トランザクションには、LCRの順序付きリストとトランザクションIDが含まれている必要があります。

  • 各トランザクションの最後のLCRにはコミットLCRが含まれている必要があります。

  • 各LCRは固有の位置を持つ必要があります。

  • 1つのトランザクション内およびトランザクション間のすべてのLCRの位置は、確実に増加する必要があります。

35.1.1.2 処理済最低位置と再起動の考慮事項

アウトバウンド・サーバーまたはクライアントが異常終了した場合、この2つの間の接続は自動的に切断されます。再起動後に適切にリカバリされるようにするには、クライアントで処理済最低位置がメンテナンスされる必要があります。

処理済最低位置は、その位置以降、すべてのLCRがクライアントで処理されたことを示します。この位置は、各トランザクションの適用中にクライアント側でメンテナンスされる必要があります。クライアントでXStream Out APIが実行される間、この位置は定期的にサーバーに送信されます。この位置によって、その位置以降のすべてのLCRがクライアントで処理されたことがサーバーに示されるため、サーバーでは必要がなくなったREDOログを削除できます。

再起動するとすぐに、クライアントはアウトバウンド・サーバーに再度アタッチする必要があります。アタッチ・コールの間、クライアントは、受信した最後の位置をアウトバウンド・サーバーに通知できます。次に、アウトバウンド・サーバーは、この最後の位置より大きい位置を持つLCRを送信します。クライアントが最後の位置を指定しない場合(つまり、NULLを指定した場合)、アウトバウンド・サーバーはシステム表から処理済最低位置を取得し、開始位置を導出してREDOログを調べます。次に、この処理済最低位置より大きい位置を持つLCRをクライアントに送信します。

35.1.2 XStream In

非OracleデータをOracle Databaseにレプリケートするには、XStream Inを使用します。これにより、リモート・クライアントのインバウンド・サーバーへの連結(Streams適用プロセセス)、およびLCR形式での行およびDDL変更の送信が可能になります。

外部クライアント・アプリケーションは、OCIを使用してこのインバウンド・サーバーに接続されます。接続の確立後、クライアント・アプリケーションは、LCRをストリームすることによりインバウンド・サーバーの取得エージェントとして機能します。クライアント・アプリケーションは、データベース接続ごとに1つのインバウンド・サーバーにのみ連結できます。各インバウンド・サーバーには1つのクライアントのみを連結できます。

XStream Inでは、Oracle Streamsの次の機能が使用されます。

  • 適用プロセスおよびオプションの適用プロセスの並列を使用した、DML変更の高パフォーマンス処理。

  • SQL生成、競合検出と解決、エラー処理および適用ハンドラを使用した処理のカスタマイズなどの適用プロセス機能。

  • ラウンド・トリップが最小限である情報のネットワーク伝達ストリーム。

XStream Inでは、LOB、LONGLONG RAWおよびXMLTypeなど、Oracle Streamsでサポートされているすべてのデータ型がサポートされています。クライアント・アプリケーションから、LOBおよびXMLTypeデータがチャンクでインバウンド・サーバーに送信されます。複数のチャンクで単一のLOBまたはXMLTypeの列値が構成されます。

この項には次のトピックが含まれます:
35.1.2.1 処理済最低位置と再起動機能

処理済最低位置は、その位置以降、インバウンド・サーバーでLCRが必要とされないことを示します。

この位置は、取得プロセスで取得された変更を適用するOracle Streams適用プロセスの最も古いSCNに対応します。

処理済最低位置は、この位置以下のLCRがインバウンド・サーバーで処理済であることを示します。クライアントがインバウンド・サーバーに再連結される場合、インバウンド・サーバーでこの処理済最低位置以下のすべてのLCRは破棄されるため、この処理済最低位置より上のLCRのみがそれから送信される必要があります。

クライアント・アプリケーションが異常終了した場合は、クライアント・アプリケーションとインバウンド・サーバー間の接続は自動的に切断されます。再起動時、クライアント・アプリケーションで処理済最低位置がインバウンド・サーバーから取り出され、この処理済最低位置から変更を取り出すように取得エージェントに指示が出されます。

XStream Inインタフェースを使用してクライアント・アプリケーションのリカバリ時間を制限するため、クライアント・アプリケーションから空のトランザクションなどのアクティビティを定期的にインバウンド・サーバーに送信できます。サーバーに送信するLCRが存在しない場合、インバウンド・サーバーの処理済最低位置に進むように、コミット・ディレクティブとともに行LCRをクライアントから送信できます。このアクティビティは、インバウンド・サーバーの処理済最低位置を進めることができるという承認の役割を果たします。インバウンド・サーバーに送信されるLCRストリームは、前述のXStream OutのLCRストリーム・プロパティに従う必要があります。

35.1.2.2 ストリーム位置

ストリーム位置は、指定したLCRストリーム内のLCRの位置を示します。

Oracle Database外で取得されたトランザクションの場合、ストリーム位置はバイト比較をサポートしている特定の形式(ベース16エンコードなど)でエンコードされる必要があります。ストリーム位置は、XStream Inインタフェースを使用してクライアントから送信されるトランザクション・ストリームの全順序へのキーです。

35.1.3 XStreamsのセキュリティ

XStreamsのセキュリティ特性について説明します。

XStream Outでは、システム・レベルの権限を必要とせずに、通常のユーザーによるLCRの取り出しが可能です。DBAロールなどのシステム・レベルの権限は、XStream Outの構成に必要です。XStream Outを構成するユーザーは、LCRを取得するためのアウトバウンド・サーバーへの連結が可能な接続ユーザーとして通常のユーザーを指定できます。

XStream Inでは、通常ユーザーはXStream Inの構成に必要なシステム・レベルの特権(DBAなど)を必要とせずに、独自のスキーマで表を更新できます。

XStreamでは、インバウンドまたはアウトバウンド・サーバーに接続されたユーザーが信頼できるか想定できません。

OCIクライアントは、データベースで作成されたXStreamアウトバウンドまたはインバウンド・サーバーにアタッチする前に、Oracle Databaseに接続する必要があります。接続済のユーザーは、アタッチしたアウトバウンド・サーバーで構成されたconnect_userまたはアタッチしたインバウンド・サーバーで構成されたapply_userと同じである必要があります。同じでない場合は、エラーが発生します。

関連項目:

Oracle XStreamsの構成の詳細は、Oracle Database XStreamガイドを参照してください