この章では、論理変更レコード(LCR)のタイプについて説明します。
この章では、次の項目について説明します。
この項では、論理変更レコード(LCR)の使用に関連する項目について説明します。
Oracle Streamsにおける論理変更レコード(LCR)とは、データベースに対する変更情報が格納されたメッセージ・ペイロードのことです。この変更には、データに対する変更(データ操作言語(DML)の変更)とデータベース・オブジェクトに対する変更(データ定義言語(DDL)の変更)とがあります。
Oracle Streamsを使用すると、取得プロセスによりLCRの形式で取得した変更がキューにエンキューされます。このLCRは、あるデータベースのキューから別のデータベースのキューに伝播できます。最後に、適用プロセスによりLCRを接続先データベースに適用できます。LCRは、手動で作成、エンキューおよびデキューすることもできます。
|
関連項目: LCRの詳細は、『Oracle Streams概要および管理』を参照してください。 |
表275-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の各属性との間で一貫性が保たれていることを確認してください。
この項では、行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, root_name IN VARCHAR2 DEFAULT NULL) RETURN SYS.LCR$_DDL_RECORD;
LCR$_DDL_RECORDコンストラクタ・ファンクションのパラメータ
表275-2 LCR$_DDL_RECORDコンストラクタ・ファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
DDL文が発生したデータベース。 LCRがマルチテナント・コンテナ・データベース(CDB)で発生した場合、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文が実行されたエディションの名前。 |
|
|
LCRがCDBと関連付けられている場合、このフィールドでは、CDBのルートのグローバル名が指定されます。 LCRがCDB以外と関連付けられている場合、このフィールドは |
表275-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文が実行されたエディションの名前を設定します。 |
|
|
ログオン・ユーザー名を設定します。 |
|
|
オブジェクト・タイプを設定します。 |
|
共通のサブプログラム |
SYS.LCR$_ROW_RECORDタイプと |
現行ユーザーのセキュリティ・ドメイン下で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の一時領域が作成され、不要になると解放されることに注意してください。 |
パラメータ
表275-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, root_name IN VARCHAR2 DEFAULT NULL) RETURN SYS.LCR$_ROW_RECORD;
LCR$_ROW_RECORDコンストラクタ・ファンクションのパラメータ
表275-12 LCR$_ROW_RECORDコンストラクタ・ファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
行の変更が発生したデータベース。 LCRがCDBで発生した場合、このフィールドでは、行変更が発生したコンテナのグローバル名が指定されます。 ドメイン名を指定しない場合、このファンクションはローカル・ドメインをデータベース名に自動的に追加します。たとえば、ローカル・ドメインが |
|
|
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ガイド |
|
|
LCRがCDBと関連付けられている場合、このフィールドでは、CDBのルートのグローバル名が指定されます。 LCRがCDB以外と関連付けられている場合、このフィールドは |
表275-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情報を設定します。 |
|
共通のサブプログラム |
SYS.LCR$_ROW_RECORDタイプと |
指定した値タイプに応じて、古い値または新しい値として値を列に追加します。列に同じタイプの値がすでに存在する場合は、エラーが発生します。
|
注意: すでに存在する列値を設定するには、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);
パラメータ
表275-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;
パラメータ
表275-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;
パラメータ
表275-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;
パラメータ
表275-22 GET_VALUEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
列に戻す値のタイプ。 列の古い値を取得するには、 |
|
|
列名。 列が存在し、その値が |
|
|
|
構文
MEMBER FUNCTION GET_VALUES( value_type IN VARCHAR2, use_old IN VARCHAR2 DEFAULT 'Y') RETURN SYS.LCR$_ROW_LIST;
パラメータ
表275-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ドキュメントは、列のXMLドキュメントの差分を記述しています。XMLドキュメント全体が置換されることはありません。
指定した列が存在しない場合は、NULLを戻します。
構文
MEMBER PROCEDURE RENAME_COLUMN( from_column_name IN VARCHAR2, to_column_name IN VARCHAR2, value_type IN VARCHAR2 DEFAULT '*');
パラメータ
表275-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);
パラメータ
表275-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);
パラメータ
表275-30 SET_LOB_OPERATION_SIZEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
列に設定する値のタイプ。 現在は、 |
|
|
LOB列の名前。 LCRに列値が存在しない場合は、例外が発生します。 |
|
|
LOBに関する それ以外の場合は、 |
指定した列の古い値または新しい値を上書きします。
列の古い値を上書きする理由の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);
パラメータ
表275-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で表示されます。
|
注意:
|
パラメータ
表275-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タイプに共通するファンクションとプロシージャを示します。
表275-34 DDL LCRタイプと行LCRタイプに共通するサブプログラムの要約
| サブプログラム | 説明 |
|---|---|
|
|
論理変更レコード(LCR)のコマンド・タイプを取得します。 |
|
|
現在のLCRが属するトランザクションのコミットSCN(システム変更番号)を取得します。 |
|
GET_COMMIT_SCN_FROM_POSITION静的ファンクション |
XStreamアウトバウンド・サーバーによって生成される入力位置からトランザクションのコミットSCNを取得します。 |
|
|
現在のLCRが属するトランザクションのコミット・タイムを取得します。 |
|
|
LCRのサポートに最小限必要なデータベース互換性を取得します。 |
|
GET_EXTRA_ATTRIBUTEメンバー・ファンクション |
LCRに指定された追加属性の値を取得します。 |
|
|
LCRによって変更されるオブジェクトの名前を取得します。 |
|
|
LCRによって変更されるオブジェクトの所有者を取得します。 |
|
|
現在のLCRの位置を取得します。 |
|
|
CDBのルートのグローバル名を取得します。 |
|
|
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によって変更されるオブジェクトの所有者を設定します。 |
|
|
CDBのルートのグローバル名を設定します。 |
|
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(システム変更番号)を取得します。
パラメータ
表275-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つ以上の追加属性を取得できます。
パラメータ
表275-36 GET_EXTRA_ATTRIBUTEファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
戻す追加属性の名前。 有効な名前は次のとおりです。
指定された 指定された追加属性に値が存在しない場合、このファンクションは 関連項目: 現行のユーザーの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。 |
現在のLCRの位置を取得します。位置によって、各LCRが一意に識別されます。位置は、各トランザクション内および複数のトランザクション全体で厳密に増加します。
LCR位置は、XStream構成で一般的に使用されます。
構文
MEMBER FUNCTION GET_POSITION() RETURN RAW;
|
注意: XStreamを使用するには、Oracle GoldenGate製品のライセンスを購入する必要があります。Oracle DatabaseのXStreamガイドを参照してください。 |
パラメータ
表275-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つ以上の追加属性を取得できます。
パラメータ
表275-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); /
属性
表275-45 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に関する
|
|
|
列の
|