ADD TRANDATA
ADD TRANDATAを使用して、Oracle GoldenGateが必要とするトランザクション情報をトランザクション・レコードから取得できるようにします。
このコマンドを使用する前に、DBLOGINコマンドを使用してデータベース接続を確立してください。
ADD TRANDATAは、次に示すデータベースで有効です。
-
Db2 for i
-
Db2 LUW
-
Db2 z/OS
-
Oracle
-
PostgreSQL
-
SQLサーバー
-
Sybase
他のサポートされるデータベースでは、この機能はすでに存在している可能性があります(または、データベース・インタフェースを通じて構成する必要があります)。
ADD TRANDATAの使用時に様々なデータベースに対してワイルドカードを使用する方法については、次の表を参照してください:
| データベース | ワイルドカードの使用方法 |
|---|---|
| Db2 LUW、Db2 z/OS | ワイルドカードは表名にのみ使用できます。スキーマ名には使用できません。 |
| Oracle | ワイルドカードはスキーマ名および表名に使用できます。PDB名には使用できません。 |
| PostgreSQLおよびSQL Server | ワイルドカードはスキーマ名および表名に使用できます |
Db2 for i
ADD TRANDATAでは、データのジャーナル処理を開始します。ADD TRANDATAコマンドは、STRJRNPFをコールし、表のジャーナリングを開始するために推奨される方法です。この理由は、Record Images (IMAGES): *BOTHの必要なジャーナル・イメージ属性がSTRJRNPFコマンドに確実に設定されるためです。
Db2 LUW
ADD TRANDATAでは、指定した表のDATA CAPTURE CHANGESを有効化します。デフォルトでは、ADD TRANDATAはデータベースに次のいずれかのコマンドを発行します。
ALTER TABLE name DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;
ADD TRANDATAとEXCLUDELONGオプションを使用することで、LONGVAR句を除外できます。
Db2 z/OS
ADD TRANDATAでは、指定した表のDATA CAPTURE CHANGESを有効化します。デフォルトでは、ADD TRANDATAはデータベースに次のいずれかのコマンドを発行します。
ALTER TABLE name DATA CAPTURE CHANGES;
Oracle Database
Oracle AI Database 26ai以上向けのOracle GoldenGate 26aiでは、JSONリレーショナル二面性ビューおよびJSONコレクション表のレプリケーションがサポートされます。ADD TRANDATAコマンドは、JSONリレーショナル二面性ビューおよびJSONコレクション表のサプリメンタル・ロギングを有効にします。ただし、ADD TRANDATAはJSON二面性ビューの実表に影響せず、実表のトランザクション・データは追加されません。詳細は、Oracle GoldenGate MicroservicesドキュメントのJSON DVおよびJSONコレクション表のレプリケーション設定の前提条件を参照してください。
次のようなコマンドを使用すると、表にのみ適用され、JSONリレーショナル二面性ビューおよびJSONコレクション表には適用されないことに注意してください:
ADD TRANDATA HR.*
JSON二面性ビューおよびJSONコレクション表から取得するには、レプリケートする必要がある各JSON二面性ビューおよびJSONコレクション表に対してADD TRANDATAコマンドを実行する必要があります。これにより、レプリケーション用に設定されるJSON二面性ビューおよびJSONコレクション表をユーザーが認識し、システムが過負荷になることを回避できます。
ノート: ADD TRANDATAを使用してJSON二面性ビューの論理レプリケーションを有効にする場合、ワイルドカードはサポートされません。ただし、JSONコレクション表は通常の表と同様にワイルドカードをサポートしているため、TABLE/MAP文でもワイルドカードを使用できます。
21cリリース以降では、このコマンドで、Oracle Databaseの自動取得用の表も有効になります。
デフォルトでは、Oracleに対するADD TRANDATAは、主キーの無条件ロギング、指定した表のすべての一意キーおよび外部キーの条件付きサプリメンタル・ロギングを有効にします。Oracle GoldenGateでOracle AI Databaseのサプリメンタル・ロギングを処理する方法の詳細は、ソースおよびターゲット表の行の一意性の確認を参照してください。
可能な場合は、ADD TRANDATAコマンドではなくADD SCHEMATRANDATAコマンドを使用してください。ADD SCHEMATRANDATAコマンドにより、DDLが実行されたばかりになっているオブジェクトでDMLが発生した場合でも、レプリケーションの継続性が保証されています。除外パラメータを使用して、スキーマ指定からオブジェクトを除外できます。
Oracle GoldenGate DDLレプリケーション機能を使用するには、ADD SCHEMATRANDATAコマンドを使用して必要なサプリメンタル・データをログに記録する必要があります。
ADD SCHEMATRANDATAを使用しているとき、ADD TRANDATAをCOLSオプションとともに使用して、TABLEおよびMAPパラメータでFILTER文およびKEYCOLS句に必要な列など、非キー列を記録することができます。
注意: `ADDを使用することができます。
TRANDATA` for Oracle when DDL support is enabled, but only if you can stop DML on all tables before DDL is performed on them or, if that is not possible, you can guarantee that no users or applications will issue DDL that adds new tables whose names satisfy an object specification in a `TABLE` or `MAP` statement. There must be no possibility that users or applications will issue DDL that changes the key definitions of any tables that are already in the Oracle GoldenGate configuration.
{: .infoboxnote}
Oracle GoldenGateを使用する場合、ソース・データベースを強制ロギング・モードに移行し、データベース・レベルで最小サプリメンタル・ロギングを有効にすることをお薦めします。これにより、更新操作でREDOログに行連鎖情報(存在する場合)が追加されます
Oracle AI Databaseに対してADD TRANDATAを使用する際は、次の点を考慮してください。
-
Oracle GoldenGateがデータの抽出を開始した後にロギングの詳細が変更される場合、データが変更される前に、影響を受ける表から読取りを行っているExtractプロセスを停止してから起動する必要があります。
-
ADD TRANDATAを使用してサプリメンタル・ログ・グループを作成する場合、Oracle GoldenGateは接頭辞GGS_にオブジェクトIDを追加します(たとえばGGS_18342)。
PostgreSQL
ADD TRANDATAコマンドを使用して、表のREPLICA IDENTITY設定を変更できます。REPLICA IDENTITY設定は、UPDATEおよびDELETE操作のためにトランザクション・ログに記録する必要がある表の列のビフォア・イメージを制御します。
SQLサーバー
ADD TRANDATAを使用して、Oracle GoldenGateがSQL操作を再構築するために必要な拡張ロギング情報を提供します。SQL Serverのトランザクション・ログは、デフォルトでは十分な情報を提供しません。
TRANDATAを有効にすると、Oracle GoldenGateはデータベースに対してSQL Serverチェンジ・データ・キャプチャ機能を有効にし、TRANDATAで有効になった各インスタンスに対してチェンジ・データ・キャプチャの表を作成します。
構文
ADD TRANDATA container.owner.table]
[, FILEGROUP filegroup-name]
[, NOSCHEDULINGCOLS | ALLCOLS]
[, ALLOWNONVALIDATEKEYS]
[, PARTIALJSON]
[, PREPARECSN {WAIT | LOCK | NOWAIT | NONE}]
[container.]owner.table
Db2 LUW、Db2 z/OS、Oracle、PostgreSQLおよびSQL Serverで有効です。
2要素または3要素の名前指定。Oracleマルチテナント・コンテナ・データベースを除く、すべてのサポートするデータベースに対し、2つの部分からなる名前owner.tableを使用します。
Oracleマルチテナント・コンテナ・データベースに対し、3つの部分からなる名前container.owner.tableを使用します。任意の構成要素にワイルドカードを使用できます。ワイルドカードとともに使用すると、ADD TRANDATAは、システム・オブジェクトの名前と一致する名前を除外します。システム・オブジェクトではないが、ワイルド・カード・パターンのシステム・オブジェクト名と一致する名前を持つオブジェクトにADD TRANDATAを使用するには、それらのオブジェクトについてワイルドカードを使用せずにADD TRANDATAを発行します。
cdb$rootからコマンドを実行する場合は、データベース側で次のユーザー権限も設定していることを確認してください:
ALTER USER userID SET CONTAINER_DATA = ALL CONTAINER = CURRENT;
schema.table [JOURNAL library/journal] | library/file [JOURNAL library/journal]
Db2 for iで有効です。
表のSQLスキーマおよび名前、またはネイティブ・ライブラリおよびファイル名を指定します。デフォルトのジャーナルはDEFAULTJOURNALコマンドで設定され、JOURNALオプションを省略できます。そうでない場合は必須です。
FILEGROUP filegroup-name
SQL Serverで有効です。
(オプション) FILEGROUPオプションと既存のファイルグループ名を使用して、SQL Serverのチェンジ・データ・キャプチャ・ステージング表を配置するファイルグループを指定できます。
ADD TRANDATA owner.table FILEGROUP cdctables
TRANDATAを有効化するときに、各表に同じFILEGROUPを使用することも必要な場合は、GLOBALSファイルでFILEGROUPオプションを使用できます。
次の例は、GLOBALSファイルでのFILEGROUP myFileGroupの設定を示しています:
FILEGROUP myFileGroup
出力は次のようになります:
Logging of supplemental log data is enabled for table dbo.test1 in filegroup
myFileGroup
この場合、ADD TRANDATAコマンドは、すべての表に対してmyFileGroupを使用します。
ADD TRANDATAとともにFILEGROUPパラメータも使用すると、このコマンドはGLOBALSファイルで定義されたファイルグループ名をオーバーライドします。
たとえば、GLOBALSファイルでFILEGROUP myFileGroupを設定して、次のADD TRANDATAコマンドを実行するとします。
ADD TRANDATA dbo.* FILEGROUP yourFileGroup
次が出力されます:
Logging of supplemental log data is enabled for table dbo.test1 in filegroup
yourFileGroup
この場合、ADD TRANDATAは、すべての表に対してmyFileGroupではなくyourFileGroupを使用します。
GLOBALSまたはADD TRANDATAのどちらにもFILEGROUPを指定しない場合、コマンド・ラインでは、表のTRANDATAを追加するときにデータベースのデフォルトのFILEGROUPを考慮します。たとえば、ADD TRANDATA dbo.*を実行すると、出力は次のようになります。
Logging of supplemental log data is enabled for table dbo.test1 in filegroup
PRIMARY
この場合、デフォルトのFILEGROUPはPrimaryです。INFO TRANDATAコマンドを実行すると、FILEGROUP名はPRIMARYと表示されます。
NOSCHEDULINGCOLS | ALLCOLS
OracleおよびPostgreSQLで有効です。
Oracle GoldenGate 21c以降、実行中のデータベースで自動取得機能がサポートされる場合、NOSCHEDULINGCOLSは、Oracle Ddatabase 21c以降で非推奨です。
これらのオプションは、ADD TRANDATAで指定している表を処理する統合Replicatのロギング要件を満たします。
NOSCHEDULINGCOLS
Oracleでのみ有効です。
スケジュール列のロギングを無効にします。デフォルトでは、ADD TRANDATAによって、指定された表のすべての一意キーおよび外部キーの主キーの無条件ロギングおよび条件付きサプリメンタル・ロギングが有効になります。無条件ロギングでは、現在の操作でキーが変更されたかどうかにかかわらず、主キーの値がログに強制的に記録されます。条件付きロギングでは、現在の操作で外部キーまたは一意キーの少なくとも1つが変更された場合、それらのキーのすべての列値が記録されます。主キー、一意キーおよび外部キーは、依存性を計算するためにインバウンド・サーバーですべて使用できる必要があります。
ALLCOLS
表のすべてのキー列および非キー列の無条件サプリメンタル・ロギングを有効にします。このオプションにより、依存性を計算するために必要なキーに加え、フィルタリング、競合解決または他の目的で使用される他のすべての列のロギングが有効になります。
PostgreSQLの場合、, ALLCOLSは表のREPLICA IDENTITYをFULLに設定します。ALLCOLSは、ADD TRANDATAコマンドの一部として指定され、UPDATEおよびDELETE操作のすべての列のロギングを、これらの列が変更されていない場合でも有効にします。
主キーまたは一意索引のない表の場合、ALLCOLSオプションは冗長です。構文は次のとおりです:
ADD TRANDATA table_name ALLCOLS
COLS (columns)
Oracleで有効です。
COLSオプションでは、特定の非キー列を記録します。KEYCOLS句に指定した列、およびフィルタ処理や操作のために必要となる列のロギングに使用でき、TABLE文のFETCHCOLS句を使用するときよりも効率的に列の値をフェッチできる場合があります。カンマを使用して複数の列を区切ります(たとえばNAME, ID, DOB)。
INCLUDELONG | EXCLUDELONG
Db2 LUWで有効です。
ADD TRANDATAによって発行されるALTER TABLEにINCLUDE LONGVAR COLUMNS属性を含めるかどうかを制御します。デフォルトはINCLUDELONGです。ADD TRANDATAをこのオプションとともに発行すると、Oracle GoldenGateは次の文を発行します。
ALTER TABLE name DATA CAPTURE CHANGES INCLUDE LONGVAR COLUMNS;
EXCLUDELONGを使用すると、次のコマンドが発行されます。
ALTER TABLE name DATA CAPTURE CHANGES;
EXCLUDELONGを使用する場合、Oracle GoldenGateではLONGVAR列を含む表のビフォア・イメージを必要とする機能がサポートされません。たとえば、GETUPDATEBEFORESパラメータなどです。この機能をサポートするには、トランザクション・ログ内のLONGVAR列に対する変更に、列値の前と後の両方のイメージが含まれる必要があります。
NOKEY
Db2 for i、Db2 LUW、Db2 z/OS、Oracleで有効です。
Oracle GoldenGate 21c以降は、実行中のデータベースで自動取得機能がサポートされる場合、NOKEYは、Oracle Database 21c以上では非推奨です。
主キー列のサプリメンタル・ロギングを抑制します。NOKEYを使用する場合は、COLSオプションを使用してキーとして機能できる別の列をロギングし、TABLEまたはMAPパラメータのKEYCOLSオプションを使用してこれらの列を代替キーとして指定します。
NOVALIDATE
Db2 for i、Db2 LUW、Db2 z/OS、Oracleで有効です。
処理中の表に関する追加情報がADD TRANDATAで処理されないようにします。デフォルトでは、このオプションは有効になっています。追加情報の処理によりコマンド・レスポンスに対する経過時間が発生するため、このオプションを使用してレスポンス時間を向上できます。
ALLOWNONVALIDATEDKEYS
Db2 for i、Db2 LUW、Db2 z/OS、Oracleで有効です。
サプリメンタル・ロギングのNON VALIDATEDおよびNOT VALID主キーが含まれます。これらのキーは、Oracle GoldenGateで使用される通常のキーの選択基準をオーバーライドします。GLOBALSのパラメータALLOWNONVALIDATEDKEYSが使用されている場合、ADD SCHEMATRANDATAは、指定されているかどうかにかかわらず、ALLOWNONVALIDATEDKEYSを使用して実行されます。デフォルトでは、NON VALIDATEDおよびNOT VALID主キーは記録されません。
PARTIALJSON
Oracleで有効です。
表レベルで部分的なJSON更新がフェッチされます。有効にすると、REDOに部分的なJSONレコードが含まれます。
TRANLOGOPTIONS FETCHPARTIALJSONパラメータも参照してください。
PREPARECSN {WAIT | LOCK | NOWAIT | NONE}
DMLとDDLの両方についてOracleで有効です。Oracle Data Pump Exportダンプ・ファイルがインスタンス化CSNを含むように、ソースの表を自動的に準備します。Replicatは、(インポート時の) Oracle Data Pumpで設定される表単位のインスタンス化CSNを使用して、トレイル・レコードを除外します。ターゲットでは、データ・ポンプ・インポートによってDBOPTIONS ENABLE_INSTANTIATION_FILTERINGパラメータを使用してシステム表およびビューにインスタンス化SCNが移入されて、表レベルのインスタンス化フィルタリングが有効になります。
WAIT
処理中のトランザクションを待機して表のインスタンス化を準備します。
LOCK
(表のインスタンス化を準備するために)表をロックします。
NOWAIT
デフォルトの動作で、インスタンス化の準備は即座に行われます。
NONE
インスタンス化の準備は発生しません。
例
次の例では、Oracle表で主キーが記録されるか、SQL Server表またはDB2表でサプリメンタル・データが記録されます。これにより、自動取得用の表も有効になります。
ADD TRANDATA hr.employees
次の例では、acctという表のすべてのキーおよび非キー列の無条件サプリメンタル・ロギングを有効にします。これにより、自動取得用の表も有効になります。
ADD TRANDATA hr.employees ALLCOLS
次のOracle AI Databaseの例では、主キーに加え、非キー列のnameおよびaddresが記録されます。これにより、自動取得用の表も有効になります。
ADD TRANDATA hr.employees, COLS (name, address)
次のOracle AI Databaseの例では、主キーはロギングせず、代わりに非キー列のnameとpid をログに記録します。これにより、自動取得用の表も有効になります。
ADD TRANDATA hr.employees, NOKEY, COLS (name, pid)
次の例では、ロギングを追加しますが、表はインスタンス化用に準備されません。これにより、自動取得用の表も有効になります。
ADD TRANDATA hr.employees PREPARECSN NONE
次の例では、追加の表情報の処理を抑制します。これにより、自動取得用の表も有効になります。
ADD TRANDATA hr.employees.*name NOVALIDATE