注意: 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
パッケージを使用して、チェンジ・ソース、チェンジ・セットおよびチェンジ・テーブルの作成とメンテナンスを行い、それらが不要になった場合は削除します。
パブリッシャ(通常はデータベース管理者)は、主にデータのソースに関与します。また、チェンジ・データ・キャプチャ・システムの構造(チェンジ・ソース、チェンジ・セットおよびチェンジ・テーブル)を記述するスキーマ・オブジェクトを作成します。
大部分のチェンジ・データ・キャプチャ・システムには、1人のパブリッシャおよび多数のサブスクライバが設定されています。パブリッシャは、主に次のタスクを実行します。
ソース・テーブルの変更でパブリッシュが必要なものを決定します。
変更を取得するときのモード(非同期または同期)を選択します。
DBMS_CDC_PUBLISH
パッケージのサブプログラムを使用してソース・テーブルから変更データを取得し、チェンジ・ソース、チェンジ・セットおよびチェンジ・テーブルのオブジェクトの作成と管理を行うことによって、変更データを使用できるようにします。
SQL文のGRANT
およびREVOKE
を使用して、ユーザーやロールに対してチェンジ・テーブルへのSELECT
権限の付与および取消しを行うことで、サブスクライバへのアクセスを制御できます。(サブスクライバがDBMS_CDC_SUBSCRIBE
パッケージを使用して変更データをサブスクライブするには、このようなアクセス制御が必要です。)
注意: 新しいアプリケーションでは、推奨されないプロシージャは使用しないことをお薦めします。推奨されない機能は、下位互換性を維持する目的のみでサポートされています。 |
Oracle Database 11gでは、次のサブプログラムの使用は推奨されていません。
サブスクリプション・ハンドルを指定したDBMS_CDC_PUBLISH.DROP_SUBSCRIPTION
パブリッシャがサブスクリプションを削除するときは、サブスクリプション・ハンドルではなく、削除対象のサブスクリプションの名前を指定してください。
DBMS_CDC_PUBLISH.DROP_SUBSCRIBER_VIEW
サブスクライバ・ビューは、チェンジ・データ・キャプチャによって自動的に削除されるようになりました。
表33-1に、提供されたDBMS_CDC_PUBLISH
パッケージのサブプログラムと各サブプログラムを使用できるモードを示します。「モード」列の「すべて」という値は、同期モード、および非同期チェンジ・データ・キャプチャのすべてのモードでサブプログラムが使用できることを示し、「モード」列の「非同期」という値は、非同期チェンジ・データ・キャプチャのすべてのモード(HotLog、分散HotLogおよびAutoLog)でサブプログラムが使用できることを示します。
表33-1 DBMS_CDC_PUBLISHパッケージのサブプログラム
サブプログラム | モード | 説明 |
---|---|---|
ALTER_AUTOLOG_CHANGE_SOURCEプロシージャ |
非同期AutoLog |
既存のAutoLogチェンジ・ソースのプロパティを1つ以上変更します。 |
|
すべて |
既存のチェンジ・セットのプロパティを1つ以上変更します。 |
|
すべて |
既存のチェンジ・テーブルに対して、列を追加または削除するか、プロパティを変更します。 |
ALTER_HOTLOG_CHANGE_SOURCEプロシージャ |
非同期分散HotLog |
既存の分散HotLogチェンジ・ソースのプロパティを1つ以上変更します。 |
CREATE_AUTOLOG_CHANGE_SOURCEプロシージャ |
非同期AutoLog |
AutoLogチェンジ・ソースを作成します。 |
すべて |
チェンジ・セットを作成します。 |
|
|
すべて |
指定されたスキーマ内にチェンジ・テーブルを作成します。 |
CREATE_HOTLOG_CHANGE_SOURCEプロシージャ |
非同期分散HotLog |
分散HotLogチェンジ・ソースを作成します。 |
|
すべて |
既存のチェンジ・セットを削除します。 |
|
非同期Autologおよび非同期分散Hotlog |
既存のAutoLogまたは分散Hotlogチェンジ・ソースを削除します。 |
|
すべて |
既存のチェンジ・テーブルを削除します。 |
|
すべて |
サブスクライバが作成したサブスクリプションをパブリッシャが削除できるようにします。 |
|
すべて |
2進整数を、実際に行われたDDL操作について説明するわかりやすい文字列に変換します。 |
|
すべて |
ステージング・データベース内のすべてのチェンジ・テーブルから不要な行を削除します。 |
|
すべて |
指定されたチェンジ・セット内のすべてのチェンジ・テーブルから不要な行を削除します。 |
|
すべて |
指定されたチェンジ・テーブルから不要な行を削除します。 |
このプロシージャでは、既存の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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
既存のAutoLogチェンジ・ソースの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・ソースの名前を指定します。 |
|
チェンジ・ソースの新しい説明。255文字以下の説明を指定します。 |
|
このパラメータとdescriptionパラメータの両方を指定しないでください。 |
|
最初のSCNの新しい値。 |
例外
表33-3 ALTER_AUTOLOG_CHANGE_SOURCEプロシージャの例外
例外 | 説明 |
---|---|
|
変更ソースは既存の変更ソースではありません。 |
|
文字列のロック取得中にロック・ハンドルが無効になりました。 |
|
パラメータの値が無効です。値は |
|
|
|
|
|
必須パラメータにNULL値が指定されました。 |
|
変更ソースはAutoLog変更ソースではありません。 |
|
事前定義済の変更ソースは変更または削除できません。 |
|
パラメータ値が最大長を超えています。 |
使用上の注意
このプロシージャでは、NULL
値を指定したプロパティは変更されません。
このプロシージャでは、複数のプロパティを同時に変更できます。
このプロシージャは、非同期AutoLogチェンジ・セットにとって不要になったREDOログを検出した後でSCNを調整する場合に使用できます。
関連項目: 非同期AutoLogチェンジ・セットで不要になったREDOログを検出した後でSCNを調整する場合に、パブリッシャがALTER_AUTOLOG_CHANGE_SOURCE プロシージャを使用する方法については、『Oracle Databaseデータ・ウェアハウス・ガイド』の非同期チェンジ・データ・キャプチャおよびREDOログ・ファイルに関する項を参照してください。 |
このプロシージャでは、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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
既存のチェンジ・セットの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・セットの名前を指定します。 |
|
チェンジ・セットの新しい説明。255文字以下の説明を指定します。 |
|
このパラメータと |
|
同期チェンジ・セットは、チェンジ・データ・キャプチャが有効な状態で作成されます。 非同期チェンジ・セットは、チェンジ・データ・キャプチャが無効な状態で作成されます。 |
|
|
|
このパラメータの値が このパラメータの値が このパラメータが意味を持つのは、 |
|
このパラメータの詳細は、「使用上の注意」を参照してください。 |
例外
表33-5 ALTER_CHANGE_SETプロシージャの例外
例外 | 説明 |
---|---|
|
変更セットは既存の変更セットではありません。 |
|
パラメータの値が無効です。値は |
|
文字列のロック取得中にロック・ハンドルが無効になりました。 |
|
DDL変更レコードを処理できません。 |
|
変更セットのChange Data Captureを有効化できません。 |
|
データベース・リンクが無効です。 |
|
|
|
必須パラメータにNULL値が指定されました。 |
|
事前定義済の変更セットは変更または削除できません。 |
|
パラメータ値が最大長を超えています。 |
|
同期変更セットのパラメータ値が無効です。 |
|
取得エラーのため、変更セットは使用できません。 |
使用上の注意
パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。ただし、事前定義された同期チェンジ・セットであるSYNC_SET
は変更できないため、パブリッシャが定義する同期チェンジ・セットでは、enable_capture
、recover_after_error
、remove_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データ・ウェアハウス・ガイド』を参照してください。 |
このプロシージャでは、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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
チェンジ・テーブルを所有するスキーマの名前。 |
|
変更するチェンジ・テーブルの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・テーブルの名前を指定します。 |
|
|
|
ソース・テーブルの列のうち、チェンジ・テーブルに追加する列またはチェンジ・テーブルから削除する列ごとのユーザー列名およびデータ・タイプ。このリストはカンマで区切ります。 |
|
これらのパラメータは、それぞれ次のように特定の制御列を表します。
各パラメータには
|
関連項目: 制御列の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
例外
表33-7 ALTER_CHANGE_TABLEプロシージャの例外
例外 | 説明 |
---|---|
|
変更表にはすでに指定された列が含まれています。 |
|
入力パラメータの1つ以上の値が不適切です。 |
|
変更セットが存在しません。 |
|
|
|
列リストに制御列control-column-nameが含まれています。 |
|
変更表が存在しません。 |
|
所有者スキーマが存在しません。 |
|
変更表には指定された列が含まれていません。 |
|
操作パラメータの値が無効です。値は |
|
ALTERの対象がありません。 |
|
|
|
|
|
|
使用上の注意
パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。
パブリッシャは、ALTER_CHANGE_TABLE
プロシージャのコールで、ユーザー列の追加と削除を同時には実行できません。このようなスキーマの変更では、追加と削除を別々のプロシージャ・コールで行ってください。
パブリッシャは、column_ list
パラメータに制御列の名前を指定しないでください。
非同期チェンジ・テーブルを変更するとき、パブリッシャはデフォルト値をそのまま使用するか、source_colmap
パラメータとobject_id
パラメータに'N
'を指定する必要があります。また、非同期分散HotLogモードでは、チェンジ・ソースが9.2または10.1の場合、パブリッシャは、デフォルト値をそのまま使用するか、またはrow_id
パラメータおよびusername
パラメータに'N
'を指定する必要もあります。
関連項目: パブリッシャがチェンジ・テーブルに列を追加するときのサブスクリプションへの影響については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
このプロシージャでは、既存の分散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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
既存の分散HotLogチェンジ・ソースの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・ソースの名前を指定します。 |
|
チェンジ・ソースの新しい説明。255文字以下の説明を指定します。 |
|
このパラメータとdescriptionパラメータの両方を指定しないでください。 |
|
|
例外
表33-9 ALTER_HOTLOG_CHANGE_SOURCEプロシージャの例外
例外 | 説明 |
---|---|
|
変更ソースは既存の変更ソースではありません。 |
|
|
|
ステージング・データベースおよびソース・データベースは同じにできません。 |
|
変更ソースはHotLog変更ソースではありません。 |
|
非分散Hotlog変更ソースのオプションが無効です。 |
|
ソース・データベースはリリース9.2.0.6以上に設定する必要があります。 |
|
データベース・リンクが無効です。 |
|
|
|
必須パラメータにNULL値が指定されました。 |
|
事前定義済の変更ソースは変更または削除できません。 |
|
パラメータ値が最大長を超えています。 |
|
変更ソースを有効化できません。 |
|
Change Data CaptureのパブリッシャにDBAロールがありません。 |
このプロシージャでは、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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
チェンジ・ソースの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・ソースの名前を指定します。 |
|
チェンジ・ソースの説明。255文字以下の説明を指定します。 |
|
チェンジ・ソースのソース・データベース・インスタンスのグローバル名。 |
|
チェンジ・ソースのアーカイブREDOログ・ファイル内にあるLogMinerディクショナリの開始時SCN。 |
|
値が |
使用上の注意
パブリッシャは、非同期チェンジ・データ・キャプチャのみでこのプロシージャを使用できます。
パブリッシャは、source_database
パラメータの値を指定するときに注意してください。チェンジ・ソースの作成時、チェンジ・データ・キャプチャはこのパラメータ値の有効性を検証しません。パブリッシャは、ソース・データベースにあるGLOBAL_NAME
ビューのGLOBAL_NAME
列に問い合せて、source_database
パラメータの値を確認できます。
パブリッシャは、ステージング・データベースが存在するシステムにログ・ファイルが自動的にコピーされるように、REDO転送サービスを構成してください。
関連項目: ステージング・データベースが存在するシステムにログ・ファイルが自動的にコピーされるようにREDO転送サービスを構成する方法については、『Oracle Databaseデータ・ウェアハウス・ガイド』の非同期AutoLogパブリッシュの実行に関する項を参照してください。 |
AutoLogチェンジ・ソースは、LogMinerディクショナリを含むアーカイブREDOログ・ファイルから開始する必要があります。CREATE_AUTOLOG_CHANGE_SOURCE
のfirst_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データ・ウェアハウス・ガイド』を参照してください。 |
このプロシージャでは、パブリッシャがチェンジ・セットを作成できるようにします。非同期の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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
チェンジ・セットの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・セットの名前を指定します。 |
|
チェンジ・セットの説明。255文字以下の説明を指定します。 |
|
指定したチェンジ・セットを格納する既存のチェンジ・ソースの名前。 |
|
このパラメータの詳細は、「使用上の注意」を参照してください。 |
|
パブリッシャがチェンジ・セットで変更データの取得を開始する日付を指定します。このパラメータの値は、非同期のHotLogおよびAutoLogモードのチェンジ・データ・キャプチャのみで有効です。 |
|
パブリッシャがチェンジ・セットで変更データの取得を終了する日付を指定します。このパラメータの値は、非同期のHotLogおよびAutoLogモードのチェンジ・データ・キャプチャのみで有効です。 |
例外
表33-13 CREATE_CHANGE_SETプロシージャの例外
例外 | 説明 |
---|---|
|
変更ソースは既存の変更ソースではありません。 |
|
|
|
begin_scnまたはend_scnに無効な値が指定されました。 |
|
変更セットが重複しています。 |
|
パラメータの値が無効です。値は |
|
パラメータには空白を使用できません。 |
|
データベース・リンクが無効です。 |
|
この構成では開始日付または終了日付をサポートできません。 |
|
この構成では変更セットをサポートできません。 |
|
必須パラメータにNULL値が指定されました。 |
|
|
|
パラメータ値が最大長を超えています。 |
|
同期変更セットのパラメータ値が無効です。 |
使用上の注意
パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。ただし、begin_date
、end_date
、stop_on_ddl
の各パラメータのデフォルト値は、同期チェンジ・セットのみでサポートされます。begin_date
およびend_date
パラメータのデフォルト値は、非同期分散HotLogチェンジ・セットのみでサポートされます。
チェンジ・ソースが10.2より前のリリースのOracle Databaseの分散HotLogの場合、チェンジ・データ・キャプチャは、ステージング・データベースのCHANGE_PROPAGATION
およびCHANGE_PROPAGATION_SETS
ビューに行を挿入します。
AutoLogオンライン・チェンジ・ソース(online_log='Y'
を指定して作成)には、1つのみのチェンジ・セットを含めることができます。
begin_date
とend_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 プロシージャで参照するソース・テーブルは、プロシージャのコール前にパブリッシャが事前に作成しておくことをお薦めします。このプロシージャで指定するチェンジ・セットの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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
チェンジ・テーブルを所有するスキーマの名前。 |
|
作成するチェンジ・テーブルの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・テーブルの名前を指定します。 |
|
作成するチェンジ・テーブルが保存されるチェンジ・セットの名前。 |
|
ソース・テーブルが存在するスキーマ。 |
|
変更レコードが取得されるソース・テーブル。 |
|
追跡されるユーザー列とデータ・タイプ。カンマ区切りリストを使用して指定します。 |
|
更新操作で取得する値として、次のいずれかを選択します。
|
|
これらのパラメータは、それぞれ次のように特定の制御列を表します。
各パラメータには
|
|
DDL文の |
関連項目: 制御列の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
例外
表33-15 CREATE_CHANGE_TABLEプロシージャの例外
例外 | 説明 |
---|---|
|
パラメータを認識できません。 |
|
入力パラメータの1つ以上の値が不適切です。 |
|
変更セットが存在しません。 |
|
|
|
列リストに制御列control-column-nameが含まれています。 |
|
ソース・スキーマが存在しません。 |
|
ソース表が存在しません。 |
|
パージ・ジョブを送れません。 |
|
変更表が存在しません。 |
|
所有者スキーマが存在しません。 |
|
変更表が重複しています。 |
|
|
|
|
|
|
|
パラメータの値が無効です。値は |
|
|
|
ソース表に列が見つかりません。 |
|
|
使用上の注意
パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。
チェンジ・テーブルは、ソース・テーブルに対して作成されたDML文(INSERT
、UPDATE
および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データ・ウェアハウス・ガイド』を参照してください。 |
このプロシージャは、パブリッシャがこのプロシージャをステージング・データベースから実行する場合に、ソース・データベースに分散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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
作成する分散HotLogチェンジ・ソースの名前。各チェンジ・ソースの名前は、Oracleスキーマ・オブジェクトのネーミング規則に従って一意に指定する必要があります。 |
|
チェンジ・ソースの説明。255文字以下の説明を指定します。 |
|
ステージング・データベースからソース・データベースに定義したデータベース・リンクの名前で、ソース・データベースは、Oracle 9iデータベース、Database 10gリリース1、Oracle Database 10gリリース2またはOracle Database 11gリリース1です。分散HotLogモードのチェンジ・データ・キャプチャのデータベース・リンクの作成方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
例外
表33-17 CREATE_HOTLOG_CHANGE_SOURCEプロシージャの例外
例外 | 説明 |
---|---|
|
変更ソースが重複しています。 |
|
ステージング・データベースおよびソース・データベースは同じにできません。 |
|
パラメータには空白を使用できません。 |
|
ソース・データベースはリリース9.2.0.6以上に設定する必要があります。 |
|
データベース・リンクが無効です。 |
|
必須パラメータにNULL値が指定されました。 |
|
パラメータ値が最大長を超えています。 |
|
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のチェンジ・ソース、チェンジ・セットおよびチェンジ・テーブルを作成、変更または削除する場合は、このデータベース・リンクを再作成する必要があります。
このプロシージャでは、CREATE_AUTOLOG_CHANGE_SOURCE
プロシージャで作成された既存のAutoLogチェンジ・ソースまたはCREATE_HOTLOG_CHANGE_SOURCE
プロシージャで作成された既存の分散HotLogチェンジ・ソースを削除します。
このプロシージャでは、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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
チェンジ・テーブルを所有するスキーマの名前。 |
|
削除するチェンジ・テーブルの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・テーブルの名前を指定します。 |
|
チェンジ・テーブルを参照するサブスクリプションがあるかどうかに基づいて、チェンジ・テーブルを削除します。次のどちらかの値を指定します。
|
使用上の注意
パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。
アクティブ・サブスクリプションが存在するチェンジ・テーブルを削除する場合、パブリッシャはforce_flag => 'Y'
パラメータを指定して、DROP_CHANGE_TABLE
プロシージャをコールする必要があります。こうすることで、チェンジ・データ・キャプチャの通常の保護が解除され、アクティブ・サブスクリプションが存在する場合でも、チェンジ・テーブルを削除できるようになります。削除されたチェンジ・テーブルを含むサブスクリプションは無効になり、サブスクライバは変更データにアクセスできなくなります。
このプロシージャでは、サブスクライバがDBMS_CDC_SUBSCRIBE.CREATE_SUBSCRIPTION
プロシージャを事前にコールして作成したサブスクリプションを、パブリッシャが削除できるようにします。
使用上の注意
パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。
このプロシージャは、DBMS_CDC_SUBSCRIBE.DROP_SUBSCRIPTION
プロシージャと同様に動作します。
このプロシージャを使用すると、サブスクライバが削除しなかったサブスクリプションを、パブリッシャが削除する方法が提供されます。不要になったサブスクリプションがまだ存在し、チェンジ・テーブル内に変更データが保持され続ける可能性があります。パブリッシャは、このプロシージャを使用してそのようなサブスクリプションを削除し、パージ操作を実行して変更データを消去できます。パブリッシャは、不要なサブスクリプションかどうかを確認してから削除することをお薦めします。確認できない場合は、サブスクリプションの削除について、パブリッシャからサブスクリプションの所有者に通知してください。本来は、サブスクライバがDBMS_CDC_SUBSCRIBE.DROP_SUBSCRIPTION
プロシージャを使用して不要になったサブスクリプションを削除するため、パブリッシャがDBMS_CDC_SUBSCRIBE.DROP_SUBSCRIPTION
プロシージャを使用する必要はありません。
このファンクションは、2進整数を、実際に行われたDDL操作について説明するわかりやすい文字列に変換します。
次に、変更マーカーの使用方法を示します。まず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.
このプロシージャでは、すべてのサブスクリプションによってチェンジ・テーブルの使用状況を監視し、サブスクリプションに不要になった行を判別した上で、それらの不要な行を削除してチェンジ・テーブルのサイズが無制限に拡大することを防ぎます。このプロシージャをコールすると、ステージング・データベース内のすべてのチェンジ・テーブルがパージされます。
使用上の注意
パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。
パブリッシャは、手動または自動でこのプロシージャを実行できます。
チェンジ・テーブルからデータをパージする場合は、コマンドラインから手動でこのプロシージャを実行します。
パージ操作を定期的に実行してチェンジ・テーブルのサイズを制御する場合は、スクリプトを使用してこのプロシージャを実行します。
(パブリッシャ、およびチェンジ・データ・キャプチャのデフォルト・パージ・ジョブで使用される)DBMS_CDC_PUBLISH.PURGE
プロシージャは、(サブスクライバが使用する)DBMS_CDC_SUBSCRIBE.PURGE_WINDOW
プロシージャとは異なることに注意してください。DBMS_CDC_PUBLISH.PURGE
プロシージャをコールすると、不要な行がチェンジ・テーブルから物理的に削除されます。一方、DBMS_CDC_SUBSCRIBE.PURGE_WINDOW
プロシージャをコールすると、サブスクリプション・ウィンドウから変更行が論理的に消去されますが、元のチェンジ・テーブルから行が物理的に削除されるわけではありません。
このプロシージャでは、指定されたチェンジ・セット内のすべてのチェンジ・テーブルから不要な行を削除します。このプロシージャを使用すると、標準の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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
既存のチェンジ・セットの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・セットの名前を指定します。 |
|
|
|
|
使用上の注意
パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。
パブリッシャは、このプロシージャをコマンドラインから手動で実行するか、スクリプトで実行して、特定のチェンジ・セット内のチェンジ・テーブルから不要な行をパージできます。
(パブリッシャが使用する)DBMS_CDC_PUBLISH.PURGE_CHANGE_SET
プロシージャは、(サブスクライバが使用する)DBMS_CDC_SUBSCRIBE.PURGE_WINDOW
プロシージャとは異なることに注意してください。DBMS_CDC_PUBLISH.PURGE_CHANGE_SET
プロシージャをコールすると、指定されたチェンジ・セット内のチェンジ・テーブルから不要な行が物理的に削除されます。一方、DBMS_CDC_SUBSCRIBE.PURGE_WINDOW
プロシージャをコールすると、サブスクリプション・ウィンドウから変更行が論理的に消去されますが、元のチェンジ・テーブルから行が物理的に削除されるわけではありません。
このプロシージャでは、指定されたチェンジ・テーブルから不要な行を削除します。このプロシージャを使用すると、標準の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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
指定されたチェンジ・テーブルの所有者。 |
|
既存のチェンジ・テーブルの名前。Oracleスキーマ・オブジェクトのネーミング規則に従って、チェンジ・テーブルの名前を指定します。 |
|
|
|
|
使用上の注意
パブリッシャは、同期モードと非同期モードのどちらのチェンジ・データ・キャプチャでも、このプロシージャを使用できます。
パブリッシャは、このプロシージャをコマンドラインから手動で実行するか、スクリプトで実行して、特定のチェンジ・テーブルから不要な行をパージできます。
(パブリッシャが使用する)DBMS_CDC_PUBLISH.PURGE_CHANGE_TABLE
プロシージャは、(サブスクライバが使用する)DBMS_CDC_SUBSCRIBE.PURGE_WINDOW
プロシージャとは異なることに注意してください。DBMS_CDC_PUBLISH.PURGE_CHANGE_TABLE
プロシージャをコールすると、指定されたチェンジ・テーブルから不要な行が物理的に削除されます。一方、DBMS_CDC_SUBSCRIBE.PURGE_WINDOW
プロシージャをコールすると、サブスクリプション・ウィンドウから変更行が論理的に消去されますが、元のチェンジ・テーブルから行が物理的に削除されるわけではありません。