ヘッダーをスキップ
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス
11g リリース2(11.2)
B56262-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

34 DBMS_CDC_SUBSCRIBE


注意:

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パッケージを使用して、目的のソース・テーブルをサブスクリプションの対象として登録します。

データがチェンジ・テーブルに取得されるように(サブスクライバの観点ではデータがパブリッシュされるように)パブリッシャがシステムを設定し、チェンジ・テーブルへのアクセス権をサブスクライバに付与すると、サブスクライバは目的のソース・テーブルに関するパブリッシュ済の変更データの参照や問合せを実行できるようになります。DBMS_CDC_SUBSCRIBEパッケージのサブプログラムを使用することにより、サブスクライバは次の主な目的を実現します。

  1. パブリッシュ済のソース・テーブルとソース列に対してサブスクリプションを作成し、そのサブスクリプションにサブスクライバ・ビューを関連付けて、どのような変更データを使用するのかを示します。

  2. サブスクリプションをアクティブ化して、サブスクライバが変更データを受け取る準備が整ったことを示します。

  3. サブスクリプション・ウィンドウを拡張して、新しい変更データ・セットを受け取ります。

  4. SQLのSELECT文を使用して、サブスクライバ・ビューから変更データを取り出します。

  5. 変更ブロックの処理を完了したときに、サブスクリプション・ウィンドウをパージします。

  6. サブスクリプションが完了したら、サブスクリプションを削除します。

図34-1に、サブスクライバがDBMS_CDC_SUBSCRIBEパッケージのサブプログラム(表34-1を参照)を使用するときの最も一般的な順序のフローチャートを示します。通常、サブスクライバは、サブスクリプションを作成し、1つ以上のソース・テーブルとソース列にサブスクライブし、サブスクリプションをアクティブ化し、サブスクリプション・ウィンドウを拡張し、サブスクライバ・ビューに対して問合せを実行し、サブスクリプション・ウィンドウをパージし、再びサブスクリプション・ウィンドウを拡張するか、サブスクリプションを削除します。


注意:

EXTEND_WINDOWプロシージャを使用した直後にPURGE_WINDOWプロシージャを使用した場合は、変更データが処理されずに失われる可能性があります。


関連項目:

変更データのパブリッシュに使用するパッケージについては、第34章「DBMS_CDC_SUBSCRIBE」を参照してください。

図34-1 サブスクリプション・フロー

図34-1の説明が続きます。
「図34-1 サブスクリプション・フロー」の説明


推奨されないサブプログラム

Oracle Database 11gでは、次のサブプログラムの使用は推奨されていません。

  • DROP_SUBSCRIBER_VIEW

    サブスクライバは、サブスクライバ・ビューを削除する必要はありません。チェンジ・データ・キャプチャによって自動的に行われるようになりました。

  • GET_SUBSCRIPTION_HANDLE

    サブスクライバは、サブスクリプション・ハンドルを明示的に指定する必要はありません。かわりにCREATE_SUBSCRIPTIONプロシージャを使用して、サブスクリプション名を指定してください。

  • PREPARE_SUBSCRIBER_VIEW

    サブスクライバは、サブスクライバ・ビューを準備する必要はありません。チェンジ・データ・キャプチャによって自動的に行われるようになりました。


セキュリティ・モデル

チェンジ・データ・キャプチャでは、DBMS_CDC_SUBSCRIBEパッケージに対するEXECUTE権限がPUBLICに付与されます。


ビュー

DBMS_CDC_SUBSCRIBEパッケージで使用するビューについては、『Oracle Databaseデータ・ウェアハウス・ガイド』のチェンジ・データ・キャプチャ環境の情報の取得に関する項を参照してください。


DBMS_CDC_SUBSCRIBEサブプログラムの要約

表34-1 DBMS_CDC_SUBSCRIBEパッケージのサブプログラム

サブプログラム 説明

ACTIVATE_SUBSCRIPTIONプロシージャ


サブスクリプションが変更データにいつでもアクセスできる状態にあることを示します。

CREATE_SUBSCRIPTIONプロシージャ

サブスクリプションを作成して、1つのチェンジ・セットに関連付けます。

DROP_SUBSCRIPTIONプロシージャ


以前にCREATE_SUBSCRIPTIONプロシージャをコールして作成した既存のサブスクリプションを削除します。

EXTEND_WINDOWプロシージャ

新しい変更データが表示されるように、サブスクリプション・ウィンドウの上限境界を設定します。

PURGE_WINDOWプロシージャ


サブスクリプション・ウィンドウの下限境界を設定し、チェンジ・データ・キャプチャにはサブスクライバが一連の変更データの処理を完了したことを通知します。

SUBSCRIBEプロシージャ


サブスクライバが変更データにアクセスするソース・テーブルおよびソース列を指定します。また、サブスクライバがソース・テーブルの変更データを表示する際に使用するサブスクライバ・ビューを指定します。



ACTIVATE_SUBSCRIPTIONプロシージャ

このプロシージャは、サブスクリプションが変更データにいつでもアクセスできる状態にあることを示します。

構文

DBMS_CDC_SUBSCRIBE.ACTIVATE_SUBSCRIPTION (
     subscription_name  IN VARCHAR2);

パラメータ

表34-2 ACTIVATE_SUBSCRIPTIONプロシージャのパラメータ

パラメータ 説明

subscription_name

CREATE_SUBSCRIPTIONプロシージャを以前にコールしたときに指定したサブスクリプションの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、サブスクリプションの名前を指定します。


例外

表34-3 ACTIVATE_SUBSCRIPTIONプロシージャの例外

例外 説明

ORA-31409

入力パラメータの1つ以上の値が不適切です。

ORA-31425

サブスクリプションが存在しません。

ORA-31426

アクティブ・サブスクリプションを変更できません。

ORA-31469

変更セットのChange Data Captureを有効化できません。

ORA-31514

取得エラーのため、変更セットは使用できません。


使用上の注意

  • ACTIVATE_SUBSCRIPTIONプロシージャは、サブスクライバによる表へのサブスクライブが完了したこと、およびサブスクリプションが変更データへのアクセスをいつでも開始できる状態にあることを示します。

  • サブスクライバがサブスクリプションをアクティブにすると、次のようになります。

    • それ以降、サブスクリプションにソース・テーブルを追加できません。

    • チェンジ・データ・キャプチャは、ソース・テーブルで使用できるデータを保持し、サブスクリプション・ウィンドウを空にします。

    • サブスクライバはEXTEND_WINDOWプロシージャを使用し、変更データの初期設定を確認する必要があります。

    • サブスクリプションは、再度アクティブにはできません。

  • 元のチェンジ・セットがend_dateパラメータの日付に達した場合は、サブスクリプションをアクティブにできません。


CREATE_SUBSCRIPTIONプロシージャ

このプロシージャでは、サブスクリプションを作成して1つのチェンジ・セットに関連付けます。このプロシージャは、推奨されないGET_SUBSCRIPTION_HANDLEプロシージャのかわりに使用します。

構文

DBMS_CDC_SUBSCRIBE.CREATE_SUBSCRIPTION (
     change_set_name      IN  VARCHAR2,
     description          IN  VARCHAR2,
     subscription_name    IN  VARCHAR2);

パラメータ

表34-4 CREATE_SUBSCRIPTIONプロシージャのパラメータ

パラメータ 説明

change_set_name

サブスクライバがサブスクライブする既存のチェンジ・セットの名前。

description

サブスクリプションの説明(たとえば、使用目的など)。255文字以下の説明を指定します。

subscription_name

サブスクリプションの一意の名前(30文字以下)で、この名前の接頭辞にはCDC$を使用できません。Oracleスキーマ・オブジェクトのネーミング規則に従って、サブスクリプションの名前を指定します。


例外

表34-5 CREATE_SUBSCRIPTIONプロシージャの例外

例外 説明

ORA-31409

入力パラメータの1つ以上の値が不適切です。

ORA-31415

変更セットが存在しません。

ORA-31449

change_set_nameの値が無効です。

ORA-31457

説明フィールドが最大長を超えました。

ORA-31469

変更セットのChange Data Captureを有効化できません。

ORA-31506

サブスクリプション名が重複しています。

ORA-31510

名前に予約済接頭辞CDC$が使用されています。

ORA-31511

名前が最大長30文字を超えています。


使用上の注意

  • CREATE_SUBSCRIPTIONプロシージャを使用すると、サブスクライバは目的のソース・テーブルに関連付けられたチェンジ・セットを登録できます。

  • サブスクライバは、ALL_PUBLISHED_COLUMNSビューに対して問合せを実行して、サブスクライバが権限を付与されたパブリッシュ済ソース・テーブルと、ソース・テーブルの列がパブリッシュされているチェンジ・セットを表示できます。

  • サブスクリプションは、複数のサブスクライバ間で共有されません。個々のサブスクリプション名が特定のサブスクライバのログインIDと照合され、有効性が検証されます。

  • 元のチェンジ・セットがend_dateパラメータの日付に達した場合は、サブスクリプションを作成できません。


DROP_SUBSCRIPTIONプロシージャ

このプロシージャはサブスクリプションを削除します。

構文

DBMS_CDC_SUBSCRIBE.DROP_SUBSCRIPTION (
     subscription_name  IN VARCHAR2);

パラメータ

表34-6 DROP_SUBSCRIPTIONプロシージャのパラメータ

パラメータ 説明

subscription_name

CREATE_SUBSCRIPTIONプロシージャを以前にコールしたときに指定したサブスクリプションの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、サブスクリプションの名前を指定します。


例外

表34-7 DROP_SUBSCRIPTIONプロシージャの例外

例外 説明

ORA-31409

入力パラメータの1つ以上の値が不適切です。

ORA-31425

サブスクリプションが存在しません。


使用上の注意

不要になったサブスクリプションはサブスクライバがその都度削除し、不要な変更データがチェンジ・テーブル内に残らないようにしてください。


EXTEND_WINDOWプロシージャ

このプロシージャでは、新しい変更データが表示されるように、サブスクリプション・ウィンドウの上限境界を設定します。

構文

DBMS_CDC_SUBSCRIBE.EXTEND_WINDOW (
     subscription_name  IN VARCHAR2,
     upper_bound        IN DATE DEFAULT NULL);

パラメータ

表34-8 EXTEND_WINDOWプロシージャのパラメータ

パラメータ 説明

subscription_name

CREATE_SUBSCRIPTIONプロシージャを以前にコールしたときに指定したサブスクリプションの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、サブスクリプションの名前を指定します。

upper_bound

サブスクリプション・ウィンドウの上限の移動先の日付/タイムスタンプ。


例外

表34-9 EXTEND_WINDOWプロシージャの例外

例外 説明

ORA-31409

入力パラメータの1つ以上の値が不適切です。

ORA-31425

サブスクリプションが存在しません。

ORA-31429

サブスクリプションがアクティブにされていません。

ORA-31432

ソース表が無効です。

ORA-31469

変更セットのChange Data Captureを有効化できません。

ORA-31508

同期変更セットのパラメータ値が無効です。

ORA-31509

発行が存在しません。

ORA-31514

取得エラーのため、変更セットは使用できません。


使用上の注意

  • EXTEND_WINDOWプロシージャをコールして変更データの受信を開始するまで、サブスクリプション・ウィンドウは空のままです。

    • サブスクライバがEXTEND_WINDOWプロシージャを初めてコールすると、サブスクリプション・ウィンドウの初期境界が設定されます。

    • 2回目以降のEXTEND_WINDOWプロシージャ・コールでは、新しい変更データが表示されるようにサブスクリプション・ウィンドウの上限境界を拡張します。

  • サブスクライバではチェンジ・テーブルを直接表示しないことをお薦めします。かわりに、DBMS_CDC_SUBSCRIBEパッケージを使用し、サブスクライバ・ビューのみを介してデータにアクセスしてください。EXTEND_WINDOWプロシージャ・コールで更新されたサブスクライバ・ビューを使用してデータを表示する場合にのみ、制御列の値の整合性が保証されます。

  • サブスクリプションの元のチェンジ・セットがend_dateパラメータの日付に達した場合は、それ以降にEXTEND_WINDOWプロシージャをコールしても、サブスクリプション・ウィンドウの上限境界は拡張されません。

  • 同期モードのチェンジ・データ・キャプチャを使用するサブスクリプションは、指定された日付にウィンドウを拡張することができません。したがって、upper_boundパラメータを指定しないでください。


PURGE_WINDOWプロシージャ

このプロシージャでは、変更データを表示しないようにサブスクリプション・ウィンドウの下限境界を設定し、サブスクリプション・ウィンドウを実質的に空にします。サブスクライバはこのプロシージャをコールして、変更ブロックの処理が完了したことをチェンジ・データ・キャプチャに通知します。

構文

DBMS_CDC_SUBSCRIBE.PURGE_WINDOW (
     subscription_name   IN VARCHAR2,
     lower_bound         IN DATE DEFAULT NULL);

パラメータ

表34-10 PURGE_WINDOWプロシージャのパラメータ

パラメータ 説明

subscription_name

CREATE_SUBSCRIPTIONプロシージャを以前にコールしたときに指定したサブスクリプションの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、サブスクリプションの名前を指定します。

lower_bound

サブスクリプション・ウィンドウの下限の移動先の日付/タイムスタンプ。


例外

表34-11 PURGE_WINDOWプロシージャの例外

例外 説明

ORA-31409

入力パラメータの1つ以上の値が不適切です。

ORA-31425

サブスクリプションが存在しません。

ORA-31429

サブスクリプションがアクティブにされていません。

ORA-31432

ソース表が無効です。

ORA-31469

変更セットのChange Data Captureを有効化できません。

ORA-31514

取得エラーのため、変更セットは使用できません。


使用上の注意

  • 一連の変更を完了すると、サブスクライバはPURGE_WINDOWプロシージャを使用してサブスクリプション・ウィンドウをパージします。このアクションにより、サブスクライバは次のファンクションを実行します。

    • サブスクライバが現在の変更データの処理を完了したことを、チェンジ・データ・キャプチャに通知します。

    • どのサブスクライバも必要としなくなった変更データを、チェンジ・データ・キャプチャが削除できるようにします。

    チェンジ・データ・キャプチャは、変更データを必要とするサブスクライバがいる間は、そのデータを使用できるように管理します。

  • サブスクリプションの元のチェンジ・セットがend_dateパラメータの日付に達した場合は、それ以降にPURGE_WINDOWプロシージャをコールしても、サブスクリプション・ウィンドウの下限境界は移動されません。


SUBSCRIBEプロシージャ

このプロシージャでは、サブスクライバが変更データにアクセスするソース・テーブルおよびソース列を指定します。また、サブスクライバがソース・テーブルの変更データを表示する際に使用するサブスクライバ・ビューを指定します。

構文

SUBSCRIBEプロシージャには、次の2種類の構文があります。

  • ソース・スキーマとソース・テーブルを使用する構文

    この構文を使用すると、チェンジ・データ・キャプチャは、指定されたsource_tablecolumn_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プロシージャのパラメータ

パラメータ 説明

subscription_name

CREATE_SUBSCRIPTIONプロシージャを以前にコールしたときに指定した(または同プロシージャから戻された)サブスクリプションの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、サブスクリプションの名前を指定します。

source_schema

ソース・テーブルが存在するスキーマの名前。

source_table

パブリッシュ済のソース・テーブルの名前。

column_list

パブリッシュ済のソース・テーブルの列をカンマで区切って指定したリスト(パブリケーション)。

subscriber_view

このソース・テーブルまたはパブリケーションを表示する、サブスクライバ・ビューの一意の名前(30文字以下)で、この名前の接頭辞にはCDC$を使用できません。Oracleスキーマ・オブジェクトのネーミング規則に従って、サブスクライバ・ビューの名前を指定します。

publication_id

サブスクライバがALL_PUBLISHED_COLUMNSビューから取得できる有効なpublication_id


例外

表34-13 SUBSCRIBEプロシージャの例外

例外 説明

ORA-31409

入力パラメータの1つ以上の値が不適切です。

ORA-31425

サブスクリプションが存在しません。

ORA-31426

アクティブ・サブスクリプションを変更できません。

ORA-31427

発行文字列はすでにサブスクライブされています。

ORA-31428

指定された列をすべて含んでいる発行はありません。

ORA-31432

ソース表が無効です。

ORA-31466

発行が見つかりません。

ORA-31469

変更セットのChange Data Captureを有効化できません。

ORA-31510

名前に予約済接頭辞CDC$が使用されています。

ORA-31511

名前が最大長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パラメータの日付に達したチェンジ・セット内部にあるパブリケーションに対して、サブスクライブを実行できません。