注意: Oracleチェンジ・データ・キャプチャは、今後のOracle Databaseのリリースでサポートされなくなり、Oracle GoldenGateに置き換えられます。したがって、新しいアプリケーションでは、Oracle GoldenGateを使用することをお薦めします。Oracle Database 11gリリース2(11.2)に対しては、チェンジ・データ・キャプチャは引き続き旧リリースの場合と同じように機能します。現在チェンジ・データ・キャプチャを使用している場合、当面は引き続き使用できます。ただし、チェンジ・データ・キャプチャはこれ以上拡張されることはなく、現行のドキュメントに記載されている機能に基づいてサポートされるだけです。 |
サブスクライバは、一連のチェンジ・データ・キャプチャ・パッケージの1つであるDBMS_CDC_SUBSCRIBE
パッケージを使用して、DBMS_CDC_PUBLISH
パッケージで取得およびパブリッシュした変更データの表示および問合せができます。
通常、チェンジ・データ・キャプチャ・システムには、1人のパブリッシャと多数のサブスクライバが設定されます。サブスクライバ(通常はアプリケーションまたは個人ユーザー)は、オラクル社が提供するDBMS_CDC_SUBSCRIBE
パッケージを使用してパブリッシュ・データにアクセスします。
関連項目: Oracleチェンジ・データ・キャプチャの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
この章では、次の項目について説明します。
概要
推奨されないサブプログラム
セキュリティ・モデル
ビュー
この項では、DBMS_CDC_SUBSCRIBE
パッケージの使用に関連する項目について説明します。
サブスクライバの主な目的は、変更データを使用することです。各サブスクライバはDBMS_CDC_SUBSCRIBE
パッケージを使用して、目的のソース・テーブルをサブスクリプションの対象として登録します。
データがチェンジ・テーブルに取得されるように(サブスクライバの観点ではデータがパブリッシュされるように)パブリッシャがシステムを設定し、チェンジ・テーブルへのアクセス権をサブスクライバに付与すると、サブスクライバは目的のソース・テーブルに関するパブリッシュ済の変更データの参照や問合せを実行できるようになります。DBMS_CDC_SUBSCRIBE
パッケージのサブプログラムを使用することにより、サブスクライバは次の主な目的を実現します。
パブリッシュ済のソース・テーブルとソース列に対してサブスクリプションを作成し、そのサブスクリプションにサブスクライバ・ビューを関連付けて、どのような変更データを使用するのかを示します。
サブスクリプションをアクティブ化して、サブスクライバが変更データを受け取る準備が整ったことを示します。
図34-1に、サブスクライバがDBMS_CDC_SUBSCRIBE
パッケージのサブプログラム(表34-1を参照)を使用するときの最も一般的な順序のフローチャートを示します。通常、サブスクライバは、サブスクリプションを作成し、1つ以上のソース・テーブルとソース列にサブスクライブし、サブスクリプションをアクティブ化し、サブスクリプション・ウィンドウを拡張し、サブスクライバ・ビューに対して問合せを実行し、サブスクリプション・ウィンドウをパージし、再びサブスクリプション・ウィンドウを拡張するか、サブスクリプションを削除します。
注意: EXTEND_WINDOW プロシージャを使用した直後にPURGE_WINDOW プロシージャを使用した場合は、変更データが処理されずに失われる可能性があります。 |
表34-1 DBMS_CDC_SUBSCRIBEパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
サブスクリプションが変更データにいつでもアクセスできる状態にあることを示します。 |
サブスクリプションを作成して、1つのチェンジ・セットに関連付けます。 |
|
|
以前に |
新しい変更データが表示されるように、サブスクリプション・ウィンドウの上限境界を設定します。 |
|
|
サブスクリプション・ウィンドウの下限境界を設定し、チェンジ・データ・キャプチャにはサブスクライバが一連の変更データの処理を完了したことを通知します。 |
|
サブスクライバが変更データにアクセスするソース・テーブルおよびソース列を指定します。また、サブスクライバがソース・テーブルの変更データを表示する際に使用するサブスクライバ・ビューを指定します。 |
このプロシージャは、サブスクリプションが変更データにいつでもアクセスできる状態にあることを示します。
使用上の注意
ACTIVATE_SUBSCRIPTION
プロシージャは、サブスクライバによる表へのサブスクライブが完了したこと、およびサブスクリプションが変更データへのアクセスをいつでも開始できる状態にあることを示します。
サブスクライバがサブスクリプションをアクティブにすると、次のようになります。
それ以降、サブスクリプションにソース・テーブルを追加できません。
チェンジ・データ・キャプチャは、ソース・テーブルで使用できるデータを保持し、サブスクリプション・ウィンドウを空にします。
サブスクライバはEXTEND_WINDOW
プロシージャを使用し、変更データの初期設定を確認する必要があります。
サブスクリプションは、再度アクティブにはできません。
元のチェンジ・セットがend_date
パラメータの日付に達した場合は、サブスクリプションをアクティブにできません。
このプロシージャでは、サブスクリプションを作成して1つのチェンジ・セットに関連付けます。このプロシージャは、推奨されないGET_SUBSCRIPTION_HANDLE
プロシージャのかわりに使用します。
構文
DBMS_CDC_SUBSCRIBE.CREATE_SUBSCRIPTION ( change_set_name IN VARCHAR2, description IN VARCHAR2, subscription_name IN VARCHAR2);
使用上の注意
CREATE_SUBSCRIPTION
プロシージャを使用すると、サブスクライバは目的のソース・テーブルに関連付けられたチェンジ・セットを登録できます。
サブスクライバは、ALL_PUBLISHED_COLUMNS
ビューに対して問合せを実行して、サブスクライバが権限を付与されたパブリッシュ済ソース・テーブルと、ソース・テーブルの列がパブリッシュされているチェンジ・セットを表示できます。
サブスクリプションは、複数のサブスクライバ間で共有されません。個々のサブスクリプション名が特定のサブスクライバのログインIDと照合され、有効性が検証されます。
元のチェンジ・セットがend_date
パラメータの日付に達した場合は、サブスクリプションを作成できません。
このプロシージャでは、新しい変更データが表示されるように、サブスクリプション・ウィンドウの上限境界を設定します。
構文
DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW ( subscription_name IN VARCHAR2, upper_bound IN DATE DEFAULT NULL);
使用上の注意
EXTEND_WINDOW
プロシージャをコールして変更データの受信を開始するまで、サブスクリプション・ウィンドウは空のままです。
サブスクライバがEXTEND_WINDOW
プロシージャを初めてコールすると、サブスクリプション・ウィンドウの初期境界が設定されます。
2回目以降のEXTEND_WINDOW
プロシージャ・コールでは、新しい変更データが表示されるようにサブスクリプション・ウィンドウの上限境界を拡張します。
サブスクライバではチェンジ・テーブルを直接表示しないことをお薦めします。かわりに、DBMS_CDC_SUBSCRIBE
パッケージを使用し、サブスクライバ・ビューのみを介してデータにアクセスしてください。EXTEND_WINDOW
プロシージャ・コールで更新されたサブスクライバ・ビューを使用してデータを表示する場合にのみ、制御列の値の整合性が保証されます。
サブスクリプションの元のチェンジ・セットがend_date
パラメータの日付に達した場合は、それ以降にEXTEND_WINDOW
プロシージャをコールしても、サブスクリプション・ウィンドウの上限境界は拡張されません。
同期モードのチェンジ・データ・キャプチャを使用するサブスクリプションは、指定された日付にウィンドウを拡張することができません。したがって、upper_bound
パラメータを指定しないでください。
このプロシージャでは、変更データを表示しないようにサブスクリプション・ウィンドウの下限境界を設定し、サブスクリプション・ウィンドウを実質的に空にします。サブスクライバはこのプロシージャをコールして、変更ブロックの処理が完了したことをチェンジ・データ・キャプチャに通知します。
構文
DBMS_CDC_SUBSCRIBE.PURGE_WINDOW ( subscription_name IN VARCHAR2, lower_bound IN DATE DEFAULT NULL);
使用上の注意
一連の変更を完了すると、サブスクライバはPURGE_WINDOW
プロシージャを使用してサブスクリプション・ウィンドウをパージします。このアクションにより、サブスクライバは次のファンクションを実行します。
サブスクライバが現在の変更データの処理を完了したことを、チェンジ・データ・キャプチャに通知します。
どのサブスクライバも必要としなくなった変更データを、チェンジ・データ・キャプチャが削除できるようにします。
チェンジ・データ・キャプチャは、変更データを必要とするサブスクライバがいる間は、そのデータを使用できるように管理します。
サブスクリプションの元のチェンジ・セットがend_date
パラメータの日付に達した場合は、それ以降にPURGE_WINDOW
プロシージャをコールしても、サブスクリプション・ウィンドウの下限境界は移動されません。
このプロシージャでは、サブスクライバが変更データにアクセスするソース・テーブルおよびソース列を指定します。また、サブスクライバがソース・テーブルの変更データを表示する際に使用するサブスクライバ・ビューを指定します。
構文
SUBSCRIBE
プロシージャには、次の2種類の構文があります。
ソース・スキーマとソース・テーブルを使用する構文
この構文を使用すると、チェンジ・データ・キャプチャは、指定されたsource_table
とcolumn_list
を持つパブリケーションIDを検索します。該当するパブリケーションが見つからない場合、チェンジ・データ・キャプチャはエラーを返します。
DBMS_CDC_SUBSCRIBE.SUBSCRIBE ( subscription_name IN VARCHAR2, source_schema IN VARCHAR2, source_table IN VARCHAR2, column_list IN VARCHAR2, subscriber_view IN VARCHAR2);
パブリケーションIDを使用する構文
この構文を使用すると、チェンジ・データ・キャプチャはパブリケーションIDに基づいてチェンジ・テーブルを検索します。特定したチェンジ・テーブル内にcolumn_list
パラメータで指定した列が存在しない場合、チェンジ・データ・キャプチャはエラーを返します。
DBMS_CDC_SUBSCRIBE.SUBSCRIBE ( subscription_name IN VARCHAR2, publication_id IN NUMBER, column_list IN VARCHAR2, subscriber_view IN VARCHAR2);
パラメータ
表34-12 SUBSCRIBEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
|
ソース・テーブルが存在するスキーマの名前。 |
|
パブリッシュ済のソース・テーブルの名前。 |
|
パブリッシュ済のソース・テーブルの列をカンマで区切って指定したリスト(パブリケーション)。 |
|
このソース・テーブルまたはパブリケーションを表示する、サブスクライバ・ビューの一意の名前(30文字以下)で、この名前の接頭辞には |
|
サブスクライバが |
例外
表34-13 SUBSCRIBEプロシージャの例外
例外 | 説明 |
---|---|
|
入力パラメータの1つ以上の値が不適切です。 |
|
サブスクリプションが存在しません。 |
|
アクティブ・サブスクリプションを変更できません。 |
|
発行文字列はすでにサブスクライブされています。 |
|
指定された列をすべて含んでいる発行はありません。 |
|
ソース表が無効です。 |
|
発行が見つかりません。 |
|
変更セットのChange Data Captureを有効化できません。 |
|
名前に予約済接頭辞 |
|
名前が最大長30文字を超えています。 |
使用上の注意
SUBSCRIBE
プロシージャを使用すると、サブスクライバは、1つ以上のパブリッシュ済のソース・テーブル、および各ソース・テーブル内の特定の列に対してサブスクライブできます。個々のSUBSCRIBE
プロシージャ・コールでは、1つのソース・テーブルまたはパブリケーションIDのみを指定できます。複数のソース・テーブルまたはパブリケーションIDをサブスクリプションの対象とする場合、サブスクライバはSUBSCRIBE
プロシージャを複数回コールできます。
目的の列がすべて単一のパブリケーションに含まれる場合、サブスクライバは、source_schema
パラメータとsource_table
パラメータを使用するか、publication_id
パラメータを使用して、SUBSCRIBE
プロシージャをコールできます。一方、1つのソース・テーブルに複数のパブリケーションが存在し、パブリケーション間で特定の列を共有しているとき、さらに、共有する任意の列が単一のサブスクリプションによって使用される場合には、サブスクライバはpublication_id
パラメータを指定してSUBSCRIBE
プロシージャをコールする必要があります。
サブスクライバは、自分自身がアクセス権限を持つ任意の有効なパブリケーションIDに対して、サブスクライブを実行できます。サブスクライバがアクセス権限を持つ有効なパブリケーションIDを検索するには、ALL_PUBLISHED_COLUMNS
ビューに対して問合せを実行します。
サブスクライバがアクセス権限を持つパブリッシュ済のソース・テーブルの列を確認するには、ALL_PUBLISHED_COLUMNS
ビューに対して問合せを実行します。
サブスクライバがSUBSCRIBE
プロシージャをコールする前に、サブスクリプションを作成しておく必要があります。サブスクリプションの作成時に、使用可能な変更データがあるかどうかは、チェンジ・データ・キャプチャでは保証できません。
サブスクライバは、ソース・テーブルからパブリッシュされた列に対してのみ、サブスクライブできます。1回のSUBSCRIBE
プロシージャ・コールで指定するすべての列は、同じパブリケーションに属している必要があります。元のチェンジ・テーブルに関連付けられた制御列は、サブスクリプションに自動的に追加されます。
サブスクライバが指定するすべてのソース・テーブルまたはパブリケーションは、特定のサブスクリプションに関連付けられたチェンジ・セット内に存在する必要があります。
1つのソース・テーブルに対して複数のパブリケーションを定義できます。その場合、サブスクライバは、定義済のパブリケーションを複数サブスクライブできます。ただし、特定のパブリケーションをサブスクライブできるのは1回のみです。
サブスクリプションの各パブリケーションには、それぞれ専用のサブスクライバ・ビューがあります。このサブスクライバ・ビューを使用して、現行のサブスクリプション・ウィンドウに表示された変更データに対して問合せを実行します。サブスクライバ・ビューは、サブスクライバのスキーマ内に作成されます。
サブスクライバは、end_date
パラメータの日付に達したチェンジ・セット内部にあるパブリケーションに対して、サブスクライブを実行できません。