この章では、論理変更レコード(LCR)のタイプについて説明します。
この章では、次の項目について説明します。
この項では、論理変更レコード(LCR)の使用に関連する項目について説明します。
Oracle Streamsにおける論理変更レコード(LCR)とは、データベースに対する変更情報が格納されたメッセージ・ペイロードのことです。この変更には、データに対する変更(データ操作言語(DML)の変更)とデータベース・オブジェクトに対する変更(データ定義言語(DDL)の変更)とがあります。
Oracle Streamsを使用すると、取得プロセスによりLCRの形式で取得した変更がキューにエンキューされます。このLCRは、あるデータベースのキューから別のデータベースのキューに伝播できます。最後に、適用プロセスによりLCRを接続先データベースに適用できます。LCRは、手動で作成、エンキューおよびデキューすることもできます。
関連項目: LCRの詳細は、『Oracle Streams概要および管理』を参照してください。 |
表249-1 論理変更レコード(LCR)のタイプ
タイプ | 説明 |
---|---|
|
データベース・オブジェクトに対するデータ定義言語(DDL)の変更を表します。 |
|
データベース・オブジェクトに対するデータ操作言語(DML)の変更を表します。 |
|
表内の行の列値リストを識別します。 |
|
行内の列値を識別します。 |
これらの論理変更レコード(LCR)のタイプは、オラクル社が提供する次のPL/SQLパッケージで使用します。
DBMS_APPLY_ADM
DBMS_AQ
DBMS_AQADM
DBMS_CAPTURE_ADM
DBMS_PROPAGATION_ADM
DBMS_RULE
DBMS_RULE_ADM
DBMS_STREAMS
DBMS_STREAMS_ADM
DBMS_TRANSFORM
このタイプは、データベース・オブジェクトに対するデータ定義言語(DDL)の変更を示します。
DDL論理変更レコード(DDL LCR)を作成または変更する場合は、ddl_text
とbase_table_name
、base_table_owner
、object_type
、object_owner
、object_name
およびcommand_type
の各属性との間で一貫性が保たれていることを確認してください。
この項では、DDL LCRのコンストラクタおよびこのタイプのメンバー・サブプログラムについて説明します。
LCR$_DDL_RECORDサブプログラムの要約(「LCR$_DDL_RECORDとLCR$_ROW_RECORDに共通するサブプログラム」に記載するサブプログラムも含む)
注意:
|
指定した情報を使用して、SYS.LCR$_DDL_RECORD
オブジェクトを作成します。
STATIC FUNCTION CONSTRUCT( source_database_name IN VARCHAR2, command_type IN VARCHAR2, object_owner IN VARCHAR2, object_name IN VARCHAR2, object_type IN VARCHAR2, ddl_text IN CLOB, logon_user IN VARCHAR2, current_schema IN VARCHAR2, base_table_owner IN VARCHAR2, base_table_name IN VARCHAR2, tag IN RAW DEFAULT NULL, transaction_id IN VARCHAR2 DEFAULT NULL, scn IN NUMBER DEFAULT NULL, position IN RAW DEFAULT NULL, edition_name IN VARCHAR2 DEFAULT NULL) RETURN SYS.LCR$_DDL_RECORD;
LCR$_DDL_RECORDコンストラクタ・ファンクションのパラメータ
表249-2 LCR$_DDL_RECORDコンストラクタ・ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
DDL文が発生したデータベース。 ドメイン名を指定しない場合、このファンクションはローカル・ドメインをデータベース名に自動的に追加します。たとえば、ローカル・ドメインが |
|
DDL文で実行されるコマンドのタイプ。 このパラメータは、 関連項目: コマンド・タイプの完全なリストは、『Oracle Call Interfaceプログラマーズ・ガイド』の「SQLコマンド・コード」表を参照してください。 次のコマンド・タイプは、DDL LCRではサポートされていません。 ALTER MATERIALIZED VIEW ALTER MATERIALIZED VIEW LOG ALTER SUMMARY CREATE SCHEMA CREATE MATERIALIZED VIEW CREATE MATERIALIZED VIEW LOG CREATE SUMMARY DROP MATERIALIZED VIEW DROP MATERIALIZED VIEW LOG DROP SUMMARY RENAME マテリアライズド・ビューのコマンド・タイプのスナップショットもサポートされていません。 |
|
DDL文が実行されたオブジェクトを所有するユーザー。 |
|
DDL文が実行されたデータベース・オブジェクト。 |
|
DDL文が実行されたオブジェクトのタイプ。 有効なオブジェクト・タイプは次のとおりです。 CLUSTER FUNCTION INDEX LINK OUTLINE PACKAGE PACKAGE BODY PROCEDURE SEQUENCE SYNONYM TABLE TRIGGER TYPE USER VIEW
|
|
DDL文のテキスト。 このパラメータは、 |
|
DDL文を実行したセッションのユーザー。 |
|
変更済データベース・オブジェクトに対するスキーマが、
このパラメータは、 |
|
DDL文が表に関連するDDLの場合( |
|
DDL文が表に関連するDDLの場合( |
|
LCRの追跡を有効にするバイナリ・タグ。 たとえば、適用による転送を使用する場合は、DDL文の元のソース・データベースを判断するためにこのタグを使用できます。 関連項目: 『Oracle Streamsレプリケーション管理者ガイド』 |
|
トランザクションの識別子。 |
|
取得したLCRの変更レコードがREDOログに書き込まれた時点のSCN。 このSCNの値は、ユーザー作成のLCRに対しては無効です。 |
|
LCRの位置。 LCR位置は、XStream構成で一般的に使用されます。XStreamを使用するには、Oracle GoldenGate製品のライセンスを購入する必要があります。 関連項目: Oracle DatabaseのXStreamガイド |
|
DDL文が実行されたエディションの名前。 |
表249-3 LCR$_DDL_RECORDタイプのサブプログラム
サブプログラム | 説明 |
---|---|
|
現行ユーザーのセキュリティ・ドメイン下でLCRを実行します。 |
GET_BASE_TABLE_NAMEメンバー・ファンクション |
元表(依存表)名を取得します。 |
GET_BASE_TABLE_OWNERメンバー・ファンクション |
元表(依存表)の所有者を取得します。 |
GET_CURRENT_SCHEMAメンバー・ファンクション |
デフォルトのスキーマ(ユーザー)名を取得します。 |
|
|
|
DDL文が実行されたエディションの名前を取得します。 |
|
ログオン・ユーザー名を取得します。 |
|
DDLに含まれるオブジェクトのタイプを取得します。 |
SET_BASE_TABLE_NAMEメンバー・プロシージャ |
元表(依存表)名を設定します。 |
SET_BASE_TABLE_OWNERメンバー・プロシージャ |
元表(依存表)の所有者を設定します。 |
|
デフォルトのスキーマ(ユーザー)名を設定します。 |
|
DDLテキストを設定します。 |
|
DDL文が実行されたエディションの名前を設定します。 |
|
ログオン・ユーザー名を設定します。 |
|
オブジェクト・タイプを設定します。 |
共通のサブプログラム |
|
現行ユーザーのセキュリティ・ドメイン下でDDL LCRを実行します。このプロシージャを使用してLCRが適用された場合、適用ハンドラは実行されません。
注意: EXECUTE メンバー・プロシージャを起動できるのは、Oracle Streams適用プロセスの適用ハンドラ内のみです。 |
GET_DDL_TEXTメンバー・プロシージャ
CLOB
のDDLテキストを取得します。
たとえば、次のPL/SQLコードでは、このプロシージャを使用してDDL LCRのDDLテキストを取得します。
CREATE OR REPLACE PROCEDURE ddl_in_lcr (ddl_lcr in SYS.LCR$_DDL_RECORD) IS ddl_text CLOB; BEGIN DBMS_OUTPUT.PUT_LINE( ' -----------------------------------------' ); DBMS_OUTPUT.PUT_LINE( ' Displaying DDL text in a DDL LCR: ' ); DBMS_OUTPUT.PUT_LINE( ' -----------------------------------------' ); DBMS_LOB.CREATETEMPORARY(ddl_text, true); ddl_lcr.GET_DDL_TEXT(ddl_text); DBMS_OUTPUT.PUT_LINE('DDL text:' || ddl_text); DBMS_LOB.FREETEMPORARY(ddl_text); END; /
注意: GET_DDL_TEXT は、CLOB で使用する領域の管理を容易にするためのメンバー・プロシージャであり、メンバー・ファンクションではありません。前述の例では、CLOB の一時領域が作成され、不要になると解放されることに注意してください。 |
パラメータ
表249-11 SET_OBJECT_TYPEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクト・タイプ。 有効なオブジェクト・タイプは次のとおりです。 CLUSTER FUNCTION INDEX LINK OUTLINE PACKAGE PACKAGE BODY PROCEDURE SEQUENCE SYNONYM TABLE TRIGGER TYPE USER VIEW
|
このタイプは、表内の行に対するデータ操作言語(DML)の変更を表します。このタイプでは、LCR$_ROW_LIST
タイプを使用します。
行論理変更レコード(行LCR)を作成または変更する場合は、command_type
属性に、古い列値の有無と新しい列値の有無について一貫性があることを確認してください。
この項では、DDL LCRのコンストラクタおよびこのタイプのメンバー・サブプログラムについて説明します。
LCR$_ROW_RECORDサブプログラムの要約(「LCR$_DDL_RECORDとLCR$_ROW_RECORDに共通するサブプログラム」に記載するサブプログラムも含む)
注意:
|
指定した情報を使用して、SYS.LCR$_ROW_RECORD
オブジェクトを作成します。
STATIC FUNCTION CONSTRUCT( source_database_name IN VARCHAR2, command_type IN VARCHAR2, object_owner IN VARCHAR2, object_name IN VARCHAR2, tag IN RAW DEFAULT NULL, transaction_id IN VARCHAR2 DEFAULT NULL, scn IN NUMBER DEFAULT NULL, old_values IN SYS.LCR$_ROW_LIST DEFAULT NULL, new_values IN SYS.LCR$_ROW_LIST DEFAULT NULL, position IN RAW DEFAULT NULL, statement IN VARCHAR2 DEFAULT NULL, bind_variables IN SYS.LCR$_ROW_LIST DEFAULT NULL, bind_by_position IN VARCHAR2 DEFAULT 'N') RETURN SYS.LCR$_ROW_RECORD;
LCR$_ROW_RECORDコンストラクタ・ファンクションのパラメータ
表249-12 LCR$_ROW_RECORDコンストラクタ・ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
行の変更が発生したデータベース。 ドメイン名を指定しない場合、このファンクションはローカル・ドメインをデータベース名に自動的に追加します。たとえば、ローカル・ドメインが |
|
DML文で実行されるコマンドのタイプ。 このパラメータは、 有効な値は次のとおりです。 INSERT UPDATE DELETE LOB ERASE LOB WRITE LOB TRIM
|
|
行の変更が発生した表を所有するユーザー。 このパラメータは、 |
|
DML文が実行された表。 このパラメータは、 |
|
LCRの追跡を有効にするバイナリ・タグ。 たとえば、適用による転送を使用する場合は、DML変更の元のソース・データベースを判断するためにこのタグを使用できます。 関連項目: 『Oracle Streamsレプリケーション管理者ガイド』 |
|
トランザクションの識別子。 |
|
変更レコードがREDOログに書き込まれた時点のSCN。 このSCNの値は、ユーザー作成のLCRに対しては無効です。 |
|
DML変更前の行の列値。 DML文が |
|
DML変更後の行の列値。 DML文が LCRによってLOB操作が反映される場合は、補足的にログされた列および関連するLOB情報がこのパラメータに含まれます。 |
|
LCRの位置。 LCR位置は、XStream構成で一般的に使用されます。XStreamを使用するには、Oracle GoldenGate製品のライセンスを購入する必要があります。 関連項目: Oracle DatabaseのXStreamガイド |
|
このパラメータは内部使用専用として予約されています。 |
|
このパラメータは内部使用専用として予約されています。 |
|
このパラメータは内部使用専用として予約されています。 |
注意: Oracle Database 11gリリース2(11.2.0.2)以上では、このコンストラクタ・ファンクションにstatement 、bind_variables およびbind_by_position という新規パラメータが含まれます。 |
表249-13 LCR$_ROW_RECORDタイプのサブプログラム
サブプログラム | 説明 |
---|---|
|
指定した値タイプに応じて、古い値または新しい値として値を列に追加します。 |
CONVERT_LONG_TO_LOB_CHUNKメンバー・プロシージャ |
行LCRの |
|
指定した値タイプに応じて、古い値または新しい値(あるいはその両方)を指定の列から削除します。 |
|
現行ユーザーのセキュリティ・ドメイン下でLCRを実行します。 |
GET_LOB_INFORMATIONメンバー・ファンクション |
列のLOB情報を取得します。 |
|
指定した列のLOBオフセットを取得します。 |
GET_LOB_OPERATION_SIZEメンバー・ファンクション |
|
GET_LONG_INFORMATIONメンバー・ファンクション |
列の |
|
LCRにカプセル化されている変更に対するSQL文を取得します。 |
|
指定した値タイプに応じて、指定の列の古い値または新しい値を取得します。 |
|
指定した値タイプに応じて、古い値または新しい値のリストを取得します。 |
|
行LCRにカプセル化されている変更に対する |
GET_XML_INFORMATIONメンバー・ファンクション |
指定した列のXML情報を取得します。 |
|
内部使用専用として予約されています。 |
|
列のリストを行LCRに保持します。 |
|
LCRの列名を変更します。 |
SET_LOB_INFORMATIONメンバー・プロシージャ |
列のLOB情報を設定します。 |
|
指定した列のLOBオフセットを設定します。 |
SET_LOB_OPERATION_SIZEメンバー・プロシージャ |
LOB列の操作サイズを設定します。 |
|
内部使用専用として予約されています。 |
|
指定した列の値を上書きします。 |
|
指定した値タイプに応じて、LCRの既存の古い値または新しい値を置換します。 |
SET_XML_INFORMATIONメンバー・プロシージャ |
列のXML情報を設定します。 |
共通のサブプログラム |
|
指定した値タイプに応じて、古い値または新しい値として値を列に追加します。列に同じタイプの値がすでに存在する場合は、エラーが発生します。
注意: すでに存在する列値を設定するには、SET_VALUE を実行します。 |
LOB列に関する注意事項
プロシージャDMLハンドラまたはエラー・ハンドラでLOB列を含む行LCRを処理し、ハンドラでLOBアセンブリが使用されている(ハンドラのassemble_lobs
パラメータがTRUE
に設定されている)場合は、ハンドラ・プロシージャのこのメンバー・プロシージャを使用して、LOB列を行LCRに追加します。ハンドラのassemble_lobs
がFALSE
に設定されている場合は、このメンバー・プロシージャを使用してLOB列を行LCRに追加することはできません。
DMLハンドラまたはエラー・ハンドラを使用してLOB列を追加するには、メンバー・プロシージャでcolumn_value
パラメータのLOBロケータを指定します。ADD_COLUMN
メンバー・プロシージャは、ANYDATA
でカプセル化されたLOBロケータが、LOBアセンブリを使用するDMLハンドラまたはエラー・ハンドラで処理されていることを検証します。次の状況では、エラーが発生します。
ハンドラで、ANYDATA
でカプセル化されたLOBロケータを使用して行LCRのエンキューを試行した場合。
正しく設定されていないLOB列を追加しようとした場合。
これらのいずれかの状況によってエラーが発生した場合は、行LCRを含むトランザクションがエラー・キューに移動し、LOBが元の(アセンブルされていない)行LCRで表示されます。
注意:
|
構文
MEMBER PROCEDURE ADD_COLUMN( value_type IN VARCHAR2, column_name IN VARCHAR2, column_value IN ANYDATA);
パラメータ
表249-14 ADD_COLUMNプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列に追加する値のタイプ。 列に古い値を追加するには、 |
|
列名。 この名前は検証されません。指定した名前が無効な場合は、LCRのアプリケーション中にエラーが発生する可能性があります。 |
|
列値。
LOBアセンブリを使用するプロシージャDMLハンドラまたはエラー・ハンドラでメンバー・プロシージャが使用されている場合は、LOBロケータを指定できます。
|
CONVERT_LONG_TO_LOB_CHUNKメンバー・プロシージャ
行LCRのLONG
データをCLOB
に変換するか、または行LCRのLONG
RAW
データをBLOB
に変換します。
このプロシージャは、行LCRの操作コードをLONG
WRITE
からLOB
WRITE
に変更できます。
このメンバー・プロシージャは、ルールベースの変換で使用できます。
このメンバー・プロシージャには、次の制限事項が適用されます。
このメンバー・プロシージャは、適用ハンドラでは使用できません。
LONG
データは、操作コードのINSERT
、UPDATE
またはLONG_WRITE
のいずれかによって、行LCRの一部として送信できます。LONG
データは複数回に分けて送信される場合があるため、このプロシージャは必ず、何もデータがない場合か、元のLONG
データ全体に対して実行するよう確認してください。
LOBからLONG
への変換はサポートされていません。
このプロシージャを行LCRで実行する場合、その行LCRが取得プロセスで作成されている必要があります。つまり、このプロシージャでは永続的な行LCRはサポートされていません。
関連項目: 『Oracle Streamsレプリケーション管理者ガイド』 |
現行ユーザーのセキュリティ・ドメイン下で行LCRを実行します。このプロシージャを使用してLCRが適用された場合、LCRに対して実行される適用ハンドラは実行されません。
このメンバー・プロシージャは、次のいずれかの状況で行LCRに対して実行できます。
LCRが適用ハンドラで処理される場合。
LCRがキュー内にあり、Oracle Streams取得プロセス以外のメカニズム(Oracle Streams適用プロセスやアプリケーションなど)によって最後にエンキューされる場合。
LCRが、LCR$_ROW_RECORD
コンストラクタ・ファンクションを使用して構成されていて、エンキューされていない場合。
LCRがエラー・キュー内にある場合。
注意: カスタム・ルールベースの変換では、行LCRに対してこのメンバー・プロシージャを実行しないでください。実行すると、行LCRがトランザクション・コンテキスト外で実行される場合があります。 |
LOB列に関する注意事項
プロシージャDMLハンドラまたはエラー・ハンドラでLOB列を含む行LCRを処理し、ハンドラでLOBアセンブリが使用されている(ハンドラのassemble_lobs
パラメータがTRUE
に設定されている)場合、このメンバー・プロシージャはアセンブルされた行LCRを実行します。アセンブルされた行LCRは、LOB値をLOBロケータまたはNULL
で表します。
ハンドラのassemble_lobs
がFALSE
に設定されている場合、このメンバー・プロシージャはアセンブルされていない行LCRを実行します。アセンブルされていない行LCRは、LOB値をVARCHAR2
データ・タイプおよびRAW
データ・タイプで表します。これらのアセンブルされていない行LCRは、ハンドラによって変更されている可能性があります。
次の状況では、エラーが発生します。
FALSE
に設定されているassemble_lobs
で構成されたDMLハンドラまたはエラー・ハンドラで、LOBロケータを含む行LCRを実行しようとした場合。
TRUE
に設定されているassemble_lobs
で構成されたDMLハンドラまたはエラー・ハンドラで、VARCHAR2
データ・タイプまたはRAW
データ・タイプで表された1つ以上のLOB値を含む行LCRを実行しようとした場合。
これらのいずれかの状況によってエラーが発生した場合は、行LCRを含むトランザクションがエラー・キューに移動し、LOBが元の(アセンブルされていない)行LCRで表示されます。
GET_LOB_INFORMATIONメンバー・ファンクション
列のLOB情報を取得します。
戻り値は次のいずれかになります。
DBMS_LCR.NOT_A_LOB CONSTANT NUMBER := 1; DBMS_LCR.NULL_LOB CONSTANT NUMBER := 2; DBMS_LCR.INLINE_LOB CONSTANT NUMBER := 3; DBMS_LCR.EMPTY_LOB CONSTANT NUMBER := 4; DBMS_LCR.LOB_CHUNK CONSTANT NUMBER := 5; DBMS_LCR.LAST_LOB_CHUNK CONSTANT NUMBER := 6;
指定した列が存在しない場合は、NULL
を戻します。
行LCRのコマンド・タイプがUPDATE
の場合は、use_old
パラメータに'Y'
を指定すると、列値を簡単に取得できます。
構文
MEMBER FUNCTION GET_LOB_INFORMATION( value_type IN VARCHAR2, column_name IN VARCHAR2, use_old IN VARCHAR2 DEFAULT 'Y') RETURN NUMBER;
パラメータ
表249-17 GET_LOB_INFORMATIONファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
列に戻す値のタイプ。 |
|
列の名前。 |
|
|
指定した列のLOBオフセットを、文字数(CLOB
列の場合)またはバイト数(BLOB
列の場合)で取得します。次のすべての条件を満たす場合のみ、NULL
以外の値を戻します。
列値が存在する場合。
列値が表外のLOBの場合。つまり、情報がDBMS_LCR.LAST_LOB_CHUNK
またはDBMS_LCR.LOB_CHUNK
の場合。
コマンド・タイプがLOB
ERASE
またはLOB
WRITE
の場合。
これらの条件を満たさない場合は、NULL
を戻します。
GET_LOB_OPERATION_SIZEメンバー・ファンクション
LOB列の操作サイズを、文字数(CLOB
列の場合)またはバイト数(BLOB
列の場合)で取得します。次のすべての条件を満たす場合のみ、NULL
以外の値を戻します。
列値が存在する場合。
列値が表外のLOBの場合。
コマンド・タイプがLOB
ERASE
またはLOB
TRIM
の場合。
情報がDBMS_LCR.LAST_LOB_CHUNK
の場合。
これらの条件を満たさない場合は、NULL
を戻します。
構文
MEMBER FUNCTION GET_LOB_OPERATION_SIZE( value_type IN VARCHAR2, column_name IN VARCHAR2) RETURN NUMBER,
GET_LONG_INFORMATIONメンバー・ファンクション
列のLONG
情報を取得します。
戻り値は次のいずれかになります。
DBMS_LCR.NOT_A_LONG CONSTANT NUMBER := 1; DBMS_LCR.NULL_LONG CONSTANT NUMBER := 2; DBMS_LCR.INLINE_LONG CONSTANT NUMBER := 3; DBMS_LCR.LONG_CHUNK CONSTANT NUMBER := 4; DBMS_LCR.LAST_LONG_CHUNK CONSTANT NUMBER := 5;
指定した列が存在しない場合は、NULL
を戻します。
行LCRのコマンド・タイプがUPDATE
の場合は、use_old
パラメータに'Y'
を指定すると、列値を簡単に取得できます。
構文
MEMBER FUNCTION GET_LONG_INFORMATION( value_type IN VARCHAR2, column_name IN VARCHAR2, use_old IN VARCHAR2 DEFAULT 'Y') RETURN NUMBER;
パラメータ
表249-20 GET_LONG_INFORMATIONファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
列に戻す値のタイプ。 |
|
列の名前。 |
|
|
行LCRにカプセル化されている変更に対するSQL文を取得します。このメソッドは、PL/SQLでSQLを生成します。
このメソッドはオーバーロードされています。複数の機能を構文形式ごとに、定義とともに示します。
構文
次のプロシージャは、SQL文をCLOB
データ・タイプで戻します。
MEMBER PROCEDURE GET_ROW_TEXT( row_text IN/OUT CLOB);
次のプロシージャは、バインド変数を持つSQL文をCLOB
データ・タイプで戻します。
MEMBER PROCEDURE GET_ROW_TEXT( row_text IN/OUT CLOB, variable_list IN/OUT LCR$_ROW_LIST, bind_var_syntax IN VARCHAR2 DEFAULT ':');
構文
MEMBER FUNCTION GET_VALUE( value_type IN VARCHAR2, column_name IN VARCHAR2, use_old IN VARCHAR2 DEFAULT 'Y') RETURN ANYDATA;
パラメータ
表249-22 GET_VALUEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
列に戻す値のタイプ。 列の古い値を取得するには、 |
|
列名。 列が存在し、その値が |
|
|
構文
MEMBER FUNCTION GET_VALUES( value_type IN VARCHAR2, use_old IN VARCHAR2 DEFAULT 'Y') RETURN SYS.LCR$_ROW_LIST;
パラメータ
表249-23 GET_VALUESファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
戻す値のタイプ。 古い値のリストを戻す場合は、 |
|
|
行LCRにカプセル化されている変更に対するWHERE
句を取得します。
ROWID
はANSI互換ではないため、ROWID
のかわりに、GET_WHERE_CLAUSE
から戻されるWHERE
句を使用します。生成されたWHERE
句は、元のDML操作のWHERE
句と一致しない場合があります。
INSERT
文のROWID
は、INSERT
で作成された新しい行のROWID
です。INSERT
操作に対して生成されるWHERE
句は、新しい行を識別します。そのため、生成されたWHERE
句には挿入された新しい値がすべて含まれます。
たとえば、hr.departments
表に次のように挿入するとします。
INSERT INTO hr.departments ( department_id, department_name, manager_id, location_id) VALUES (10, 'HR', 20, 40);
生成されたWHERE
句は、値10
、'HR'
、20
および40
を含む行を表します。生成されたWHERE
句は次のとおりです。
WHERE "DEPARTMENT_ID" = 10 AND "DEPARTMENT_NAME" = 'HR' AND "MANAGER_ID" = 20 AND "LOCATION_ID" = 40
UPDATE
文のROWID
は、更新された行のROWID
です。UPDATE
操作に対して生成されるWHERE
句は、UPDATE
実行後の行を識別します。生成されたWHERE
句は、UPDATE
の新旧の値に基づいています。
たとえば、次のようにhr.departments
表を更新するとします。
UPDATE hr.departments SET department_name='Management' WHERE department_name='Administration' AND location_id = 20 AND manager_id = 30 AND department_id = 10;
UPDATE
後の行の値は、10
、'Management'
、30
および20
です。生成されたWHERE
句は、次のように行を識別しています。
WHERE "DEPARTMENT_ID" = 10 AND "DEPARTMENT_NAME" = 'MANAGEMENT' AND "MANAGER_ID" = 30 AND "LOCATION_ID" = 20
新しい値は、"DEPARTMENT_NAME"
に使用されることに注意してください。新しい値は、UPDATE
の後の列の値であるためです。残りの列については、古い値が使用されます。
DELETE
操作のROWID
は、削除される前に存在した行です。生成されたWHERE
句は、DELETE
操作に存在するすべての古い列の値で構成されています。
LOB列は、生成されたWHERE
句には存在しません。生成されるWHERE
句は、LCR内のLOB列の存在による影響を受けません。
このメソッドはオーバーロードされています。複数の機能を構文形式ごとに、定義とともに示します。
構文
次のプロシージャは、SQL文のWHERE
句をCLOB
データ・タイプで戻します。
MEMBER PROCEDURE GET_WHERE_CLAUSE( where_clause IN/OUT CLOB);
次のプロシージャは、SQL文のWHERE
句をバインド変数とともにCLOB
データ・タイプで戻します。
MEMBER PROCEDURE GET_WHERE_CLAUSE( where_clause IN/OUT CLOB, variable_list IN/OUT LCR$_ROW_LIST, bind_var_syntax IN VARCHAR2 DEFAULT ':');
GET_XML_INFORMATIONメンバー・ファンクション
指定した列のXML情報を取得します。
戻り値は次のいずれかになります。
DBMS_LCR.NOT_XML CONSTANT NUMBER := 1; DBMS_LCR.XML_DOC CONSTANT NUMBER := 2; DBMS_LCR.XML_DIFF CONSTANT NUMBER := 3;
DBMS_LCR.NOT_XML
は、列がXMLType
列ではないことを示します。DBMS_LCR.XML_DOC
は、列にXML文書が含まれることを示します。DBMS_LCR.XML_DIFF
は、更新操作の元のXML文書と新しいXML文書間の違いが列に含まれることを示します。
指定した列が存在しない場合は、NULL
を戻します。
IS_STATEMENT_LCRメンバー・ファンクション
このファンクションは内部使用専用として予約されています。
注意: この機能は、Oracle Database 11gリリース2(11.2.0.2)以上で使用できます。 |
構文
MEMBER PROCEDURE RENAME_COLUMN( from_column_name IN VARCHAR2, to_column_name IN VARCHAR2, value_type IN VARCHAR2 DEFAULT '*');
パラメータ
表249-27 RENAME_COLUMNプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
既存の列名。 |
|
新しい列名。 指定した名前の列がすでに存在する場合は、エラーが発生します。 |
|
列名を変更する値のタイプ。 古い値の列名を変更するには、 新しい値の列名を変更するには、
|
SET_LOB_INFORMATIONメンバー・プロシージャ
列にLOB情報を設定します。
注意: ルールベースの変換、プロシージャDMLハンドラまたはエラー・ハンドラで行LCRを処理する場合は、このメンバー・プロシージャを使用できません。 |
構文
MEMBER PROCEDURE SET_LOB_INFORMATION( value_type IN VARCHAR2, column_name IN VARCHAR2, lob_information IN NUMBER);
パラメータ
表249-28 SET_LOB_INFORMATIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列に設定する値のタイプ。
|
|
列の名前。 列値が存在しない場合は、例外が発生します。このパラメータは、LOB以外の列に対して設定する必要があります。 |
|
次のいずれかの値を指定します。 DBMS_LCR.NOT_A_LOB CONSTANT NUMBER := 1; DBMS_LCR.NULL_LOB CONSTANT NUMBER := 2; DBMS_LCR.INLINE_LOB CONSTANT NUMBER := 3; DBMS_LCR.EMPTY_LOB CONSTANT NUMBER := 4; DBMS_LCR.LOB_CHUNK CONSTANT NUMBER := 5; DBMS_LCR.LAST_LOB_CHUNK CONSTANT NUMBER := 6; |
指定した列のLOBオフセットを、文字数(CLOB
列の場合)またはバイト数(BLOB
列の場合)で設定します。
注意: ルールベースの変換、プロシージャDMLハンドラまたはエラー・ハンドラで行LCRを処理する場合は、このメンバー・プロシージャを使用できません。 |
構文
MEMBER PROCEDURE SET_LOB_OFFSET( value_type IN VARCHAR2, column_name IN VARCHAR2, lob_offset IN NUMBER);
SET_LOB_OPERATION_SIZEメンバー・プロシージャ
LOB列の操作サイズを、文字数(CLOB
列の場合)またはバイト数(BLOB
列の場合)で設定します。
注意: ルールベースの変換、プロシージャDMLハンドラまたはエラー・ハンドラで行LCRを処理する場合は、このメンバー・プロシージャを使用できません。 |
構文
MEMBER PROCEDURE SET_LOB_OPERATION_SIZE( value_type IN VARCHAR2, column_name IN VARCHAR2, lob_operation_size IN NUMBER);
パラメータ
表249-30 SET_LOB_OPERATION_SIZEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列に設定する値のタイプ。 現在は、 |
|
LOB列の名前。 LCRに列値が存在しない場合は、例外が発生します。 |
|
LOBに関する それ以外の場合は、 |
SET_ROW_TEXTメンバー・プロシージャ
このプロシージャは内部使用専用として予約されています。
注意: この機能は、Oracle Database 11gリリース2(11.2.0.2)以上で使用できます。 |
指定した列の古い値または新しい値を上書きします。
列の古い値を上書きする理由の1つは、競合によって発生したエラーを解決するためです。
注意: 行LCRに列を追加するには、ADD_COLUMN を実行します。 |
LOB列に関する注意事項
プロシージャDMLハンドラまたはエラー・ハンドラでLOB列を含む行LCRを処理し、ハンドラでLOBアセンブリが使用されている(ハンドラのassemble_lobs
パラメータがTRUE
に設定されている)場合は、行LCR内のLOB列に対して、ハンドラ・プロシージャのこのメンバー・プロシージャを使用できます。ハンドラのassemble_lobs
がFALSE
に設定されている場合は、LOB列に対してこのメンバー・プロシージャを使用することはできません。
DMLハンドラまたはエラー・ハンドラを使用してLOB列の値を設定するには、メンバー・プロシージャでcolumn_value
パラメータのLOBロケータを指定します。SET_VALUE
メンバー・プロシージャは、ANYDATA
でカプセル化されたLOBロケータが、LOBアセンブリを使用するDMLハンドラまたはエラー・ハンドラで処理されていることを検証します。次の状況では、エラーが発生します。
ハンドラで、ANYDATA
でカプセル化されたLOBロケータを使用して行LCRのエンキューを試行した場合。
LOB列を誤って設定しようとした場合。
これらのいずれかの状況によってエラーが発生した場合は、行LCRを含むトランザクションがエラー・キューに移動し、LOBが元の(アセンブルされていない)行LCRで表示されます。
注意:
|
XMLType列に関する注意事項
プロシージャDMLハンドラまたはエラー・ハンドラでXMLType
列を含む行LCRを処理する場合、LCRに含まれるすべてのXMLType
列およびLOB列は、常にLOBアセンブリを使用してアセンブルされます。ハンドラ・プロシージャのこのメンバー・プロシージャは、1つ以上のXMLType
列を含む行LCRに対して使用できます。
DMLハンドラまたはエラー・ハンドラを使用してXMLType
列の値を設定するには、column_value
パラメータにXMLType
を指定します。SET_VALUE
メンバー・プロシージャは、ANYDATA
でカプセル化されたXMLType
がDMLハンドラまたはエラー・ハンドラで処理されていることを検証します。次の状況では、エラーが発生します。
ハンドラで、ANYDATA
でカプセル化されたXMLType
を使用して行LCRのエンキューを試行した場合。
XMLType
列を誤って設定しようとした場合。
これらのいずれかの状況によってエラーが発生した場合は、行LCRを含むトランザクションがエラー・キューに移動し、XMLType
列が元の(アセンブルされていない)行LCRで表示されます。
注意:
|
構文
MEMBER PROCEDURE SET_VALUE( value_type IN VARCHAR2, column_name IN VARCHAR2, column_value IN ANYDATA);
パラメータ
表249-31 SET_VALUEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
設定する値のタイプ。 列の古い値を設定するには、 |
|
列名。 指定した |
|
列の新しい値。
LOBアセンブリを使用するプロシージャDMLハンドラまたはエラー・ハンドラでメンバー・プロシージャが使用されている場合は、LOB列にLOBロケータを指定します。 |
指定した値タイプに応じて、LCRの古い値または新しい値をすべて置換します。
LOB列に関する注意事項
プロシージャDMLハンドラまたはエラー・ハンドラでLOB列を含む行LCRを処理する場合、このプロシージャを使用できます。ハンドラでLOBアセンブリが使用されている(ハンドラのassemble_lobs
パラメータがTRUE
に設定されている)場合は、ハンドラ・プロシージャのこのメンバー・プロシージャを使用できます。ハンドラのassemble_lobs
がFALSE
に設定されている場合は、行LCRに対してこのメンバー・プロシージャを使用することはできません。
DMLハンドラまたはエラー・ハンドラを使用して行LCRの1つ以上のLOB列の値を設定するには、value_list
パラメータに各LOB列のLOBロケータを指定します。SET_VALUES
メンバー・プロシージャは、ANYDATA
でカプセル化されたLOBロケータが、LOBアセンブリを使用するDMLハンドラまたはエラー・ハンドラで処理されていることを検証します。次の状況では、エラーが発生します。
ハンドラで、ANYDATA
でカプセル化されたLOBロケータを使用して行LCRのエンキューを試行した場合。
LOB列を誤って設定しようとした場合。
これらのいずれかの状況によってエラーが発生した場合は、行LCRを含むトランザクションがエラー・キューに移動し、LOBが元の(アセンブルされていない)行LCRで表示されます。
注意:
|
XMLType列に関する注意事項
プロシージャDMLハンドラまたはエラー・ハンドラでXMLType
列を含む行LCRを処理する場合、LCRに含まれるすべてのXMLType
列およびLOB列は、常にLOBアセンブリを使用してアセンブルされます。ハンドラ・プロシージャのこのメンバー・プロシージャは、1つ以上のXMLType
列を含む行LCRに対して使用できます。
DMLハンドラまたはエラー・ハンドラを使用して行LCRの1つ以上のXMLType
列の値を設定するには、value_list
パラメータに各XMLType
列のXMLType
を指定します。SET_VALUES
メンバー・プロシージャは、ANYDATA
でカプセル化されたXMLType
がDMLハンドラまたはエラー・ハンドラで処理されていることを検証します。次の状況では、エラーが発生します。
ハンドラで、ANYDATA
でカプセル化されたXMLType
を使用して行LCRのエンキューを試行した場合。
XMLType
を誤って設定しようとした場合。
これらのいずれかの状況によってエラーが発生した場合は、行LCRを含むトランザクションがエラー・キューに移動し、XMLType
列が元の(アセンブルされていない)行LCRで表示されます。
注意:
|
パラメータ
表249-33 SET_XML_INFORMATIONプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
列の名前。 LCRに列値が存在しない場合は、例外が発生します。 |
|
次のいずれかの値を指定します。 DBMS_LCR.NOT_XML CONSTANT NUMBER := 1; DBMS_LCR.XML_DOC CONSTANT NUMBER := 2; DBMS_LCR.XML_DIFF CONSTANT NUMBER := 3;
|
次に、LCR$_DDL_RECORD
タイプとLCR$_ROW_RECORD
タイプに共通するファンクションとプロシージャを示します。
表249-34 DDL LCRタイプと行LCRタイプに共通するサブプログラムの要約
サブプログラム | 説明 |
---|---|
|
論理変更レコード(LCR)のコマンド・タイプを取得します。 |
|
現在のLCRが属するトランザクションのコミットSCN(システム変更番号)を取得します。 |
GET_COMMIT_SCN_FROM_POSITION静的ファンクション |
XStreamアウトバウンド・サーバーによって生成される入力位置からトランザクションのコミットSCNを取得します。 |
|
現在のLCRが属するトランザクションのコミット・タイムを取得します。 |
|
LCRのサポートに最小限必要なデータベース互換性を取得します。 |
GET_EXTRA_ATTRIBUTEメンバー・ファンクション |
LCRに指定された追加属性の値を取得します。 |
|
LCRによって変更されるオブジェクトの名前を取得します。 |
|
LCRによって変更されるオブジェクトの所有者を取得します。 |
|
現在のLCRの位置を取得します。 |
|
LCRのSCNを取得します。 |
GET_SCN_FROM_POSITION静的ファンクション |
XStreamアウトバウンド・サーバーによって生成される入力位置からSCNを取得します。 |
GET_SOURCE_DATABASE_NAMEメンバー・ファンクション |
ソース・データベース名を取得します。 |
|
取得プロセスで取得されたLCRの変更がソース・データベースのREDOログで生成された時刻、または永続LCRが作成された時刻を取得します。 |
|
LCRのタグを取得します。 |
|
LCRにカプセル化されている変更を行ったデータベース・インスタンスのスレッド番号を取得します。 |
GET_TRANSACTION_IDメンバー・ファンクション |
LCRのトランザクション識別子を取得します。 |
|
LCRのタグが |
|
LCRのコマンド・タイプを設定します。 |
SET_EXTRA_ATTRIBUTEメンバー・プロシージャ |
LCRに指定された追加属性に値を設定します。 |
|
LCRによって変更されるオブジェクトの名前を設定します。 |
|
LCRによって変更されるオブジェクトの所有者を設定します。 |
SET_SOURCE_DATABASE_NAMEメンバー・プロシージャ |
LCRによって変更されるオブジェクトのソース・データベース名を設定します。 |
|
LCRにタグを設定します。 |
LCRのコマンド・タイプを取得します。
関連項目: コマンド・タイプの完全なリストは、『Oracle Call Interfaceプログラマーズ・ガイド』の「SQLコマンド・コード」表を参照してください。 |
現在のLCRが属するトランザクションのコミットSCN(システム変更番号)を取得します。
トランザクションのコミットSCNは、適用中またはエラー・トランザクションの実行中にのみ使用できます。このファンクションは、プロシージャDMLハンドラ、DDLハンドラまたはエラー・ハンドラでのみ使用できます。
コミットSCNは、不完全なトランザクションに属するLCRについては使用できません。たとえば、永続LCRにはコミットSCNが設定されない可能性があります。LCRでコミットSCNを使用できない場合、このファンクションはNULL
を戻します。
GET_COMMIT_SCN_FROM_POSITION静的ファンクション
XStreamアウトバウンド・サーバーによって生成される入力位置からトランザクションのコミットSCN(システム変更番号)を取得します。
パラメータ
表249-35 GET_COMMIT_SCN_FROM_POSITIONファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
位置。 位置を取得するには、 |
注意: XStreamを使用するには、Oracle GoldenGate製品のライセンスを購入する必要があります。Oracle DatabaseのXStreamガイドを参照してください。 |
現在のLCRが属するトランザクションのコミット・タイムを取得します。
トランザクションのコミット・タイムは、適用中またはエラー・トランザクションの実行中にのみ使用できます。このファンクションは、プロシージャDMLハンドラ、DDLハンドラまたはエラー・ハンドラでのみ使用できます。
コミット・タイムは、不完全なトランザクションに属するLCRに対しては使用できません。たとえば、永続LCRにはコミット・タイムが設定されない可能性があります。LCRに対してコミット・タイムを使用できない場合、このファンクションはNULL
を戻します。
LCRのサポートに最小限必要なデータベース互換性を取得します。Oracle Databaseの互換性は、COMPATIBLE
初期化パラメータを使用して制御します。
このファンクションの戻り値は次のいずれかになります。
戻り値 | COMPATIBLE初期化パラメータと同等のもの |
---|---|
DBMS_STREAMS.COMPATIBLE_9_2 |
9.2.0 |
DBMS_STREAMS.COMPATIBLE_10_1 |
10.1.0 |
DBMS_STREAMS.COMPATIBLE_10_2 |
10.2.0 |
DBMS_STREAMS.COMPATIBLE_11_1 |
11.1.0 |
DBMS_STREAMS.COMPATIBLE_11_2 |
11.2.0 |
DDL LCRは、常にDBMS_STREAMS.COMPATIBLE_9_2
を戻します。
DBMS_STREAMS
パッケージの次のファンクションを使用して、互換性に関する定数の戻り値を取得できます。
COMPATIBLE_9_2
ファンクションは、DBMS_STREAMS.COMPATIBLE_9_2
定数を戻します。
COMPATIBLE_10_1
ファンクションは、DBMS_STREAMS.COMPATIBLE_10_1
定数を戻します。
COMPATIBLE_10_2
ファンクションは、DBMS_STREAMS.COMPATIBLE_10_2
定数を戻します。
COMPATIBLE_11_1
ファンクションは、DBMS_STREAMS.COMPATIBLE_11_1
定数を戻します。
COMPATIBLE_11_2
ファンクションは、DBMS_STREAMS.COMPATIBLE_11_2
定数を戻します。
MAX_COMPATIBLE
ファンクションは、Oracle Databaseの現行リリースに対して可能な最大互換性定数よりも大きい整数を戻します。
これらのファンクションは、ルール条件と適用ハンドラを使用して、LCRのGET_COMPATIBLE
メンバー・ファンクションとともに使用できます。
注意: DBA_STREAMS_UNSUPPORTED データ・ディクショナリ・ビューを問い合せることにより、データベース内のOracle Streamsでサポートされていないデータベース・オブジェクトを確認できます。 |
関連項目:
|
GET_EXTRA_ATTRIBUTEメンバー・ファンクション
LCRに指定された追加属性の値を取得します。戻された追加属性は、ANYDATA
インスタンスに格納されます。DBMS_CAPTURE_ADM
パッケージのINCLUDE_EXTRA_ATTRIBUTE
プロシージャを使用して取得プロセスを実行すると、1つ以上の追加属性を取得できます。
パラメータ
表249-36 GET_EXTRA_ATTRIBUTEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
戻す追加属性の名前。 有効な名前は次のとおりです。
指定された 指定された追加属性に値が存在しない場合、このファンクションは 関連項目: 現行のユーザーの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。 |
現在のLCRの位置を取得します。位置によって、各LCRが一意に識別されます。位置は、各トランザクション内および複数のトランザクション全体で厳密に増加します。
LCR位置は、XStream構成で一般的に使用されます。
構文
MEMBER FUNCTION GET_POSITION() RETURN RAW;
注意: XStreamを使用するには、Oracle GoldenGate製品のライセンスを購入する必要があります。Oracle DatabaseのXStreamガイドを参照してください。 |
パラメータ
表249-37 GET_SCN_FROM_POSITIONファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
位置。 位置を取得するには、 |
注意: XStreamを使用するには、Oracle GoldenGate製品のライセンスを購入する必要があります。Oracle DatabaseのXStreamガイドを参照してください。 |
LCRのタグを取得します。LCRのタグとは、LCRの追跡を有効にするバイナリ・タグです。たとえば、適用による転送を使用する場合は、DML変更またはDDL変更の元のソース・データベースを判断するためにこのタグを使用できます。
関連項目: タグの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。 |
LCRにカプセル化されている変更を行ったデータベース・インスタンスのスレッド番号を取得します。通常、スレッド番号はOracle Real Application Clusters構成で使用されます。
関連項目: 『Oracle Real Application Clusters管理およびデプロイメント・ガイド』 |
LCRのコマンド・タイプを設定します。指定したコマンド・タイプを解釈できない場合は、エラーが発生します。たとえば、INSERT
をGRANT
に変更すると、エラーが発生します。
関連項目:
|
SET_EXTRA_ATTRIBUTEメンバー・プロシージャ
LCRに指定された追加属性に値を設定します。DBMS_CAPTURE_ADM
パッケージのINCLUDE_EXTRA_ATTRIBUTE
プロシージャを使用して取得プロセスを実行すると、1つ以上の追加属性を取得できます。
パラメータ
表249-39 SET_EXTRA_ATTRIBUTEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
設定する追加属性の名前。 有効な名前は次のとおりです。
指定された 関連項目: 現行のユーザーの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。 |
|
指定された追加属性に設定する値。
|
LCRにタグを設定します。LCRのタグとは、LCRの追跡を有効にするバイナリ・タグです。たとえば、適用による転送を使用する場合は、変更の元のソース・データベースを判断するためにこのタグを使用できます。
関連項目: タグの詳細は、『Oracle Streamsレプリケーション管理者ガイド』を参照してください。 |
行内の列値を識別します。
このタイプは、LCR$_ROW_LIST
タイプで使用されます。
構文
CREATE TYPE LCR$_ROW_UNIT AS OBJECT ( column_name VARCHAR2(4000), data ANYDATA, lob_information NUMBER, lob_offset NUMBER, lob_operation_size NUMBER long_information NUMBER); /
属性
表249-44 LCR$_ROW_UNITの属性
属性 | 説明 |
---|---|
|
列の名前。 |
|
列に含まれるデータ。 |
|
列のLOB情報として、次のいずれかの値が含まれます。 DBMS_LCR.NOT_A_LOB CONSTANT NUMBER := 1; DBMS_LCR.NULL_LOB CONSTANT NUMBER := 2; DBMS_LCR.INLINE_LOB CONSTANT NUMBER := 3; DBMS_LCR.EMPTY_LOB CONSTANT NUMBER := 4; DBMS_LCR.LOB_CHUNK CONSTANT NUMBER := 5; DBMS_LCR.LAST_LOB_CHUNK CONSTANT NUMBER := 6; |
|
文字数( 有効な値は、 |
|
LOBに関する
|
|
列の
|