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

前
 
次
 

33 DBMS_CDC_PUBLISH


注意:

Oracleチェンジ・データ・キャプチャは、今後のOracle Databaseのリリースでサポートされなくなり、Oracle GoldenGateに置き換えられます。したがって、新しいアプリケーションでは、Oracle GoldenGateを使用することをお薦めします。

Oracle Database 11gリリース2(11.2)に対しては、チェンジ・データ・キャプチャは引き続き旧リリースの場合と同じように機能します。現在チェンジ・データ・キャプチャを使用している場合、当面は引き続き使用できます。ただし、チェンジ・データ・キャプチャはこれ以上拡張されることはなく、現行のドキュメントに記載されている機能に基づいてサポートされるだけです。


パブリッシャは、一連のチェンジ・データ・キャプチャ・パッケージの1つであるDBMS_CDC_PUBLISHパッケージを使用して、Oracleチェンジ・データ・キャプチャ・システムを設定し、1つ以上のOracleリレーショナル・ソース・テーブルから変更データを取得およびパブリッシュします。

チェンジ・データ・キャプチャが取得およびパブリッシュするのは、コミットされたデータのみです。Oracleチェンジ・データ・キャプチャは、リレーショナル表に追加された新しいデータ、リレーショナル表内で変更されたデータ、リレーショナル表から削除されたデータを検出し、サブスクライバによる使用が可能な形式で変更データをパブリッシュします。

通常、チェンジ・データ・キャプチャ・システムには1人のパブリッシャが設定され、このパブリッシャは、Oracleリレーショナル・ソース・テーブルに対する変更の取得とパブリッシュを任意の回数行います。次に、パブリッシャは、パブリッシュされたデータへのアクセス権をサブスクライバ(アプリケーションまたは個人)に付与します。サブスクライバは、DBMS_CDC_SUBSCRIBEパッケージを使用してパブリッシュされたデータにアクセスします。


関連項目:

Oracleチェンジ・データ・キャプチャの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

この章では、次の項目について説明します。


DBMS_CDC_PUBLISHの使用方法

この項では、DBMS_CDC_PUBLISHパッケージの使用に関連する項目について説明します。


概要

パブリッシャはDBMS_CDC_PUBLISHパッケージを使用して、チェンジ・ソース、チェンジ・セットおよびチェンジ・テーブルの作成とメンテナンスを行い、それらが不要になった場合は削除します。

パブリッシャ(通常はデータベース管理者)は、主にデータのソースに関与します。また、チェンジ・データ・キャプチャ・システムの構造(チェンジ・ソース、チェンジ・セットおよびチェンジ・テーブル)を記述するスキーマ・オブジェクトを作成します。

大部分のチェンジ・データ・キャプチャ・システムには、1人のパブリッシャおよび多数のサブスクライバが設定されています。パブリッシャは、主に次のタスクを実行します。

  1. ソース・テーブルの変更でパブリッシュが必要なものを決定します。

  2. 変更を取得するときのモード(非同期または同期)を選択します。

  3. DBMS_CDC_PUBLISHパッケージのサブプログラムを使用してソース・テーブルから変更データを取得し、チェンジ・ソース、チェンジ・セットおよびチェンジ・テーブルのオブジェクトの作成と管理を行うことによって、変更データを使用できるようにします。

  4. SQL文のGRANTおよびREVOKEを使用して、ユーザーやロールに対してチェンジ・テーブルへのSELECT権限の付与および取消しを行うことで、サブスクライバへのアクセスを制御できます。(サブスクライバがDBMS_CDC_SUBSCRIBEパッケージを使用して変更データをサブスクライブするには、このようなアクセス制御が必要です。)


    関連項目:

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


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


注意:

新しいアプリケーションでは、推奨されないプロシージャは使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。

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

  • サブスクリプション・ハンドルを指定したDBMS_CDC_PUBLISH.DROP_SUBSCRIPTION

    パブリッシャがサブスクリプションを削除するときは、サブスクリプション・ハンドルではなく、削除対象のサブスクリプションの名前を指定してください。

  • DBMS_CDC_PUBLISH.DROP_SUBSCRIBER_VIEW

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


セキュリティ・モデル

DBMS_CDC_PUBLISHパッケージを使用するには、EXECUTE_CATALOG_ROLEロールが必要です。また、パブリッシュのモードおよびパブリッシャの場所(ソース・データベースまたはステージング・データベース)に応じて、追加の権限およびロールが必要になります。詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』のパブリッシャへの権限およびロールの付与に関する項を参照してください。


ビュー

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


DBMS_CDC_PUBLISHサブプログラムの要約

表33-1に、提供されたDBMS_CDC_PUBLISHパッケージのサブプログラムと各サブプログラムを使用できるモードを示します。「モード」列の「すべて」という値は、同期モード、および非同期チェンジ・データ・キャプチャのすべてのモードでサブプログラムが使用できることを示し、「モード」列の「非同期」という値は、非同期チェンジ・データ・キャプチャのすべてのモード(HotLog、分散HotLogおよびAutoLog)でサブプログラムが使用できることを示します。

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

サブプログラム モード 説明

ALTER_AUTOLOG_CHANGE_SOURCEプロシージャ


非同期AutoLog

既存のAutoLogチェンジ・ソースのプロパティを1つ以上変更します。

ALTER_CHANGE_SETプロシージャ


すべて

既存のチェンジ・セットのプロパティを1つ以上変更します。

ALTER_CHANGE_TABLEプロシージャ


すべて

既存のチェンジ・テーブルに対して、列を追加または削除するか、プロパティを変更します。

ALTER_HOTLOG_CHANGE_SOURCEプロシージャ


非同期分散HotLog

既存の分散HotLogチェンジ・ソースのプロパティを1つ以上変更します。

CREATE_AUTOLOG_CHANGE_SOURCEプロシージャ


非同期AutoLog

AutoLogチェンジ・ソースを作成します。

CREATE_CHANGE_SETプロシージャ

すべて

チェンジ・セットを作成します。

CREATE_CHANGE_TABLEプロシージャ


すべて

指定されたスキーマ内にチェンジ・テーブルを作成します。

CREATE_HOTLOG_CHANGE_SOURCEプロシージャ


非同期分散HotLog

分散HotLogチェンジ・ソースを作成します。

DROP_CHANGE_SETプロシージャ


すべて

既存のチェンジ・セットを削除します。

DROP_CHANGE_SOURCEプロシージャ


非同期Autologおよび非同期分散Hotlog

既存のAutoLogまたは分散Hotlogチェンジ・ソースを削除します。

DROP_CHANGE_TABLEプロシージャ


すべて

既存のチェンジ・テーブルを削除します。

DROP_SUBSCRIPTIONプロシージャ


すべて

サブスクライバが作成したサブスクリプションをパブリッシャが削除できるようにします。

GET_DDLOPERファンクション


すべて

2進整数を、実際に行われたDDL操作について説明するわかりやすい文字列に変換します。

PURGEプロシージャ


すべて

ステージング・データベース内のすべてのチェンジ・テーブルから不要な行を削除します。

PURGE_CHANGE_SETプロシージャ


すべて

指定されたチェンジ・セット内のすべてのチェンジ・テーブルから不要な行を削除します。

PURGE_CHANGE_TABLEプロシージャ


すべて

指定されたチェンジ・テーブルから不要な行を削除します。



ALTER_AUTOLOG_CHANGE_SOURCEプロシージャ

このプロシージャでは、既存のAutoLogチェンジ・ソースのプロパティを変更します。

構文

DBMS_CDC_PUBLISH.ALTER_AUTOLOG_CHANGE_SOURCE(
     change_source_name  IN VARCHAR2,
     description         IN VARCHAR2 DEFAULT NULL,
     remove_description  IN CHAR DEFAULT 'N',
     first_scn           IN NUMBER DEFAULT NULL);

パラメータ

表33-2 ALTER_AUTOLOG_CHANGE_SOURCEプロシージャのパラメータ

パラメータ 説明

change_source_name

既存のAutoLogチェンジ・ソースの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・ソースの名前を指定します。

description

チェンジ・ソースの新しい説明。255文字以下の説明を指定します。

remove_description

'Y'または'N'

'Y'の場合、現在の説明はNULLに変更されます。'N'の場合、現在の説明は変更されません。

このパラメータとdescriptionパラメータの両方を指定しないでください。

first_scn

最初のSCNの新しい値。


例外

表33-3 ALTER_AUTOLOG_CHANGE_SOURCEプロシージャの例外

例外 説明

ORA-31401

変更ソースは既存の変更ソースではありません。

ORA-31445

文字列のロック取得中にロック・ハンドルが無効になりました。

ORA-31452

パラメータの値が無効です。値はYまたはNです。

ORA-31497

first_scnに無効な値が指定されました。

ORA-31498

descriptionremove_descriptionの両方を指定することはできません。

ORA-31499

必須パラメータにNULL値が指定されました。

ORA-31501

変更ソースはAutoLog変更ソースではありません。

ORA-31504

事前定義済の変更ソースは変更または削除できません。

ORA-31507

パラメータ値が最大長を超えています。


使用上の注意

  • このプロシージャでは、NULL値を指定したプロパティは変更されません。

  • このプロシージャでは、複数のプロパティを同時に変更できます。

  • このプロシージャは、非同期AutoLogチェンジ・セットにとって不要になったREDOログを検出した後でSCNを調整する場合に使用できます。


関連項目:

非同期AutoLogチェンジ・セットで不要になったREDOログを検出した後でSCNを調整する場合に、パブリッシャがALTER_AUTOLOG_CHANGE_SOURCEプロシージャを使用する方法については、『Oracle Databaseデータ・ウェアハウス・ガイド』の非同期チェンジ・データ・キャプチャおよびREDOログ・ファイルに関する項を参照してください。


ALTER_CHANGE_SETプロシージャ

このプロシージャでは、CREATE_CHANGE_SETプロシージャで作成された既存のチェンジ・セットのプロパティを変更します。

構文

DBMS_CDC_PUBLISH.ALTER_CHANGE_SET(
     change_set_name         IN VARCHAR2,
     description             IN VARCHAR2 DEFAULT NULL,
     remove_description      IN CHAR DEFAULT 'N',
     enable_capture          IN CHAR DEFAULT NULL,
     recover_after_error     IN CHAR DEFAULT NULL,
     remove_ddl              IN CHAR DEFAULT NULL,
     stop_on_ddl             IN CHAR DEFAULT NULL);

パラメータ

表33-4 ALTER_CHANGE_SETプロシージャのパラメータ

パラメータ 説明

change_set_name

既存のチェンジ・セットの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・セットの名前を指定します。

description

チェンジ・セットの新しい説明。255文字以下の説明を指定します。

remove_description

'Y'または'N'

'Y'の場合、現在の説明はNULLに変更されます。'N'の場合、現在の説明は変更されません。

このパラメータとdescriptionパラメータの両方を指定しないでください。

enable_capture

'Y'または'N'

'Y'の場合、指定したチェンジ・セットに対してチェンジ・データ・キャプチャが有効になります。

'N'の場合、指定したチェンジ・セットに対してチェンジ・データ・キャプチャが無効になります。

同期チェンジ・セットは、チェンジ・データ・キャプチャが有効な状態で作成されます。

非同期チェンジ・セットは、チェンジ・データ・キャプチャが無効な状態で作成されます。

recover_after_error

'Y'または'N'

'Y'の場合、チェンジ・データ・キャプチャは以前の取得エラーからのリカバリを試行します。

'N'の場合、チェンジ・データ・キャプチャは以前の取得エラーからのリカバリを試行しません。

remove_ddl

'Y'または'N'

このパラメータの値が'Y'で、recover_after_errorパラメータの値も'Y'の場合は、取得エラーの原因となったすべてのDDLレコードがリカバリ処理中に削除されます。

このパラメータの値が'N'の場合、取得エラーの原因となったDDLレコードはリカバリ処理中に削除されません。

このパラメータが意味を持つのは、recover_after_errorパラメータに'Y'が指定されている場合のみです。

stop_on_ddl

'Y'または'N'

'Y'の場合、DDLイベントが検出されるとチェンジ・データ・キャプチャは停止します。

'N'の場合、DDLイベントが検出されてもチェンジ・データ・キャプチャは続行します。

このパラメータの詳細は、「使用上の注意」を参照してください。


例外

表33-5 ALTER_CHANGE_SETプロシージャの例外

例外 説明

ORA-31410

変更セットは既存の変更セットではありません。

ORA-31452

パラメータの値が無効です。値はYまたはNです。

ORA-31445

文字列のロック取得中にロック・ハンドルが無効になりました。

ORA-31468

DDL変更レコードを処理できません。

ORA-31469

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

ORA-31485

データベース・リンクが無効です。

ORA-31498

descriptionremove_descriptionの両方を指定することはできません。

ORA-31499

必須パラメータにNULL値が指定されました。

ORA-31505

事前定義済の変更セットは変更または削除できません。

ORA-31507

パラメータ値が最大長を超えています。

ORA-31508

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

ORA-31514

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


使用上の注意

  • パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。ただし、事前定義された同期チェンジ・セットであるSYNC_SETは変更できないため、パブリッシャが定義する同期チェンジ・セットでは、enable_capturerecover_after_errorremove_ddlおよびstop_on_ddlの各パラメータを変更できません。

  • このプロシージャでは、NULL値を指定したプロパティは変更されません。

  • このプロシージャを使用すると、複数のパラメータを同時に変更できます。

  • 非同期HotLogまたはAutoLogチェンジ・セットを有効にするか無効にするかによって、チェンジ・セットの基礎となるOracle Streamsの取得プロセスおよび適用プロセスを開始するか停止するかが決まります。非同期分散HotLogチェンジ・セットを有効にするか無効にするかによって、チェンジ・セットの基礎となるOracle Streams適用プロセスを開始するか停止するかが決まります。

  • stop_on_ddlパラメータの効果は次のとおりです。

    • stop_on_ddlパラメータを'Y'に設定した場合、チェンジ・データ・キャプチャの実行中にDDLが検出されると、非同期チェンジ・データ・キャプチャは停止します。取得対象のソース・テーブル列を削除する文など、DDL文の中にはキャプチャに悪影響を与えるものがあります。キャプチャが停止している間、パブリッシャはチェンジ・テーブルに悪影響を与える可能性のあるDDL文を解析し、必要に応じてDDL文を変更することで、キャプチャの実行中に発生するエラーを回避できます。

      stop_on_ddlパラメータが'Y'に設定されているときに次のいずれかの文が検出された場合は、チェンジ・データ・キャプチャによる変更データの取得は停止しません。その理由は、これらの文が列のデータ自身に影響を与えないためです。

      • ANALYZE TABLE

      • LOCK TABLE

      • GRANT(表へのアクセス権限を付与する文)

      • REVOKE(表へのアクセス権限を取り消す文)

      • COMMENT(表に関するコメントを追加する文)

      • COMMENT(列に関するコメントを追加する文)

      ソース・データベースに対してこれらの文を発行するときは、チェンジ・データ・キャプチャ処理への影響を考慮する必要はありません。

    • stop_on_ddlパラメータを'N'に設定した場合、チェンジ・データ・キャプチャの実行中にDDLが検出されても、チェンジ・データ・キャプチャは停止しません。ただし、DDLでチェンジ・セットが停止しないときでも、チェンジ・テーブルに影響するDDL変更が発生した場合は、その変更が原因で取得エラーが発生する可能性があります。また、ディスク領域不足などのシステム状態でも、取得エラーが発生する場合があります。


      関連項目:

      取得エラーの影響およびそのリカバリ方法については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

    DDL文が原因で処理が停止すると、どのチェンジ・セットの処理が停止したのか、また停止の原因となったDDL文は何かを示すメッセージがアラート・ログに書き込まれます。同様に、チェンジ・データ・キャプチャがDDL文を無視して処理を続行した場合は、無視されたDDL文を示すメッセージがアラート・ログに書き込まれます。

  • recover_after_errorパラメータを'Y'に設定すると、パブリッシャは取得エラー発生後に非同期チェンジ・セットのリカバリを試行できます。次のいずれかの条件に該当した場合、取得エラーが発生する可能性があります。

    • stop_on_ddlパラメータが'Y'に設定され、変更データ内にDDLレコードが存在する場合。この場合、エラーからリカバリするために、パブリッシャはremove_ddlパラメータも'Y'に設定する必要があります。

    • stop_on_ddlパラメータが'N'に設定され、キャプチャに影響を与えるDDLレコードが存在する場合。たとえば、パブリッシャがチェンジ・テーブルを一度削除してから再作成した場合は、次回のチェンジ・データ・キャプチャで名前を指定してチェンジ・テーブルに変更データを追加しようとすると、エラーが発生します。

    • ディスク領域の不足や、REDOログ・ファイルのエラーなど、様々なエラーが発生した場合(例: 「ORA-01688: 表string.stringのパーティションstringを拡張できません(string、表領域string)」)。


      関連項目:

      取得エラーからのリカバリ方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。


ALTER_CHANGE_TABLEプロシージャ

このプロシージャでは、CREATE_CHANGE_TABLEプロシージャで作成したチェンジ・テーブルに対して、列の追加、列の削除、プロパティの変更を行います。

構文

DBMS_CDC_PUBLISH.ALTER_CHANGE_TABLE(
     owner                  IN VARCHAR2,
     change_table_name      IN VARCHAR2,
     operation              IN VARCHAR2,
     column_list            IN VARCHAR2,
     rs_id                  IN CHAR,
     row_id                 IN CHAR,
     user_id                IN CHAR,
     timestamp              IN CHAR,
     object_id              IN CHAR,
     source_colmap          IN CHAR,
     target_colmap          IN CHAR,
     ddl_markers            IN CHAR  DEFAULT NULL);

パラメータ

表33-6 ALTER_CHANGE_TABLEプロシージャのパラメータ

パラメータ 説明

owner

チェンジ・テーブルを所有するスキーマの名前。

change_table_name

変更するチェンジ・テーブルの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・テーブルの名前を指定します。

operation

column_listパラメータで指定したユーザー列、または他のパラメータで指定した制御列に対する操作を指定します。列を追加する場合はADD、列を削除する場合はDROPを指定します。

column_list

ソース・テーブルの列のうち、チェンジ・テーブルに追加する列またはチェンジ・テーブルから削除する列ごとのユーザー列名およびデータ・タイプ。このリストはカンマで区切ります。

rs_id

row_id

user_id

timestamp

object_id

source_colmap

target_colmap

ddl_markers

これらのパラメータは、それぞれ次のように特定の制御列を表します。

  • rs_idパラメータは、RSID$制御列を表します。

  • row_idパラメータは、ROW_ID$制御列を表します。

  • user_idパラメータは、USERNAME$制御列を表します。

  • timestampパラメータは、TIMESTAMP$制御列を表します。

  • object_idパラメータは、SYS_NC_OID$制御列を表します。

  • source_colmapパラメータは、SOURCE_COLMAP$制御列を表します。

  • target_colmapパラメータは、TARGET_COLMAP$制御列を表します。

  • ddl_markersパラメータは、ソース・テーブルでのすべてのDDL操作を追跡し、それらの操作に関する情報をチェンジ・テーブルに格納します。これらは、ddl_markersが有効になっている場合に取得する3つの追加の制御列です。3つの値があり、DDLOPER$は、行われたDDL操作の種類を示すビット・ベクトルです。(このDDL操作の名前を取得するには、プロシージャDBMS_CDC_PUBLISH.GET_DDLOPER(ddloper$)を使用します。)DDLDESC$は、実行された実際のDDL文が含まれているCLOBです。DDLPDOBJN$は、このリリースでは使用されません。

各パラメータには'Y'または'N'のどちらかを指定します。

  • 'Y': operationパラメータに従って、指定された制御列をチェンジ・テーブルに追加するか、またはチェンジ・テーブルから制御列を削除します。

  • 'N': チェンジ・テーブルに対して、指定された制御列の追加も削除も行いません。



関連項目:

制御列の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

例外

表33-7 ALTER_CHANGE_TABLEプロシージャの例外

例外 説明

ORA-31403

変更表にはすでに指定された列が含まれています。

ORA-31409

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

ORA-31415

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

ORA-31416

SOURCE_COLMAPの値が無効です。

ORA-31417

列リストに制御列control-column-nameが含まれています。

ORA-31421

変更表が存在しません。

ORA-31422

所有者スキーマが存在しません。

ORA-31423

変更表には指定された列が含まれていません。

ORA-31454

操作パラメータの値が無効です。値はADDまたはDROPです。

ORA-31455

ALTERの対象がありません。

ORA-31456

DBMS_CDC_UTILITYパッケージのプロシージャの実行でエラーが発生しました。

ORA-31459

DBMS_CDC_PUBLISHパッケージのシステム・トリガーがインストールされていません。

ORA-31471

OBJECT_IDの値が無効です。


使用上の注意

  • パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。

  • パブリッシャは、ALTER_CHANGE_TABLEプロシージャのコールで、ユーザー列の追加と削除を同時には実行できません。このようなスキーマの変更では、追加と削除を別々のプロシージャ・コールで行ってください。

  • パブリッシャは、column_ listパラメータに制御列の名前を指定しないでください。

  • 非同期チェンジ・テーブルを変更するとき、パブリッシャはデフォルト値をそのまま使用するか、source_colmapパラメータとobject_idパラメータに'N'を指定する必要があります。また、非同期分散HotLogモードでは、チェンジ・ソースが9.2または10.1の場合、パブリッシャは、デフォルト値をそのまま使用するか、またはrow_idパラメータおよびusernameパラメータに'N'を指定する必要もあります。


    関連項目:

    パブリッシャがチェンジ・テーブルに列を追加するときのサブスクリプションへの影響については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。


ALTER_HOTLOG_CHANGE_SOURCEプロシージャ

このプロシージャでは、既存の分散HotLogチェンジ・ソースのプロパティを変更します。

構文

DBMS_CDC_PUBLISH.ALTER_HOTLOG_CHANGE_SOURCE(
     change_source_name  IN VARCHAR2,
     description         IN VARCHAR2 DEFAULT NULL,
     remove_description  IN CHAR DEFAULT 'N',
     enable_source       IN CHAR DEFAULT NULL);

パラメータ

表33-8 ALTER_HOTLOG_CHANGE_SOURCEプロシージャのパラメータ

パラメータ 説明

change_source_name

既存の分散HotLogチェンジ・ソースの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・ソースの名前を指定します。

description

チェンジ・ソースの新しい説明。255文字以下の説明を指定します。

remove_description

'Y'または'N'

'Y'の場合、現在の説明はNULLに変更されます。'N'の場合、現在の説明は変更されません。

このパラメータとdescriptionパラメータの両方を指定しないでください。

enable_source

'Y'または'N'

'Y'の場合、チェンジ・ソースは有効です。'N'の場合、チェンジ・ソースは無効です。


例外

表33-9 ALTER_HOTLOG_CHANGE_SOURCEプロシージャの例外

例外 説明

ORA-31401

変更ソースは既存の変更ソースではありません。

ORA-31455

ALTERの対象がありません。

ORA-31480

ステージング・データベースおよびソース・データベースは同じにできません。

ORA-31481

変更ソースはHotLog変更ソースではありません。

ORA-31482

非分散Hotlog変更ソースのオプションが無効です。

ORA-31484

ソース・データベースはリリース9.2.0.6以上に設定する必要があります。

ORA-31485

データベース・リンクが無効です。

ORA-31498

descriptionremove_descriptionの両方を指定することはできません。

ORA-31499

必須パラメータにNULL値が指定されました。

ORA-31504

事前定義済の変更ソースは変更または削除できません。

ORA-31507

パラメータ値が最大長を超えています。

ORA-31532

変更ソースを有効化できません。

ORA-31534

Change Data CaptureのパブリッシャにDBAロールがありません。


使用上の注意

  • このプロシージャでは、NULL値を指定したプロパティは変更されません。

  • このプロシージャでは、複数のプロパティを同時に変更できます。

  • 分散HotLogチェンジ・ソースを有効にするか無効にするかによって、チェンジ・ソースの基礎となるOracle Streams取得プロセスを開始するか停止するかが決まります。

  • このプロシージャは、非同期HotLogモードのチェンジ・データベース・キャプチャでチェンジ・ソースを変更する場合に使用することはできません。非同期HotLogモードのチェンジ・ソースは、事前定義されたチェンジ・ソースHOTLOG_SOURCEで、変更できません。


CREATE_AUTOLOG_CHANGE_SOURCEプロシージャ

このプロシージャでは、AutoLogチェンジ・ソースを作成します。AutoLogチェンジ・ソースは、REDOログ・ファイル・セットに基づいて作成され、このREDOログ・ファイルは、ステージング・データベースが存在するシステムにREDO転送サービスによって自動的にコピーされるものです。

構文

DBMS_CDC_PUBLISH.CREATE_AUTOLOG_CHANGE_SOURCE(
     change_source_name  IN VARCHAR2,
     description         IN VARCHAR2 DEFAULT NULL,
     source_database     IN VARCHAR2,
     first_scn           IN NUMBER,
     online_log          IN CHAR DEFAULT 'N');

パラメータ

表33-10 CREATE_AUTOLOG_CHANGE_SOURCEプロシージャのパラメータ

パラメータ 説明

change_source_name

チェンジ・ソースの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・ソースの名前を指定します。

description

チェンジ・ソースの説明。255文字以下の説明を指定します。

source_database

チェンジ・ソースのソース・データベース・インスタンスのグローバル名。

first_scn

チェンジ・ソースのアーカイブREDOログ・ファイル内にあるLogMinerディクショナリの開始時SCN。

online_log

'Y'または'N'。値が'Y'の場合、チェンジ・ソースは、ソース・データベースのオンラインREDOログを検索するAutoLogオンライン・オプションを使用して、変更データを収集します。ステージング・データベースでは、1つのチェンジ・ソースのみにonline_log='Y'を指定できます。

値が'N'の場合、チェンジ・ソースは、AutoLogアーカイブ・オプションを使用して、アーカイブREDOログ・ファイルから変更データを取得します。ステージング・データベースでは、1つ以上のチェンジ・ソースにonline_log='N'を指定できます。


例外

表33-11 CREATE_AUTOLOG_CHANGE_SOURCEプロシージャの例外

例外 説明

ORA-31436

変更ソースが重複しています。

ORA-31497

first_scnに無効な値が指定されました。

ORA-31499

必須パラメータにNULL値が指定されました。

ORA-31507

パラメータ値が最大長を超えています。

ORA-31508

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

ORA-31535

この構成では変更ソースをサポートできません。


使用上の注意

  • パブリッシャは、非同期チェンジ・データ・キャプチャのみでこのプロシージャを使用できます。

  • パブリッシャは、source_databaseパラメータの値を指定するときに注意してください。チェンジ・ソースの作成時、チェンジ・データ・キャプチャはこのパラメータ値の有効性を検証しません。パブリッシャは、ソース・データベースにあるGLOBAL_NAMEビューのGLOBAL_NAME列に問い合せて、source_databaseパラメータの値を確認できます。

  • パブリッシャは、ステージング・データベースが存在するシステムにログ・ファイルが自動的にコピーされるように、REDO転送サービスを構成してください。


    関連項目:

    ステージング・データベースが存在するシステムにログ・ファイルが自動的にコピーされるようにREDO転送サービスを構成する方法については、『Oracle Databaseデータ・ウェアハウス・ガイド』の非同期AutoLogパブリッシュの実行に関する項を参照してください。

  • AutoLogチェンジ・ソースは、LogMinerディクショナリを含むアーカイブREDOログ・ファイルから開始する必要があります。CREATE_AUTOLOG_CHANGE_SOURCEfirst_scnパラメータは、このディクショナリを抽出するためのSCNを表し、このSCNから、チェンジ・ソースによる変更の取得を開始できます。パブリッシャは、次のいずれかの方法を使用して、first_scnパラメータの値を決定します。

    • DBMS_CAPTURE_ADM.BUILDを指定して、ディクショナリの作成時に値が返却されるようにします。

      SET SERVEROUTPUT ON
      VARIABLE FSCN NUMBER;
      BEGIN
       :FSCN := 0;
       DBMS_CAPTURE_ADM.BUILD(:FSCN);
       DBMS_OUTPUT.PUT_LINE('The first_scn value is ' || :FSCN);
      END;
      /
      The first_scn value is 207722
      
    • ソース・データベースに対して次の問合せを実行します。この問合せでfirst_change#値が複数返される場合は、データ・ディクショナリの抽出を複数回実行しているため、パブリッシャはチェンジ・ソースに最も適したfirst_change#値を選択してください。

      SELECT DISTINCT FIRST_CHANGE#, NAME 
         FROM V$ARCHIVED_LOG
         WHERE DICTIONARY_BEGIN = 'YES';
      

      関連項目:

      アーカイブREDOログ・ファイルとLogMinerディクショナリについては、『Oracle Databaseデータ・ウェアハウス・ガイド』の非同期AutoLogパブリッシュの実行に関する項を参照してください。

  • 非同期モードのチェンジ・データ・キャプチャでは、ソース・データベースで有効になっているサプリメンタル・ロギングのレベルに応じて、取得される変更データの量が決まります。


    関連項目:

    サプリメンタル・ロギングについては、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。


CREATE_CHANGE_SETプロシージャ

このプロシージャでは、パブリッシャがチェンジ・セットを作成できるようにします。非同期のHotLogおよびAutoLogモードのチェンジ・データ・キャプチャでは、変更データの取得の開始日付と終了日付をパブリッシャが任意に指定できます。

構文

DBMS_CDC_PUBLISH.CREATE_CHANGE_SET(
     change_set_name        IN VARCHAR2,
     description            IN VARCHAR2 DEFAULT NULL,
     change_source_name     IN VARCHAR2,
     stop_on_ddl            IN CHAR DEFAULT 'N',
     begin_date             IN DATE DEFAULT NULL,
     end_date               IN DATE DEFAULT NULL);

パラメータ

表33-12 CREATE_CHANGE_SETプロシージャのパラメータ

パラメータ 説明

change_set_name

チェンジ・セットの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・セットの名前を指定します。

description

チェンジ・セットの説明。255文字以下の説明を指定します。

change_source_name

指定したチェンジ・セットを格納する既存のチェンジ・ソースの名前。

stop_on_ddl

'Y'または'N'

'Y'の場合、DDLイベントが検出されるとチェンジ・データ・キャプチャは停止します。

'N'の場合、DDLイベントが検出されてもチェンジ・データ・キャプチャは続行します。

このパラメータの詳細は、「使用上の注意」を参照してください。

begin_date

パブリッシャがチェンジ・セットで変更データの取得を開始する日付を指定します。このパラメータの値は、非同期のHotLogおよびAutoLogモードのチェンジ・データ・キャプチャのみで有効です。

end_date

パブリッシャがチェンジ・セットで変更データの取得を終了する日付を指定します。このパラメータの値は、非同期のHotLogおよびAutoLogモードのチェンジ・データ・キャプチャのみで有効です。


例外

表33-13 CREATE_CHANGE_SETプロシージャの例外

例外 説明

ORA-31401

変更ソースは既存の変更ソースではありません。

ORA-31407

end_datebegin_dateより大きくする必要があります。

ORA-31408

begin_scnまたはend_scnに無効な値が指定されました。

ORA-31437

変更セットが重複しています。

ORA-31452

パラメータの値が無効です。値はYまたはNです。

ORA-31483

パラメータには空白を使用できません。

ORA-31485

データベース・リンクが無効です。

ORA-31487

この構成では開始日付または終了日付をサポートできません。

ORA-31488

この構成では変更セットをサポートできません。

ORA-31499

必須パラメータにNULL値が指定されました。

ORA-31503

begin_dateまたはend_dateに指定された日付が無効です。

ORA-31507

パラメータ値が最大長を超えています。

ORA-31508

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


使用上の注意

  • パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。ただし、begin_dateend_datestop_on_ddlの各パラメータのデフォルト値は、同期チェンジ・セットのみでサポートされます。begin_dateおよびend_dateパラメータのデフォルト値は、非同期分散HotLogチェンジ・セットのみでサポートされます。

  • チェンジ・ソースが10.2より前のリリースのOracle Databaseの分散HotLogの場合、チェンジ・データ・キャプチャは、ステージング・データベースのCHANGE_PROPAGATIONおよびCHANGE_PROPAGATION_SETSビューに行を挿入します。

  • AutoLogオンライン・チェンジ・ソース(online_log='Y'を指定して作成)には、1つのみのチェンジ・セットを含めることができます。

  • begin_dateend_dateは任意選択パラメータです。パブリッシャは、パラメータを両方とも省略したり、一方のみまたは両方とも指定したりできます。パラメータの効果は次のとおりです。

    • begin_dateが指定されている場合は、指定された日付以降に開始されるトランザクションの変更が取得されます。

    • begin_dateが指定されていない場合は、使用可能な変更データのうち最も早い変更データから取得が開始されます。

    • end_dateが指定されている場合は、指定された日付以前にコミットされるトランザクションの変更が取得されます。

    • end_dateが指定されていない場合は、チェンジ・データ・キャプチャが無限に続行されます。

  • stop_on_ddlパラメータの効果は次のとおりです。

    • stop_on_ddlパラメータを'Y'に設定した場合、チェンジ・データ・キャプチャの実行中にDDLが検出されると、非同期チェンジ・データ・キャプチャは停止します。取得対象のソース・テーブル列を削除する文など、DDL文の中にはキャプチャに悪影響を与えるものがあります。キャプチャが停止している間、パブリッシャはチェンジ・テーブルに悪影響を与える可能性のあるDDL文を解析し、必要に応じてDDL文を変更することで、キャプチャの実行中に発生するエラーを回避できます。

      stop_on_ddlパラメータが'Y'に設定されているときに次のいずれかの文が検出された場合は、チェンジ・データ・キャプチャによる変更データの取得は停止しません。その理由は、これらの文が列のデータ自身に影響を与えないためです。

      • ANALYZE TABLE

      • LOCK TABLE

      • GRANT(表へのアクセス権限を付与する文)

      • REVOKE(表へのアクセス権限を取り消す文)

      • COMMENT(表に関するコメントを追加する文)

      • COMMENT(列に関するコメントを追加する文)

      ソース・データベースに対してこれらの文を発行するときは、チェンジ・データ・キャプチャ処理への影響を考慮する必要はありません。

    • stop_on_ddlパラメータを'N'に設定した場合、チェンジ・データ・キャプチャの実行中にDDLが検出されても、チェンジ・データ・キャプチャは停止しません。ただし、DDLでチェンジ・セットが停止しないときでも、キャプチャに影響するDDL変更が発生した場合は、その変更が原因で取得エラーが発生する可能性があります。


      関連項目:

      取得エラーの影響およびそのリカバリ方法については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

    DDL文が原因で処理が停止すると、どのチェンジ・セットの処理が停止したのか、また停止の原因となったDDL文は何かを示すメッセージがアラート・ログに書き込まれます。同様に、チェンジ・データ・キャプチャがDDL文を無視して処理を続行した場合は、無視されたDDL文を示すメッセージがアラート・ログに書き込まれます。


CREATE_CHANGE_TABLEプロシージャ

このプロシージャでは、指定されたスキーマ内にチェンジ・テーブルを作成します。


注意:

CREATE_CHANGE_TABLEプロシージャで参照するソース・テーブルは、プロシージャのコール前にパブリッシャが事前に作成しておくことをお薦めします。このプロシージャで指定するチェンジ・セットのstop_on_ddlパラメータが'Y'に設定されている場合は、特に重要です。

構文

DBMS_CDC_PUBLISH.CREATE_CHANGE_TABLE(
     owner                  IN VARCHAR2,
     change_table_name      IN VARCHAR2,
     change_set_name        IN VARCHAR2,
     source_schema          IN VARCHAR2,
     source_table           IN VARCHAR2,
     column_type_list       IN VARCHAR2,
     capture_values         IN VARCHAR2,
     rs_id                  IN CHAR,
     row_id                 IN CHAR,
     user_id                IN CHAR,
     timestamp              IN CHAR,
     object_id              IN CHAR,
     source_colmap          IN CHAR,
     target_colmap          IN CHAR,
     options_string         IN VARCHAR2,
     ddl_markers            IN CHAR  DEFAULT 'Y');

パラメータ

表33-14 CREATE_CHANGE_TABLEプロシージャのパラメータ

パラメータ 説明

owner

チェンジ・テーブルを所有するスキーマの名前。

change_table_name

作成するチェンジ・テーブルの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・テーブルの名前を指定します。

change_set_name

作成するチェンジ・テーブルが保存されるチェンジ・セットの名前。

source_schema

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

source_table

変更レコードが取得されるソース・テーブル。

column_type_list

追跡されるユーザー列とデータ・タイプ。カンマ区切りリストを使用して指定します。

capture_values

更新操作で取得する値として、次のいずれかを選択します。

  • OLD: ソース・テーブルから元の値を取得します。

  • NEW: ソース・テーブルから変更された値を取得します。

  • BOTH: ソース・テーブルから元の値と変更された値を取得します。

rs_id

row_id

user_id

timestamp

object_id

source_colmap

target_colmap

ddl_markers

これらのパラメータは、それぞれ次のように特定の制御列を表します。

  • rs_idパラメータは、RSID$制御列を表します。

  • row_idパラメータは、ROW_ID$制御列を表します。

  • user_idパラメータは、USERNAME$制御列を表します。

  • timestampパラメータは、TIMESTAMP$制御列を表します。

  • object_idパラメータは、SYS_NC_OID$制御列を表します。

  • source_colmapパラメータは、SOURCE_COLMAP$制御列を表します。

  • target_colmapパラメータは、TARGET_COLMAP$制御列を表します。

  • ddl_markersパラメータは、ソース・テーブルでのすべてのDDL操作を追跡し、それらの操作に関する情報をチェンジ・テーブルに格納します。3つの値があり、DDLOPER$は、行われたDDL操作の種類を示すビット・ベクトルです。(このDDL操作の名前を取得するには、プロシージャDBMS_CDC_PUBLISH.GET_DDLOPER(ddloper$)を使用します。)DDLDESC$は、実行された実際のDDL文が含まれているCLOBです。DDLPDOBJN$は、このリリースでは使用されません。

各パラメータには'Y'または'N'のどちらかを指定できます。

  • 'Y': 特定の制御列をチェンジ・テーブルに追加します。

  • 'N': 特定の制御列をチェンジ・テーブルに追加しません。

options_string

DDL文のCREATE TABLEに渡される構文的に正しいオプション。このオプション文字列は、作成されたDDL文のCREATE TABLEにおいて、表の列を定義するカッコの後に追加されます。詳細は、「使用上の注意」を参照してください。



関連項目:

制御列の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

例外

表33-15 CREATE_CHANGE_TABLEプロシージャの例外

例外 説明

ORA-31402

パラメータを認識できません。

ORA-31409

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

ORA-31415

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

ORA-31416

SOURCE_COLMAPの値が無効です。

ORA-31417

列リストに制御列control-column-nameが含まれています。

ORA-31418

ソース・スキーマが存在しません。

ORA-31419

ソース表が存在しません。

ORA-31420

パージ・ジョブを送れません。

ORA-31421

変更表が存在しません。

ORA-31422

所有者スキーマが存在しません。

ORA-31438

変更表が重複しています。

ORA-31447

SYSスキーマに変更表を作成できません。

ORA-31450

change_table_nameの値が無効です。

ORA-31451

capture_valuesの値が無効です。値はOLDNEWまたはBOTHです。

ORA-31452

パラメータの値が無効です。値はYまたはNです。

ORA-31459

DBMS_CDC_PUBLISHパッケージのシステム・トリガーがインストールされていません。

ORA-31467

ソース表に列が見つかりません。

ORA-31471

OBJECT_IDの値が無効です。


使用上の注意

  • パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。

  • チェンジ・テーブルは、ソース・テーブルに対して作成されたDML文(INSERTUPDATEおよびDELETE)から発生した変更データを含むデータベース表です。指定したチェンジ・テーブルは、単一のソース・テーブルからのみ変更を取得できます。

  • チェンジ・テーブルは、次の2種類の列を格納するデータベース表です。

    • ユーザー列。チェンジ・テーブルに常駐するソース・テーブルの実際の列のコピーです。

    • 制御列。チェンジ・テーブルの各変更行の特殊なメタデータをメンテナンスします。制御列の例としては、実行されたDML操作などの情報、取得時間(タイムスタンプ)および変更された列ベクトルなどがあります。パブリッシャは、ユーザー列のリストに制御列の名前を指定しないでください。

  • 分散HotLogモードのチェンジ・データ・キャプチャのステージング・データベースに複数のパブリッシャが存在し、1つのパブリッシャが別のパブリッシャの分散HotLogチェンジ・セットのチェンジ・テーブルを定義している場合、チェンジ・データ・キャプチャは、チェンジ・セットを作成したパブリッシャによって設定されたデータベース・リンクを使用して、ソース・データベースにアクセスします。したがって、チェンジ・テーブルを正常に作成するには、チェンジ・セットを作成したパブリッシャによって設定されたソース・データベースへのリンクを元の状態のままにしておく必要があります。チェンジ・テーブルの作成時に、チェンジ・セットを作成したパブリッシャによって設定されたデータベース・リンクが存在しない場合は、リモート・データベースの接続情報が見つからなかったことを示すエラーが戻されます。

  • パブリッシャは、チェンジ・テーブルのパーティション・プロパティを変更しないでください。チェンジ・データ・キャプチャでは、チェンジ・テーブル管理の一環として、チェンジ・テーブルのパーティションを自動的に管理します。

  • いずれのモードの非同期チェンジ・データ・キャプチャのチェンジ・テーブルを作成する場合でも、パブリッシャは、デフォルト値をそのまま使用するか、またはsource_colmapパラメータおよびobject_idパラメータに'N'を指定する必要があります。また、非同期分散HotLogモードのチェンジ・データ・キャプチャでは、チェンジ・ソースが9.2または10.1の場合、パブリッシャは、デフォルト値をそのまま使用するか、またはrow_idパラメータおよびusernameパラメータに'N'を指定する必要もあります。

  • パブリッシャがrs_idパラメータを指定すると、RSID$列がチェンジ・テーブルに追加されます。RSID$列の値は、トランザクション間ではなく、特定のトランザクション内における操作の取得順序を示します。パブリッシャは、RSID$列値を単独で使用しても、トランザクション間のコミット済操作を整列できません。そのためには、CSCN$列値と組み合せて使用する必要があります。

  • パブリッシャは、options_stringパラメータを指定して、チェンジ・テーブルの物理的なプロパティ、表領域のプロパティなどを制御できます。options_stringパラメータを使用すると、DDL文CREATE TABLEの有効なオプションを、パーティション・プロパティ以外はすべて設定できます。


    注意:

    パブリッシャによるoptions_stringパラメータ定義が、チェンジ・データ・キャプチャ・システムのパフォーマンスと操作に影響します。たとえば、パブリッシャがオプション列に制約をいくつも適用した場合は、パフォーマンスに大きく影響します。また、パブリッシャがNOT NULL制約を適用したときに、取得した変更行において特定の列が変更されていない場合は、その制約によってINSERT操作が失敗し、INSERT操作を含むトランザクションがロールバックされる可能性があります。

  • チェンジ・テーブルがシステム表領域に作成されないようにしてください。そのためには、パブリッシャのデフォルト表領域とシステム表領域を別々の領域に設定するか、パブリッシャがoptions_stringパラメータで表領域を指定します。パブリッシャが表領域を指定せず、パブリッシャのデフォルト表領域とシステム表領域が同じである場合、チェンジ・データ・キャプチャでは、システム表領域にチェンジ・テーブルを作成します。


    関連項目:

    パブリッシャが管理する表領域にチェンジ・テーブルを作成する方法およびその作成例については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。


CREATE_HOTLOG_CHANGE_SOURCEプロシージャ

このプロシージャは、パブリッシャがこのプロシージャをステージング・データベースから実行する場合に、ソース・データベースに分散HotLogチェンジ・ソースを作成します。分散HotLogチェンジ・ソースは、Oracle Streamsの伝播によってステージング・データベースに自動的に転送されるオンラインREDOログ・ファイルのデータに基づいています。

構文

DBMS_CDC_PUBLISH.CREATE_HOTLOG_CHANGE_SOURCE(
     change_source_name     IN VARCHAR2,
     description            IN VARCHAR2 DEFAULT NULL,
     source_database        IN VARCHAR2);

パラメータ

表33-16 CREATE_HOTLOG_CHANGE_SOURCEプロシージャのパラメータ

パラメータ 説明

change_source_name

作成する分散HotLogチェンジ・ソースの名前。各チェンジ・ソースの名前は、Oracleスキーマ・オブジェクトのネーミング規則に従って一意に指定する必要があります。

description

チェンジ・ソースの説明。255文字以下の説明を指定します。

source_database

ステージング・データベースからソース・データベースに定義したデータベース・リンクの名前で、ソース・データベースは、Oracle 9iデータベース、Database 10gリリース1、Oracle Database 10gリリース2またはOracle Database 11gリリース1です。分散HotLogモードのチェンジ・データ・キャプチャのデータベース・リンクの作成方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。


例外

表33-17 CREATE_HOTLOG_CHANGE_SOURCEプロシージャの例外

例外 説明

ORA-31436

変更ソースが重複しています。

ORA-31480

ステージング・データベースおよびソース・データベースは同じにできません。

ORA-31483

パラメータには空白を使用できません。

ORA-31484

ソース・データベースはリリース9.2.0.6以上に設定する必要があります。

ORA-31485

データベース・リンクが無効です。

ORA-31499

必須パラメータにNULL値が指定されました。

ORA-31507

パラメータ値が最大長を超えています。

ORA-31534

Change Data CaptureのパブリッシャにDBAロールがありません。


使用上の注意

  • パブリッシャは、非同期分散HotLogモードのチェンジ・データ・キャプチャでのみこのプロシージャを使用できます。

    このプロシージャは、非同期HotLogモードのチェンジ・データベース・キャプチャでチェンジ・ソースを作成する場合に使用することはできません。非同期HotLogモードのチェンジ・データベース・キャプチャでは、パブリッシャは、事前定義されたチェンジ・ソースHOTLOG_SOURCEを使用する必要があります。

  • 分散HotLogチェンジ・ソースには、1つ以上のチェンジ・セットを含めることができますが、すべてが同じステージング・データベース上にある必要があります。

  • ステージング・データベースのパブリッシャは、分散HotLogチェンジ・ソースが異なるソース・データベース上にある場合でも、同じ名前のチェンジ・ソースを複数作成することはできません。

  • パブリッシャが10.2より前のリリースのOracle Databaseでチェンジ・ソースを作成する場合、チェンジ・データ・キャプチャは次の処理を行います。

    • チェンジ・ソース名に基づいてStreamsの取得プロセス、取得キューおよび伝播の名前を生成します。生成した名前がすでに使用されている場合は、その取得プロセス、取得キューまたは伝播を作成できないことを示すエラーが戻されます。

    • ステージング・データベースのCHANGE_SOURCESビューに行を挿入します。挿入した行のSOURCE_TYPE列は、ソースのOracle Databaseがリリース2(10.2)より前のリリースであることを示します。

  • 分散HotLogのチェンジ・ソース、チェンジ・セットおよびチェンジ・セットに含まれるチェンジ・テーブルを作成、変更または削除する場合は、source_databaseパラメータによって示されるデータベース・リンクが存在している必要があります。ただし、このデータベース・リンクは、チェンジ・キャプチャの実行には必要ありません。必要な分散HotLogのチェンジ・ソース、チェンジ・セットおよびチェンジ・テーブルを配置して有効にすると、チェンジ・キャプチャを中断せずにこのデータベース・リンクを削除できます。分散HotLogのチェンジ・ソース、チェンジ・セットおよびチェンジ・テーブルを作成、変更または削除する場合は、このデータベース・リンクを再作成する必要があります。


DROP_CHANGE_SETプロシージャ

このプロシージャでは、CREATE_CHANGE_SETプロシージャで作成された既存のチェンジ・セットを削除します。

構文

DBMS_CDC_PUBLISH.DROP_CHANGE_SET(
     change_set_name     IN VARCHAR2);

パラメータ

表33-18 DROP_CHANGE_SETプロシージャのパラメータ

パラメータ 説明

change_set_name

削除するチェンジ・セットの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・セットの名前を指定します。


例外

表33-19 DROP_CHANGE_SETプロシージャの例外

例外 説明

ORA-31410

変更セットは既存の変更セットではありません。

ORA-31411

変更セットは変更表によって参照されます。

ORA-31485

データベース・リンクが無効です。

ORA-31499

必須パラメータにNULL値が指定されました。

ORA-31505

事前定義済の変更セットは変更または削除できません。

ORA-31507

パラメータ値が最大長を超えています。


使用上の注意

  • パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。

  • 削除するチェンジ・セットにチェンジ・テーブルを含めないでください。

  • 事前定義された同期チェンジ・セットSYNC_SETは削除できません。


DROP_CHANGE_SOURCEプロシージャ

このプロシージャでは、CREATE_AUTOLOG_CHANGE_SOURCEプロシージャで作成された既存のAutoLogチェンジ・ソースまたはCREATE_HOTLOG_CHANGE_SOURCEプロシージャで作成された既存の分散HotLogチェンジ・ソースを削除します。

構文

DBMS_CDC_PUBLISH.DROP_CHANGE_SOURCE(
     change_source_name    IN VARCHAR2);

パラメータ

表33-20 DROP_CHANGE_SOURCEプロシージャのパラメータ

パラメータ 説明

change_source_name

削除するチェンジ・ソースの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・ソースの名前を指定します。


例外

表33-21 DROP_CHANGE_SOURCEプロシージャの例外

例外 説明

ORA-31401

変更ソースは既存の変更ソースではありません。

ORA-31406

変更ソースは変更セットによって参照されます。

ORA-31499

必須パラメータにNULL値が指定されました。

ORA-31504

事前定義済の変更ソースは変更または削除できません。

ORA-31507

パラメータ値が最大長を超えています。


使用上の注意

  • 削除するチェンジ・ソースにチェンジ・セットを含めないでください。

  • 事前定義されたチェンジ・ソースであるHOTLOG_SOURCESYNC_SOURCEは削除できません。


DROP_CHANGE_TABLEプロシージャ

このプロシージャでは、CREATE_CHANGE_TABLEプロシージャで作成された既存のチェンジ・テーブルを削除します。

構文

DBMS_CDC_PUBLISH.DROP_CHANGE_TABLE(
     owner              IN VARCHAR2,
     change_table_name  IN VARCHAR2,
     force_flag         IN CHAR);

パラメータ

表33-22 DROP_CHANGE_TABLEプロシージャのパラメータ

パラメータ 説明

owner

チェンジ・テーブルを所有するスキーマの名前。

change_table_name

削除するチェンジ・テーブルの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・テーブルの名前を指定します。

force_flag

チェンジ・テーブルを参照するサブスクリプションがあるかどうかに基づいて、チェンジ・テーブルを削除します。次のどちらかの値を指定します。

  • 'Y': チェンジ・テーブルを参照するサブスクリプションがある場合でも、チェンジ・テーブルを削除します。

  • 'N': チェンジ・テーブルを参照するサブスクリプションがない場合にのみ、チェンジ・テーブルを削除します。


例外

表33-23 DROP_CHANGE_TABLEプロシージャの例外

例外 説明

ORA-31421

変更表が存在しません。

ORA-31422

所有者スキーマが存在しません。

ORA-31424

変更表はアクティブ・サブスクリプションを持っています。

ORA-31441

表は変更表ではありません。


使用上の注意

  • パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。

  • アクティブ・サブスクリプションが存在するチェンジ・テーブルを削除する場合、パブリッシャはforce_flag => 'Y'パラメータを指定して、DROP_CHANGE_TABLEプロシージャをコールする必要があります。こうすることで、チェンジ・データ・キャプチャの通常の保護が解除され、アクティブ・サブスクリプションが存在する場合でも、チェンジ・テーブルを削除できるようになります。削除されたチェンジ・テーブルを含むサブスクリプションは無効になり、サブスクライバは変更データにアクセスできなくなります。


DROP_SUBSCRIPTIONプロシージャ

このプロシージャでは、サブスクライバがDBMS_CDC_SUBSCRIBE.CREATE_SUBSCRIPTIONプロシージャを事前にコールして作成したサブスクリプションを、パブリッシャが削除できるようにします。

構文

DBMS_CDC_PUBLISH.DROP_SUBSCRIPTION(
     subscription_name  IN VARCHAR2);

パラメータ

表33-24 DROP_SUBSCRIPTIONプロシージャのパラメータ

パラメータ 説明

subscription_name

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


例外

表33-25 DROP_SUBSCRIPTIONプロシージャの例外

例外 説明

ORA-31409

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

ORA-31425

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

ORA-31432

ソース表が無効です。


使用上の注意

  • パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。

  • このプロシージャは、DBMS_CDC_SUBSCRIBE.DROP_SUBSCRIPTIONプロシージャと同様に動作します。

  • このプロシージャを使用すると、サブスクライバが削除しなかったサブスクリプションを、パブリッシャが削除する方法が提供されます。不要になったサブスクリプションがまだ存在し、チェンジ・テーブル内に変更データが保持され続ける可能性があります。パブリッシャは、このプロシージャを使用してそのようなサブスクリプションを削除し、パージ操作を実行して変更データを消去できます。パブリッシャは、不要なサブスクリプションかどうかを確認してから削除することをお薦めします。確認できない場合は、サブスクリプションの削除について、パブリッシャからサブスクリプションの所有者に通知してください。本来は、サブスクライバがDBMS_CDC_SUBSCRIBE.DROP_SUBSCRIPTIONプロシージャを使用して不要になったサブスクリプションを削除するため、パブリッシャがDBMS_CDC_SUBSCRIBE.DROP_SUBSCRIPTIONプロシージャを使用する必要はありません。


GET_DDLOPERファンクション

このファンクションは、2進整数を、実際に行われたDDL操作について説明するわかりやすい文字列に変換します。

構文

DBMS_CDC_PUBLISH.GET_DDLOPER (ddloper IN BINARY_INTEGER)
     RETURN VARCHAR2;

パラメータ

表33-26 ファンクションのパラメータ

パラメータ 説明

ddloper

実際に行われたDDL操作の内容を表す整数値。この値は、サブスクライバ・ビューのddloper$列から取得されます。


次に、変更マーカーの使用方法を示します。まずDDL文を実行し、次にDDL文が取得されていることを確認します。

ALTER TABLE cdc_psales DROP PARTITION Dec_06;

SELECT ddloper$, DECODE(ddloper$, NULL, 'NULL',
       DBMS_CDC_PUBLISH.GET_DDLOPER(ddloper$)) 
          AS DDL_OPER
FROM cdc_psales_act
WHERE DDLOPER$ IS NOT NULL
ORDER BY cscn$;

ddloper$            DDL_OPER
---------------------------------
512                 Drop Partition
1 row selected.

SELECT ddldesc$
FROM cdc_psales_act
WHERE ddloper$
IS NOT NULL 
ORDER BY cscn;

DDLDESC$
------------------------
alter table cdc_psales drop partition Dec_06
1 row selected.

使用上の注意

  • ddloperに対して無効な値が指定されている場合は、このファンクションによって「DDLOPR$の値が無効です。」が戻されます。

  • このファンクションは、非同期チェンジ・データ・キャプチャに対してのみ機能します。


PURGEプロシージャ

このプロシージャでは、すべてのサブスクリプションによってチェンジ・テーブルの使用状況を監視し、サブスクリプションに不要になった行を判別した上で、それらの不要な行を削除してチェンジ・テーブルのサイズが無制限に拡大することを防ぎます。このプロシージャをコールすると、ステージング・データベース内のすべてのチェンジ・テーブルがパージされます。

構文

DBMS_CDC_PUBLISH.PURGE;

例外

パージ操作では、標準のOracle例外(権限違反など)のみが戻されます。

使用上の注意

  • パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。

  • パブリッシャは、手動または自動でこのプロシージャを実行できます。

    • チェンジ・テーブルからデータをパージする場合は、コマンドラインから手動でこのプロシージャを実行します。

    • パージ操作を定期的に実行してチェンジ・テーブルのサイズを制御する場合は、スクリプトを使用してこのプロシージャを実行します。

  • (パブリッシャ、およびチェンジ・データ・キャプチャのデフォルト・パージ・ジョブで使用される)DBMS_CDC_PUBLISH.PURGEプロシージャは、(サブスクライバが使用する)DBMS_CDC_SUBSCRIBE.PURGE_WINDOWプロシージャとは異なることに注意してください。DBMS_CDC_PUBLISH.PURGEプロシージャをコールすると、不要な行がチェンジ・テーブルから物理的に削除されます。一方、DBMS_CDC_SUBSCRIBE.PURGE_WINDOWプロシージャをコールすると、サブスクリプション・ウィンドウから変更行が論理的に消去されますが、元のチェンジ・テーブルから行が物理的に削除されるわけではありません。


PURGE_CHANGE_SETプロシージャ

このプロシージャでは、指定されたチェンジ・セット内のすべてのチェンジ・テーブルから不要な行を削除します。このプロシージャを使用すると、標準のPURGEプロシージャよりも細かいレベルでパージ操作を実行できます。

構文

DBMS_CDC_PUBLISH.PURGE_CHANGE_SET(
    change_set_name IN VARCHAR2,
    force           IN CHAR DEFAULT 'Y',
    purge_date      IN DATE DEFAULT NULL);

パラメータ

表33-27 PURGE_CHANGE_SETプロシージャのパラメータ

パラメータ 説明

change_set_name

既存のチェンジ・セットの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・セットの名前を指定します。

force

'Y'の場合は、パーティションの分割/削除の使用を試行しますが、必要なロックを取得できない場合は、削除文を使用してパージを行います。'N'の場合は、パーティションの分割/削除文を使用してパージを行います。ロックを取得できない場合、データはパージされません。

purge_date

commit_timestampがこの日付以前のすべてのレコードがパージされます。


例外

表33-28 PURGE_CHANGE_SETプロシージャの例外

例外 説明

ORA-31410

変更セットは既存の変更セットではありません。


使用上の注意

  • パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。

  • パブリッシャは、このプロシージャをコマンドラインから手動で実行するか、スクリプトで実行して、特定のチェンジ・セット内のチェンジ・テーブルから不要な行をパージできます。

  • (パブリッシャが使用する)DBMS_CDC_PUBLISH.PURGE_CHANGE_SETプロシージャは、(サブスクライバが使用する)DBMS_CDC_SUBSCRIBE.PURGE_WINDOWプロシージャとは異なることに注意してください。DBMS_CDC_PUBLISH.PURGE_CHANGE_SETプロシージャをコールすると、指定されたチェンジ・セット内のチェンジ・テーブルから不要な行が物理的に削除されます。一方、DBMS_CDC_SUBSCRIBE.PURGE_WINDOWプロシージャをコールすると、サブスクリプション・ウィンドウから変更行が論理的に消去されますが、元のチェンジ・テーブルから行が物理的に削除されるわけではありません。


PURGE_CHANGE_TABLEプロシージャ

このプロシージャでは、指定されたチェンジ・テーブルから不要な行を削除します。このプロシージャを使用すると、標準のPURGEプロシージャまたはPURGE_CHANGE_SETプロシージャよりも細かいレベルでパージ操作を実行できます。

構文

DBMS_CDC_PUBLISH.PURGE_CHANGE_TABLE(
     owner               IN VARCHAR2,
     change_table_name   IN VARCHAR2,
     force               IN CHAR DEFAULT 'Y',
     purge_date          IN DATE DEFAULT NULL);

パラメータ

表33-29 PURGE_CHANGE_TABLEプロシージャのパラメータ

パラメータ 説明

owner

指定されたチェンジ・テーブルの所有者。

change_table_name

既存のチェンジ・テーブルの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・テーブルの名前を指定します。

force

'Y'の場合は、パーティションの分割/削除の使用を試行しますが、必要なロックを取得できない場合は、削除文を使用してパージを行います。'N'の場合は、パーティションの分割/削除文を使用してパージを行います。ロックを取得できない場合、データはパージされません。

purge_date

commit_timestampがこの日付以前のすべてのレコードがパージされます。


例外

表33-30 PURGE_CHANGE_TABLEプロシージャの例外

例外 説明

ORA-31421

変更表が存在しません。


使用上の注意

  • パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。

  • パブリッシャは、このプロシージャをコマンドラインから手動で実行するか、スクリプトで実行して、特定のチェンジ・テーブルから不要な行をパージできます。

  • (パブリッシャが使用する)DBMS_CDC_PUBLISH.PURGE_CHANGE_TABLEプロシージャは、(サブスクライバが使用する)DBMS_CDC_SUBSCRIBE.PURGE_WINDOWプロシージャとは異なることに注意してください。DBMS_CDC_PUBLISH.PURGE_CHANGE_TABLEプロシージャをコールすると、指定されたチェンジ・テーブルから不要な行が物理的に削除されます。一方、DBMS_CDC_SUBSCRIBE.PURGE_WINDOWプロシージャをコールすると、サブスクリプション・ウィンドウから変更行が論理的に消去されますが、元のチェンジ・テーブルから行が物理的に削除されるわけではありません。