1 Oracle GoldenGateのためのデータベースの準備

Oracle GoldenGateのためのデータベースの準備方法について学習します。これには、接続とロギングを構成する方法、目的のデータベースでOracle GoldenGateを有効にする方法、フラッシュバック問合せを設定する方法、サーバー・リソースを管理する方法などが含まれます。

内容は次のとおりです。

データベースでのOracle GoldenGateの有効化

Oracle GoldenGateキャプチャおよび適用をサポートするために必要なデータベース・サービスは、すべてのOracleデータベース・バージョンで明示的に有効化する必要があります。これは、ExtractおよびすべてのReplicatモードに必要です。

Oracle GoldenGateを有効化するには、次のデータベース初期化パラメータを設定します。Oracle RACのすべてのインスタンスで同じ設定にする必要があります。

ENABLE_GOLDENGATE_REPLICATION=true

このパラメータは、DBA_FEATURE_USAGE_STATISTICSビューを変更します。このパラメータの詳細は、初期化パラメータに関する項を参照してください。

ExtractおよびReplicatプロセスのための接続の構成

ExtractおよびReplicatでは、tnsnames.oraファイルに専用のサーバー接続が必要です。

開始する前に、Oracleデータベース側に必要な権限を持つ専用ユーザーが存在することを確認してください。Oracle Database 21c以前のユーザー権限の付与を参照してください。

Oracle GoldenGate側では、ExtractおよびReplicatパラメータ・ファイルでUSERIDまたはUSERIDALIASパラメータの値を指定することにより、ExtractおよびReplicatプロセスがこれらの接続を使用するように指示します。

ExtractまたはReplicatパラメータ・ファイルに接続文字列を指定するセキュリティ・オプションは、次のとおりです。

資格証明ストアの方法:

USERIDALIAS ggeast

USERIDALIASの場合、別名ggeastは、実際の接続文字列を含むOracle GoldenGate資格証明ストアに格納されます。次の例では、INFO CREDENTIALSTOREコマンドを使用して、Oracle GoldenGateで構成された資格証明の詳細を表示します。

INFO CREDENTIALSTORE DOMAIN OracleGoldenGate

出力:

Domain: OracleGoldenGate
  Alias: ggeast
  Userid: ggadmin@dc1.example.com:1521/DBEAST.example.com

Bequeath接続の設定

Bequeath接続記述子がtnsnames.oraに追加されている場合、Oracle GoldenGateは、ネットワーク・リスナーを使用することなくデータベース・インスタンスに接続できます。

次の例は、Bequeath接続記述子を使用してデータベースに接続する場合の構成を示しています。

dbbeq =  (DESCRIPTION=   
      (ADDRESS=(PROTOCOL=beq)     
          (ENVS='ORACLE_SID=sales,ORACLE_HOME=/app/db_home/oracle,LD_LIBRARY_PATH=/app/db_home/oracle/lib')     
          (PROGRAM=/app/db_home/oracle/bin/oracle)     
      (ARGV0=oraclesales)     
      (ARGS='(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))'))   
        (CONNECT_DATA=(SID=sales))) 

この例の説明は、次のとおりです。

/app/db_homeは、ターゲットOracleデータベースのインストール・ディレクトリです。

salesは、データベース・サービス名です

ENVSパラメータのORACLE_SIDORACLE_HOMEおよびLD_LIBRARY_PATHは、ターゲットを参照します。

ノート:

これらの環境変数の設定の間に空白がないことを確認してください。

Oracle Database 21c以前のユーザー権限の付与

Oracle GoldenGateからOracleデータベースへの接続に必要なユーザー権限は、ユーザーのタイプによって異なります。

Oracle GoldenGateからOracleデータベースへの接続に必要なユーザー権限は、ユーザーのタイプによって異なります。

権限は、ソース・データベースおよびターゲット・データベースでGoldenGate管理者ユーザーとして実行する必要があるアクションに応じて付与する必要があります。たとえば、トランザクションを挿入、更新および削除するDML操作権限をユーザーに付与するには、GRANT ANY INSERT/UPDATE/DELETE権限を使用し、さらに、DML操作の一部として表および索引を操作することをユーザーに許可するには、GRANT CREATE/DROP/ALTER ANY TABLE/INDEX権限を使用します。

GoldenGate管理者ユーザーにDBAロールがある場合、追加のオブジェクト権限は必要ありません。ただし、GoldenGate管理ユーザーにDBAロールを付与するセキュリティ制約がある場合があります。DBAロールは、Oracle GoldenGateに必ずしも必要とはかぎりません。

レプリケートされるオブジェクトが多数ある場合は、DMLおよびDDL操作にANY権限を使用することを検討してください。これにより、データベース操作に応じていくつかの権限を付与するだけで済むため、GoldenGate管理者ユーザーへの権限のプロビジョニングが簡略化されます。

次の表に、Oracleデータベースに対するGoldenGate管理者ユーザーの重要な権限の一部を示します。説明のために、表では、マルチテナント・コンテナ・データベースの共通ユーザーの例としてc##ggadminを使用し、プラガブル・データベース(PDB)ユーザーとしてggadminを使用します。PDBEASTおよびPDBWESTは、PDB名の例として使用されます。

次の表に、ソースおよびターゲットのOracleデータベースでOracle GoldenGateを使用するためのGoldenGate管理者ユーザーの重要な権限を示します:
権限 Extract Replicat全モード 目的

RESOURCE

あり

あり

オブジェクトの作成に必要

Oracle Database 12cR1以降では、RESOURCEのかわりに次の権限を付与します。

ALTER USER user QUOTA {size | UNLIMITED} ON tablespace;

CONNECT

あり

あり

共通ユーザーSYSTEMは、ルート・コンテナに接続します。この権限は、DBA ロールがユーザーに割り当てられていない場合に不可欠です。

「例: DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGEパッケージを使用した権限の付与」の例を参照してください。

CREATE SESSION

あり

あり

データベースへの接続に必要。

CREATE VIEW

あり

あり

ハートビート表ビューを追加するために必要。

各オブジェクトに固有にする場合は、各オブジェクトの権限を個別に指定することもできます。このような権限を維持するために、特定のデータベース・ロールの作成を検討できます。

ALTER SYSTEM

あり

あり

ロギングの有効化などの管理変更を実行

ALTER USER

あり

あり

マルチテナント・アーキテクチャに必要であり、GGADMINは有効なOracle GoldenGate管理者スキーマである必要があります。

EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE ('REPUSER', CONTAINER=>'PDBEAST');

あり あり
  • Oracle Autonomous Database ExtractおよびReplicatに必要です。ルート・コンテナ(CDB$ROOT))のExtractには、ALLまたは特定のPDB (例: pdbeast)の値が必要になることがあります。

  • ExtractおよびReplicatユーザーの権限を付与。「例: DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGEパッケージを使用した権限の付与」を参照してください。

  • 仮想プライベート・データベースからキャプチャする権限を付与

  • リダクション済データをキャプチャする権限を付与

SYSユーザーとして接続されたDV_GOLDENGATE_ADMINおよびDV_GOLDENGATE_REDO_ACCESS権限をExtractおよびReplicatユーザーに付与。

あり

あり

Data Vaultからキャプチャ「Oracle Data Vaultからキャプチャするための権限」を参照してください。

レルムに適用する場合は、DBMS_MACADM.ADD_AUTH_TO_REALMの権限をReplicatに付与。

該当なし あり

Data Vaultからキャプチャ「Oracle Data Vaultからキャプチャするための権限」を参照してください。

ターゲット表のINSERTUPDATEDELETE

該当なし

あり

レプリケートされたDMLをターゲット・オブジェクトに適用「Oracle DMLのオブジェクトと操作のサポートの詳細」を参照してください

GRANT INSERT ANY TO...
GRANT UPDATE ANY TO...
GRANT DELETE ANY TO...

該当なし

あり

すべての表をレプリケートする場合は、INSERTUPDATEDELETEをすべての表に付与するのではなく、これらの権限をReplicatユーザーに付与。

DDLレプリケーションを実行する場合は、Database Vault所有者として次の権限を付与します:

EXECUTE DBMS_MACADM.AUTHORIZE_DDL(‘GGADMIN USER', ‘SCHEMA FOR DDL’);
なし なし

Data Vaultからキャプチャ「Oracle Data Vaultからキャプチャするための権限」を参照してください。

ターゲット・オブジェクトのDDL権限(DDLサポートを使用している場合)

該当なし

あり

レプリケートされたDDLをターゲット・オブジェクトに発行Oracle DDLのオブジェクトと操作のサポートの詳細を参照してください。

GRANT [CREATE|ALTER|DROP] ANY [TABLE|INDEX|VIEW|PROCEDURE] to GGADMIN;

あり あり 表のDDLレプリケーションの権限を付与。

CREATE ANY TABLE

あり

あり

任意のスキーマで表を作成する権限を付与。特定のスキーマでのみ表を作成できるようにするには、CREATE TABLE権限を使用します。

CREATE ANY VIEW

あり

あり 任意のデータベース・スキーマでビューを作成する権限を付与。特定のスキーマでのビューの作成を許可するには、CREATE VIEW権限を使用します。
SELECT ANY DICTIONARY

あり

あり

ディクショナリ表で適切に機能するためにすべての権限を許可します。

例: Oracleデータベースの共通ユーザーに付与される権限

Oracleデータベース共通ユーザー(次の例のc##ggadmin)に付与される権限:
CREATE USER c##ggadmin IDENTIFIED BY passw0rd CONTAINER=all DEFAULT
TABLESPACE GG_DATA TEMPORARY TABLESPACE temp;
GRANT RESOURCE to c##ggadmin;
GRANT CREATE SESSION to c##ggadmin;
GRANT CREATE VIEW to c##ggadmin;
GRANT CREATE TABLE to c##ggadmin;
GRANT CONNECT to c##ggadmin CONTAINER=all; 
GRANT DV_GOLDENGATE_ADMIN; –-- for data vault user
GRANT DV_GOLDENGATE_REDO_ACCESS; –-- for data vault user
GRANT ALTER SYSTEM to c##ggadmin;
GRANT ALTER USER to c##ggadmin;
ALTER USER c##ggadmin SET CONTAINER_DATA=all CONTAINER=current;
ALTER USER c##ggadmin QUOTA unlimited ON GG_DATA;
GRANT SELECT ANY DICTIONARY to c##ggadmin;
GRANT SELECT ANY TRANSACTION to c##ggadmin;
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('c##ggadmin');

この例では、DBA権限は提供されませんが、必要であれば、ユーザーはDBA_SYS_PRIVSパッケージにアクセスできます。

PDBユーザーggadminに付与される権限は、次の例に示されています:

例: DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGEパッケージを使用した権限の付与

このプロシージャは、ユーザーがOracle GoldenGate管理者になるために必要とする権限を付与します。次の例は、Oracleマルチテナント・データベースに対するExtractの明示的な権限を付与します:

BEGIN  
DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE 
(GRANTEE => 'c##ggadmin',  PRIVILEGE_TYPE => 'CAPTURE',  GRANT_SELECT_PRIVILEGES => TRUE,  DO_GRANTS => TRUE,  CONTAINER => 'ALL'  ); 
END;

詳細は、Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンスDBMS_GOLDENGATE_AUTHを参照してください。

Oracle Data Vaultからキャプチャするための権限

OracleデータベースでSYSユーザーとして接続されている次の権限を付与します。次の権限は、ExtractおよびReplicatのユーザー資格証明に対して設定されます。

  • EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE ('userID','*',
    GRANT_OPTIONAL_PRIVILEGES=>'*');
    GRANT DV_GOLDENGATE_ADMIN, DV_GOLDENGATE_REDO_ACCESS to userID;
  • レルムに適用する場合は、DBMS_MACADM.ADD_AUTH_TO_REALMの権限をReplicatに付与。

    Database Vault所有者として接続し、次のスクリプトを実行します。
    
    BEGIN
    DVSYS.DBMS_MACADM.ADD_AUTH_TO_REALM(
    REALM_NAME => 'Oracle Default Component Protection Realm',GRANTEE => 'userID',AUTH_OPTIONS => 1) ;
    END ;
    /
    EXECUTE_DBMS_MACADM.AUTHORIZE_DDL('SYS', 'SYSTEM');
  • DDLレプリケーションの場合は、Database Vault所有者として次の権限を付与します。

    EXECUTE DBMS_MACADM.AUTHORIZE_DDL
    (‘userID', ‘SCHEMA FOR DDL’);

フラッシュバック問合せの設定

特定の更新レコードを処理するために、Extractによってソース・データベースから追加の行データがフェッチされます。

Oracle GoldenGateでフェッチされるデータは次のとおりです。

  • ユーザー定義型

  • ネストされた表

  • XMLTypeオブジェクト

デフォルトでは、Oracle GoldenGateでフラッシュバック問合せを使用してUNDO (ロールバック)表領域から値をフェッチします。そのように、Oracle GoldenGateでは特定の時点またはSCNで読取り一貫性行イメージを再構築し、REDOレコードと一致させることができます。

最適なフェッチ結果を得るには、ソース・データベースを次のように構成します。

  1. 次のようにOracle初期化パラメータUNDO_MANAGEMENTおよびUNDO_RETENTION(秒単位)を設定することで、REDO保存に十分な時間を設定します。
    UNDO_MANAGEMENT=AUTO
    
    UNDO_RETENTION=86400 
    
    UNDO_RETENTION can be adjusted upward in high-volume environments.
    
  2. 次の式を使用して、UNDO表領域で必要な領域を計算します。
    undo_space = UNDO_RETENTION * UPS + overhead
    

    説明:

    • undo_spaceは、UNDOブロック数です。

    • UNDO_RETENTIONは、UNDO_RETENTIONパラメータの値です(秒単位)。

    • UPSは、1秒当たりのUNDOブロック数です。

    • overheadは、メタデータ(トランザクション表など)の最小オーバーヘッドです。

    システム・ビューV$UNDOSTATを使用して、UPSおよびoverheadを見積ります。

  3. LOBが含まれている表には、次のいずれかを実行します。
    • LOB記憶域句をRETENTIONに設定します。これは、UNDO_MANAGEMENTAUTOに設定したときに作成される表のデフォルトです。

    • RETENTIONのかわりにPCTVERSIONを使用する場合、PCTVERSIONを初期値の25に設定します。これは、STATS EXTRACTコマンドでレポートされるフェッチ統計に基づいて調整できます。これらの統計のSTAT_OPER_ROWFETCH CURRENTBYROWIDフィールドまたはSTAT_OPER_ROWFETCH_CURRENTBYKEYフィールドの値が大きい場合、統計で低い値を示すまでPCTVERSIONを10ずつ増やします。

  4. 次の権限のいずれかをOracle GoldenGate Extractユーザーに付与します。
    GRANT FLASHBACK ANY TABLE TO db_user
    
    GRANT FLASHBACK ON schema.table TO db_user
    

Oracle GoldenGateによって、フェッチの管理に次のパラメータが提供されます。

パラメータまたはコマンド 説明

REPORTFETCHオプションを使用したSTATS EXTRACTコマンド

必要に応じてExtractフェッチ統計を表示します。

REPORTFETCHオプションを使用したSTATOPTIONSパラメータ

常にフェッチ統計が表示されるようにSTATS EXTRACTコマンドを設定します。

MAXFETCHSTATEMENTSパラメータ

Extractによってソース・データベースに保持される準備済の問合せおよびSQLEXEC操作のオープン・カーソル数を制御します。

MAXFETCHSTATEMENTSパラメータ

Extractのデフォルトのフェッチ動作(Extractでフラッシュバック問合せを実行するか、現在のイメージを表からフェッチするか)を制御します。

USELATESTVERSIONまたはNOUSELATESTVERSIONオプションを使用したFETCHOPTIONSパラメータ

UNDOの保存期限が切れている場合や、表の構造が変更された場合など、Extractのフラッシュバック問合せの失敗を処理します。Extractは、現在のイメージを表からフェッチするか、失敗を無視するように設定できます。

REPFETCHEDCOLOPTIONSパラメータ

フェッチされたデータが含まれる証跡レコード、または列が見つからない証跡レコードの処理時に、Replicatで応答を制御します。

サーバー・リソースの管理

Extractはソース・データベース内の基になるログマイニング・サーバーと対話し、Replicatはターゲット・データベース内のインバウンド・サーバーと対話します。この項では、これらのサーバーで消費される共有メモリーを管理するためのガイドラインについて説明します。

サーバーで使用される共有メモリーは、データベースのシステム・グローバル領域(SGA)のStreamsプール部分です。したがって、統合モードで実行されるExtractおよびReplicatプロセスで使用できるメモリーを十分に保持するには、データベース初期化パラメータのSTREAMS_POOL_SIZEを十分に高い値に設定する必要があります。Streamsプールは、データベースの他のコンポーネント(Oracle Streams、アドバンスト・キューイング、データポンプ・エクスポート/インポートなど)でも使用されるため、Oracle GoldenGateのStreamsプールのサイズを設定する際、このことを必ず考慮に入れてください。

デフォルトでは、1つのExtractは、ログマイニング・サーバーに1GBのMAX_SGA_SIZEで実行するように要求します。そのため、同じデータベース・インスタンスで3つのExtractを実行する場合は、Streamsプールに3GB以上のメモリーを割り当てる必要があります。ベスト・プラクティスとしては、Streamsプールの25パーセントが使用可能であるようにします。たとえば、3つのExtractがある場合は、データベースのSTREAMS_POOL_SIZEを次の値に設定します。

3 GB * 1.25 = 3.75 GB

ソース表とターゲット表での行の一意性の保証

Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表に一意の行識別子が必要です。

TABLE文またはMAP文で、KEYCOLS句を使用しない場合には、ロギングされる制約数およびタイプに応じて、Oracle GoldenGateにより、使用される行識別子が次の優先順位で選択されます(「ロギング・プロパティの構成」を参照)。

  1. 拡張(32K) VARCHAR2/NVARCHAR2列が含まれない場合は、主キー。非表示列を含まない主キー。

  2. 一意キー: 非表示列を含まない一意キー。

    非統合Replicatの場合、一意キーの選択は次のとおりです。

    • 仮想列、UDT、ファンクション・ベース列、NULL値可能列、および拡張(32K) VARCHAR2/NVARCHAR2列がない英数字順で最初の一意キー。表示されない索引の一部である列を含むキーをサポートするには、Oracle GoldenGate GLOBALSファイルでALLOWINVISIBLEINDEXKEYSパラメータを使用する必要があります。

    • 仮想列、UDT、拡張(32K) VARCHAR2/NVARCHAR2列、ファンクション・ベース列はないが、Null値可能列がある英数字順で最初の一意キー。表示されない索引の一部である列を含むキーをサポートするには、Oracle GoldenGate GLOBALSファイルでALLOWINVISIBLEINDEXKEYSパラメータを使用する必要があります。

  3. NULL値不可の一意キー: 一意キーの1つ以上の列をNULL値不可にする必要があります。これは、NOALLOWNULLABLEKEYSがデフォルトであるためです。

    ノート:

    ALLOWNULLABLEKEYSは、統合Replicatには無効です。
  4. 前のどのキー型も存在しない場合(表に定義されているその他のキー型が存在する可能性があっても)、Oracle GoldenGateによって、一意なキーでデータベースを使用できるすべての列の擬似キー(仮想列、UDT、ファンクション・ベース列、拡張(32K) VARCHAR2/NVARCHAR2列、およびOracle GoldenGateユーザーによって、Oracle GoldenGate構成から明示的に除外されている列を除く)が作成されます。

    前述の制限事項によって除外されないかぎり、非表示列は擬似キーで使用できます。

ノート:

表に使用可能な他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを作成すると、ソース・システムのOracle GoldenGateのパフォーマンスが低下します。ターゲットでは、このキーはReplicatであまり効率的でないより大きいWHERE句が使用される原因となります。

表に適切なキーがない場合、あるいは既存のキーを使用しない場合は、表に一意の値が常に含まれる列があれば、代替キーを定義できます。ExtractのTABLEパラメータおよびReplicatのMAPパラメータ内にKEYCOLS句を含めることで、この代替キーを定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。詳細は、『Oracle GoldenGateリファレンス』を参照してください。

ロギング・プロパティの構成

Oracle GoldenGateは、REDOログを使用して、ソース・トランザクションのレプリケートに必要なデータをキャプチャします。

Oracle GoldenGateの処理を始める前に、Oracle REDOログをソース・システムに適切に構成する必要があります。

この項では、Oracle GoldenGateに適用される次のロギング・レベルについて説明します。使用するロギング・レベルは、使用しているOracle GoldenGate機能によって異なります。

ノート:

この必要なロギングによってREDOの量が増えます。Oracle GoldenGate処理を開始してログが有効化されるまで待つ場合があります。

この表に、様々なロギング・プロパティのOracle GoldenGateユースケースを示します。

ロギング・オプション コマンド 機能 ユースケース

強制ロギング・モード

ALTER DATABASE FORCE LOGGING;

すべてのトランザクションおよびロードのロギングを強制します。

すべてのOracle GoldenGateユースケースで強くお薦めします。FORCE LOGGINGは、すべての表レベルのNOLOGGING設定をオーバーライドします。

最小のデータベース・レベルのサプリメンタル・ロギング

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA

最小サプリメンタル・ロギングで行連鎖情報をREDOログに追加できるようにします。

すべてのOracle GoldenGateユースケースに必要です。

スキーマ・レベルのサプリメンタル・ロギング、デフォルト設定

「スキーマ・レベルのサプリメンタル・ロギングの有効化」を参照してください。

ADD SCHEMATRANDATA

主キーの無条件のサプリメンタル・ロギングを有効化し、スキーマのすべての表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを有効化します。これらのキーは、すべてスケジューリング列と呼ばれます。

スキーマの現在および将来のすべての表でロギングを有効化します。主キー、一意キーおよび外部キーの列がソースとターゲットの両方で同じでない場合は、ALLCOLSを使用します。DDLサポートを使用する場合に必要です。

サポートされるすべての列で無条件のロギングを使用したスキーマ・レベルのサプリメンタル・ロギング。(サポートされない列タイプの場合は、「スキーマ・レベルのサプリメンタル・ロギングの有効化」を参照してください。)

ALLCOLSオプションを指定したADD SCHEMATRANDATA

スキーマのすべての表で、表のすべての列の無条件のサプリメンタル・ロギングを有効化します。

双方向およびアクティブ/アクティブ構成で使用され、そこでは更新または削除の実行時に、変更された列だけでなくすべての列値がチェックされます。より多くのリソースが消費されますが、最高レベルのリアルタイム・データ検証と競合検出が可能になります。

この方法は、初期ロードにHANDLECOLLISIONSパラメータを使用する場合にも使用する必要があります。

スキーマ・レベルのサプリメンタル・ロギング、最小設定

NOSCHEDULINGCOLSオプションを指定したADD SCHEMATRANDATA

スキーマのすべての表の主キーおよび有効なすべての一意索引の無条件のサプリメンタル・ロギングを有効化します。

非統合Replicatでのみ使用します。これは、最低限必要なスキーマ・レベルのロギングです。

統合Replicatの組込みサポートを使用した表レベルのサプリメンタル・ロギング

「表レベルのサプリメンタル・ロギングの有効化」を参照してください。

ADD TRANDATA

主キーの無条件のサプリメンタル・ロギングを有効化し、表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを有効化します。これらのキーは、すべてスケジューリング列と呼ばれます。

スキーマ・レベルのサプリメンタル・ロギングが使用されていないかぎり、すべてのOracle GoldenGateユースケースで必要です。主キー、一意キーおよび外部キーの列がソースとターゲットの両方で同じでない場合は、ALLCOLSを使用します。

サポートされるすべての列で無条件のロギングを使用した表レベルのサプリメンタル・ロギング。(サポートされない列タイプの場合は、「表レベルのサプリメンタル・ロギングの有効化」を参照してください。)

ALLCOLSオプションを指定したADD TRANDATA

表のすべての列の無条件のサプリメンタル・ロギングを有効化します。

双方向およびアクティブ/アクティブ構成で使用され、そこでは更新または削除の実行時に、変更された列だけでなくすべての列値がチェックされます。より多くのリソースが消費されますが、最高レベルのリアルタイム・データ検証と競合検出が可能になります。

ソースおよびターゲットの主キー、一意キーおよび外部キーがソースとターゲット間で同一でないか、定期的に変更される場合にも使用できます。

表レベルのサプリメンタル・ロギング、最小設定

NOSCHEDULINGCOLSオプションを指定したADD TRANDATA

表の主キーおよび有効なすべての一意索引の無条件のサプリメンタル・ロギングを有効化します。

非統合Replicatおよび非並列Replicatに使用します。これは、最低限必要な表レベルのロギングです。

ノート:

Oracle Databaseは、Extractでログ・ファイルを処理できるように、ARCHIVELOGモードにする必要があります。

内容は次のとおりです。

サブセット・データベース・レプリケーションのロギングの有効化

Oracleソース・データベースを強制ロギング・モードにすることを強くお薦めします。強制ロギング・モードでは、すべてのトランザクションおよびロードのロギングを強制し、反対にユーザーまたは記憶域の設定をオーバーライドします。これにより、Extract構成のソース・データが失われることがなくなります。

サブセット・データベース・レプリケーションと呼ばれる詳細なデータベース・サプリメンタル・ロギング・モードがあります。これは、すべてのOracle GoldenGateおよびXStreamクライアントの基本的な推奨モードです。これは、以前に使用していた最小サプリメンタル・ロギング・モードにかわるものです。

詳細は、Oracle Database SQL言語リファレンスALTER DATABASEを参照してください。

現時点では、サブセット・データベース・レプリケーション・ロギングは、CDB$ROOTで有効になっています(これは、すべてのユーザーPDBに継承されます)。

ノート:

データベース・レベルの主キー(PK)および一意索引(UI)のロギングは、表のサブセットをレプリケートする場合にかぎり非推奨です。ライブ・スタンバイで使用することも、移行やアップグレードの停止時間を短縮するために、Oracle GoldenGateがすべての表をレプリケートする場合に使用することもできます。

次のステップを実行して、サブセット・データベース・レプリケーション・ロギングと強制ロギングを確認し、必要に応じて有効化します。

  1. ALTER SYSTEM権限を持つユーザーとしてSQL*Plusにログインします。
  2. 次のコマンドを発行し、データベースがサプリメンタル・ロギング・モードかどうか、および強制ロギング・モードかどうかを確認します。両方の問合せで結果がYESの場合、データベースはOracle GoldenGate要件を満たしています。
    SELECT SUPPLEMENTAL_LOG_DATA_MIN, FORCE_LOGGING FROM V$DATABASE;
  3. いずれかまたは両方のプロパティで結果がNOの場合、次のステップに進み、必要に応じて有効化します。
    ALTER PLUGGABLE DATABASE pdbname ADD SUPPLEMENTAL LOG DATA SUBSET DATABASE REPLICATION;;
    ALTER DATABASE FORCE LOGGING;
  4. 次のコマンドを発行し、これらのプロパティが有効化されていることを確認します。
    SELECT SUPPLEMENTAL_LOG_DATA_MIN, FORCE_LOGGING FROM V$DATABASE;

    両方のプロパティで、この問合せの出力がYESになる必要があります。

  5. ログ・ファイルを切り替えます。
    ALTER SYSTEM SWITCH LOGFILE;
ディクショナリの検証を実行するには、次のコマンドを実行します。
SELECT con_id, MINIMAL, SUBSET_REP, PRIMARY_KEY, UNIQUE_INDEX, FOREIGN_KEY, ALL_COLUMN FROM CDB_SUPPLEMENTAL_LOGGING;
この問合せの出力は、YESになります。
SUBSET_REP = YES
次の問合せがあるとします。
SELECT NAME, LOG_MODE, FORCE_LOGGING, SUPPLEMENTAL_LOG_DATA_MIN,
SUPPLEMENTAL_LOG_DATA_PK PK, SUPPLEMENTAL_LOG_DATA_UI UI,
SUPPLEMENTAL_LOG_DATA_FK FK, 
SUPPLEMENTAL_LOG_DATA_ALL,
SUPPLEMENTAL_LOG_DATA_SR FROM V$DATABASE;

SUPPLEMENTAL_LOG_DATA_SRに対する問合せの出力はYESになり、SUPPLEMENTAL_LOG_DATA_MINに対する問合せの出力はIMPLICITになります。

以前の最小サプリメンタル・ロギングから新しいサブセット・サプリメンタル・ロギングに切り替えるには:
  1. CDB$ROOTの以前の上位レベルを削除します。
    ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS; 
    ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (UNIQUE) COLUMNS;
    ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;
  2. subset database replicationモードのみを追加します。
    ALTER PLUGGABLE DATABASE pdbname ADD SUPPLEMENTAL LOG DATA SUBSET DATABASE REPLICATION;
  3. すべてのPDBが、このsubset database replicationモードを継承していることを確認します。

スキーマ・レベルのサプリメンタル・ロギングの有効化

Oracle GoldenGateでは、スキーマ・レベルのサプリメンタル・ロギングをサポートしています。スキーマ・レベルのロギングは、Oracle GoldenGate DDLレプリケーション機能を使用する場合に、Oracleソース・データベースで必要です。その他すべてのユースケースではオプションですが、表レベルのロギングをかわりに使用する必要があります(「表レベルのサプリメンタル・ロギングの有効化」を参照してください)。

スキーマ・レベルのロギングでは、デフォルトで主キーの無条件のサプリメンタル・ロギングを自動的に有効化し、スキーマのすべての表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを自動的に有効化します。必要に応じて、オプションでロギングを変更できます。

ノート:

ワイルドカード指定を満たす場合に、スキーマに追加される新しい表がキャプチャされるため、表レベルのロギングよりもスキーマ・レベルのロギングを使用することを強くお薦めします。キー列の変更がサプリメンタル・ログ・データにも自動的に反映されるため、この方法もお薦めします。たとえば、キーが変更された場合に、ADD TRANDATAを発行する必要はありません。

次のステップをソース・システムで実行して、スキーマ・レベルのサプリメンタル・ロギングを有効化します。

  1. ソース・システムでコマンドラインを起動します。
  2. 資格証明ストア内の、スキーマ・レベルのサプリメンタル・ロギングを有効にする権限を持つユーザーの別名でDBLOGINコマンドを発行します。
    DBLOGIN USERIDALIAS alias

    USERIDALIASおよびその他のオプションの詳細は、Oracle GoldenGateリファレンスUSERIDALIASを参照してください。

  3. マルチテナント・データベースでADD SCHEMATRANDATAまたはADD TRANDATAを使用している場合は、PDBに直接ログインしてコマンドを実行できます。または、(C##ユーザーを使用して)ルート・レベルでログインする場合は、PDBを含める必要があります。Oracle GoldenGateでデータの変更をキャプチャする対象の各スキーマに対し、ADD SCHEMATRANDATAコマンドを発行します。
    ADD SCHEMATRANDATA pdb.schema [ALLCOLS | NOSCHEDULINGCOLS]

    説明:

    • オプションがない場合、ADD SCHEMATRANDATAスキーマでは、主キーのソース・システムで無条件のサプリメンタル・ロギングを有効化し、指定したスキーマの現在および将来のすべての表のすべての一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを有効化します。無条件ロギングでは、主キーの値を、キーが現在の操作で変更されたかどうかにかかわらず、強制的にログに記録します。条件付きロギングは、外部キーまたは一意キーの列のすべての値を、それらのうちの少なくとも1つが現在の操作で変更された場合に、ログに記録します。デフォルトは、非統合Replicatをオプションでサポートしますが、依存関係を計算するために、主キー、一意キーおよび外部キーをすべてインバウンド・サーバーで使用できるようにする必要があるため、統合Replicatをサポートする必要があります。統合Replicatの詳細は、「使用する適用方法の決定」を参照してください。

    • ALLCOLSを使用すると、表のすべての列の無条件のサプリメンタル・ロギングを有効化して、指定したスキーマの現在および将来のすべての表に適用できます。ソース表とターゲット表に異なるスケジューリング列が含まれる場合に、統合Replicatをサポートするために使用します。(スケジューリング列は、主キー、一意キーおよび外部キーです。)

    • NOSCHEDULINGCOLSは、スキーマの既存の表および後で追加された新しい表で、主キーおよび有効なすべての一意索引の値のみをログに記録します。これは、必要最小限のレベルのスキーマ・レベルのロギングで、非統合モードのReplicatのみで有効です。

    次の例では、hrスキーマのデフォルトのサプリメンタル・ロギングをコマンドで有効にします。

    ADD SCHEMATRANDATA pdbeast.hr ALLCOLS

    次の例では、HRスキーマの主キーおよび有効な一意索引のみでサプリメンタル・ロギングをコマンドで有効にします。

    ADD SCHEMATRANDATA pdbeast.hr NOSCHEDULINGCOLS

表レベルのサプリメンタル・ロギングの有効化

表レベルのサプリメンタル・ロギングは、次の場合にソース・システムで有効化します。

  • スキーマ・レベルのロギングを使用しない場合に、必要なレベルのロギングを有効にする場合(「スキーマ・レベルのサプリメンタル・ロギングの有効化」を参照)。スキーマ・レベルまたは表レベルのロギングを使用する必要があります。表レベルのロギングでは、デフォルトで主キーの無条件のサプリメンタル・ロギングを自動的に有効化し、表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを自動的に有効化します。必要に応じて、オプションでロギングを変更できます。

  • 指定した表で主キーのロギングを回避する場合。

  • キー以外の列の値を表レベルで記録し、Oracle GoldenGateの特定の機能(フィルタリング、競合検出および解決ロジックなど)をサポートする場合。

  • 表レベルのサプリメンタル・ロギングのみを持つ表でキー列が変更された場合は、表に対するDMLアクティビティを許可する前に、その表に対してADD TRANDATAを実行する必要があります。

次のステップをソース・システムで実行して、表レベルのサプリメンタル・ロギングを有効化するか、コマンドのオプションの機能を使用します。

  1. ソース・システムでコマンドラインを実行します。

  2. 資格証明ストア内の、表レベルのサプリメンタル・ロギングを有効にする権限を持つユーザーの別名を使用してDBLOGINコマンドを発行します。

    DBLOGIN USERIDALIAS alias

    DBLOGINおよびその他のオプションの詳細は、Oracle GoldenGateリファレンスUSERIDALIASを参照してください。

  3. ADD TRANDATAコマンドを発行します。

    ADD TRANDATA [PDB.]schema.table [, COLS (columns)] [, NOKEY] [, ALLCOLS | NOSCHEDULINGCOLS]

    説明:

    • PDBは、表がマルチテナント・コンテナ・データベースにある場合、ルート・コンテナまたはプラガブル・データベースの名前です。

    • schemaは、表を含むソース・スキーマです。

    • tableは、表の名前です。オブジェクト名を指定する際の手順は、『Oracle GoldenGateの管理』Oracle GoldenGateの入力におけるオブジェクト名の指定に関する項を参照してください。

    • ADD TRANDATAで他のオプションを指定しない場合は、主キーの無条件のサプリメンタル・ロギングを自動的に有効化し、表の一意キーおよび外部キーの条件付きのサプリメンタル・ロギングを自動的に有効化します。無条件ロギングでは、主キーの値を、キーが現在の操作で変更されたかどうかにかかわらず、強制的にログに記録します。条件付きロギングは、外部キーまたは一意キーの列のすべての値を、それらのうちの少なくとも1つが現在の操作で変更された場合に、ログに記録します。デフォルトは、非統合Replicat (NOSCHEDULINGCOLSも参照)をオプションでサポートしますが、依存関係を計算するために、主キー、一意キーおよび外部キーをすべてインバウンド・サーバーで使用できるようにする必要があるため、統合Replicatをサポートする必要があります。統合Replicatの詳細は、「使用する適用方法の決定」を参照してください。

    • ALLCOLSでは、表のすべての列の無条件のサプリメンタル・ロギングを有効化します。ソース表とターゲット表に異なるスケジューリング列が含まれる場合に、統合Replicatをサポートするために使用します。(スケジューリング列は、主キー、一意キーおよび外部キーです。)

    • NOSCHEDULINGCOLSは、非統合モードのReplicatプロセスでのみ有効です。これは、表に対して定義されている一意制約のタイプ、または一意制約のないすべての列に適した、ADD SUPPLEMENTAL LOG DATA ALWAYS句を含むALTER TABLEコマンドを発行します。このコマンドは、スキーマ・レベルのロギングが使用されていない場合に、Oracle GoldenGateの表レベルのロギングの基本要件を満たします。Oracle GoldenGateがキーまたは索引をどのように選択するかについては、「ソース表とターゲット表での行の一意性の保証」を参照してください。

    • COLS columnsは、KEYCOLS句またはフィルタリングおよび操作に必要なキー以外の列を記録します。パラメータが必要です。NOKEYオプションが存在しないかぎり、主キーに加えてこれらの列もログに記録されます。

    • NOKEYによって、主キーまたは一意なキーのロギングが回避されます。TABLEパラメータおよびMAPパラメータにKEYCOLS句が必要で、ADD TRANDATAコマンドでCOLS句を使用して代替のKEYCOLS列を記録する必要があります。

  4. ADD TRANDATACOLSオプションを使用する場合、ターゲットでそれらの列に一意の索引を作成して行の取得を最適化します。KEYCOLS句の代替キーとしてこれらの列を記録する場合は、Oracle GoldenGateプロセスを構成するときにKEYCOLS句をTABLEおよびMAP文に追加する必要があります。

Extract自動取得モードの使用

自動取得(自動取得)モードでは、Oracle GoldenGate自動取得が有効になっている表を自動的に取得できます。

Oracle DatabaseユーティリティガイドのOracle GoldenGateのサプリメンタル・ロギングの取得方法を参照してください。

自動取得モードを使用すると、次のような利点があります。
  • キャプチャされる表セットの構成が容易

  • TABLE/TABLEEXCLUDEパラメータを更新する必要はありません

  • 取得した表セットの変更時にExtractを停止または再起動する必要はありません

Extract自動取得モードの有効化

Extract自動取得モードを有効にするには、TRANLOGOPTIONSを使用して自動取得モードを有効にします。
TRANLOGOPTIONS ENABLE_AUTO_CAPTURE | DISABLE_AUTO_CAPTURE

Extractが自動取得モードで実行されている場合、オブジェクトがTABLE EXCLUDEパラメータによって設定された除外リストまたはTABLEパラメータによって設定された包含リストの一部でない場合は、LCRをフィルタ処理しないでください。

LIST TABLESコマンドは、AUTO_CAPTUREに対して有効な表のリストを表示します。

DMLおよびDDLに関する考慮事項の詳細は、DML自動取得およびOracle DDLでサポートされているオブジェクトおよび操作を参照してください。

詳細は、この記事Oracle GoldenGate 21c: 表の自動取得も参照してください。

データベース用の追加のOracle GoldenGate構成

この章では、データベース環境に適用可能な構成のその他の考慮事項について説明します。

内容は次のとおりです。

Oracle順序のサポートのインストール

Oracle順序をサポートするには、いくつかのデータベース・プロシージャをインストールする必要があります。

Oracle順序オブジェクトのインストール手順

  1. SQL*Plusで、SYSDBAとしてソースおよびターゲットのOracleシステムに接続します。

  2. Oracle GoldenGate DDLレプリケーション機能をサポートするデータベース・ユーザーがすでに割り当てられている場合は、このステップをスキップできます。そうでない場合は、両方のシステムのSQL*Plusで、DDLユーザーでもあるデータベース・ユーザーを作成します。
    CREATE USER DDLuser IDENTIFIED BY password; 
    GRANT CONNECT, RESOURCE, DBA TO DDLuser;
  3. 各システムのOracle GoldenGateインストール・ディレクトリからGGSCIを実行します。

  4. GGSCIで、次のコマンドを各システムで発行します。

    EDIT PARAMS ./GLOBALS
  5. GLOBALSファイルにGGSCHEMAパラメータを入力し、この手順の前の部分で作成したDDLユーザーのスキーマを指定します。

    GGSCHEMA schema
  6. ファイルを保存し、閉じます。

  7. ソース・システムのSQL*Plusで、次の文を発行します。

    ALTER TABLE sys.seq$ ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;

マルチテナント・データベースから順序をキャプチャする方法

  1. 順序のキャプチャ元となる各PDBにOracle GoldenGateユーザーを作成します。

  2. ユーザーをGLOBALSパラメータ・ファイルに追加します。各PDBに同じユーザーを使用する方が簡単です。そうしない場合、ステップ3を実行するたびにGLOBALSファイルを変更する必要があります。

  3. Admin ClientまたはGGSCIにログインします。

  4. DBLOGINを使用して、ソースのルート・コンテナに接続します。

  5. 各PDBに対してFLUSH SEQUENCEコマンドを発行します。

これらのデータベース・アカウントを保持しない場合は、ユーザーを削除するか、アカウントを非アクティブ化できます。

プロセス全体の例を次に示します。

Environment information
            OGG 19.1 Oracle 12c to Oracle 12c Replication, Integrated 
            Extract, Parallel Replicat
            Source: CDB GOLD, PDB CERTMISSN 
            Target: CDB PLAT, PDB CERTDSQ 
            Source Oracle GoldenGate Configuration
            Container User: C##GGADMIN 
            PDB User for Sequences: GGATE 

プロンプトが表示されたら、GGATEを入力します

GLOBALS 
            GGSCHEMA GGATE 
         Flush Sequence 
            GGSCI> DBLOGIN USERIDALIAS GGADMIN DOMAIN GOLD_QC_CDB$ROOT 
            GGSCI> FLUSH SEQUENCE CERTMISSN.SRCSCHEMA1.
Target OGG Configuration 
         PDB User: GGATE 
         Run @sequence 
                sqlplus / as sysdba 
                SQL> alter session set container=CERTDSQ;
                SQL> @sequence

プロンプトが表示されたら、GGATEを入力します

高可用性(HA)およびDRシナリオには、レプリケート順序が必要です。
  • 移行の場合は、スイッチオーバー中にターゲット上の順序を再構築するか、スイッチオーバーの直前に値を大きくする必要があります。

  • 順序を独自のReplicatに配置してください。

他のデータベース・プロパティの処理

この項では、Oracle GoldenGateに影響する可能性のあるデータベース・プロパティと、その状態の解決または回避に使用できるパラメータについて説明します。

次の表でリストされるのは、データベース・プロパティおよび関連する問題点/解決策です。

データベース・プロパティ 問題点/解決策

時間隔パーティション化がある表

時間隔パーティション化がある表をサポートするには、WILDCARDRESOLVEパラメータがそのデフォルトのDYNAMICのままであることを確認します。

仮想列のある表

仮想列は記録されません。また、Oracleで仮想列に対するDMLは許可されません。ただし、次のようにして、このデータをキャプチャし、仮想列ではないターゲット列にマップできます。

ExtractのTABLE文に表を含め、TABLEFETCHCOLSオプションを使用してデータベースの仮想列から値をフェッチします。

ReplicatのMAP文で、ソースの仮想列を仮想ではないターゲット列にマップします。

本質的に更新可能なビューを持つ表

本質的に更新可能なビューにレプリケートするには、関連付けの対象のソース表とターゲット表をマップするMAP文にKEYCOLS句を使用して、更新可能なビューの一意の列にキーを定義します。

異なる場所にあるREDOログまたはアーカイブ

TRANLOGOPTIONSパラメータには、データベースのデフォルトとは異なる場所またはExtractが実行されているのとは異なるプラットフォームにREDOログまたはアーカイブが格納される環境を処理するためのオプションが含まれます。詳細は、『Oracle GoldenGateリファレンス』を参照してください。

TRUNCATE操作

TRUNCATE操作をレプリケートするには、次の2つのオプションのいずれかを選択します。

  • GETTRUNCATESパラメータを使用したスタンドアロンのTRUNCATEサポートでは、TRUNCATE TABLEはレプリケートされますが、他のTRUNCATEオプションはレプリケートされません。Oracle GoldenGate DDLサポートを使用している場合にのみ使用します。

  • 完全DDLサポートでは、TRUNCATE TABLEALTER TABLE TRUNCATE PARTITIONおよび他のDDLがレプリケートされます。

順序

順序のDDL(CREATEALTERDROPRENAME)をレプリケートするには、Oracle GoldenGate DDLサポートを使用します。

順序値のみをレプリケートするには、Extractパラメータ・ファイルでSEQUENCEパラメータを使用します。これには、Oracle GoldenGate DDLサポート環境は不要です。詳細は、『Oracle GoldenGateリファレンス』を参照してください。