27 Oracle GoldenGateシステムの準備

この章では、Oracle GoldenGateのキャプチャおよび配信がサポートされるようにOracle GoldenGateが対話するデータベースを正しく構成するステップについて説明します。ソース・システムにのみ適用されるステップ、ターゲットにのみ適用されるステップ、およびその両方に適用されるステップがあります。

内容は次のとおりです。

データベース・ユーザーおよび権限の準備

Oracle GoldenGate for SQL Serverに必要なデータベース・ユーザー、権限およびアクセス権(サポートされるSQL Serverクラウド・データベースを含む)について学習します。

Oracle GoldenGate for SQL Server

Oracle GoldenGateプロセスでは、データを取得してSQL Serverデータベースに適用するためにデータベース・ユーザーが必要であり、Oracle GoldenGateプロセスによって排他的に使用される専用データベース・ユーザーを作成することをお薦めします。

Oracle GoldenGate for SQL Serverでは、Oracle GoldenGateがWindowsサーバーにインストールされている場合にのみ、すべての動作保証済プラットフォームに対するSQL Server認証およびClassic Architectureに対するWindows認証がサポートされます。

  • Oracle GoldenGate Classic ArchitectureのWindows認証を使用するために、ExtractプロセスおよびReplicatプロセスはManagerプロセスのログイン資格証明を継承します。デフォルトでは、Managerプロセスは、Windowsサーバーにログオンしたユーザーとして対話形式で実行されるか、必要に応じて、デフォルト・サービス名がGGSMGRのWindowsサービスとして追加できます。Managerプロセスがどの方法で実行されている場合でも、Managerプロセスを実行しているユーザーには、ここにリストされているSQL Server権限が必要です。

  • SQL Server認証を使用するには、ExtractおよびReplicat専用のSQL Serverログインを作成し、次にリストされている権限を割り当てる必要があります。

SQL ServerおよびAzure SQL管理対象インスタンス

Oracle GoldenGateがSQL ServerまたはAzure SQL管理対象インスタンス・データベースに対して取得および適用を実行するには、次のユーザー要件および最小限のデータベース権限とアクセス権が必要です。
  1. Oracle GoldenGate for SQL ServerまたはAzure SQL Managed Instanceの専用ログインを作成します。

  2. ログインをユーザーとしてmsdbデータベースおよびソース・データベースまたはターゲット・データベースに追加します。

  3. Oracle GoldenGateに必要なオブジェクトに使用するスキーマをソース・データベースまたはターゲット・データベースに作成します。このスキーマは、GLOBALSパラメータ・ファイルで使用されるGGSCHEMA値にマップする必要があります。

  4. ユーザーがExtractかReplicatかに基づいて、Oracle GoldenGateユーザーの次の権限およびアクセス権を有効にします。

表27-1 Oracle GoldenGateユーザーの権限およびアクセス権

権限 Extract Replicat 構文

msdbデータベースのロールと権限

SQLAgentReaderRole

はい

いいえ

ALTER ROLE SQLAgentReaderRole ADD MEMBER gguser;

SQLAgentUserRole

継承

はい

ALTER ROLE SQLAgentUserRole ADD MEMBER gguser;

SELECT ON sysjobactivity

はい

いいえ

Classic Architectureにのみ必要です。

GRANT SELECT ON msdb.dbo.sysjobactivity TO gguser;

SELECT ON sysjobs

はい

いいえ

Classic Architectureにのみ必要です。

GRANT SELECT ON msdb.dbo.sysjobs TO gguser;

ユーザー・データベース・ロールおよび権限

SYSADMIN

はい

いいえ

データベース・レベルのチェンジ・データ・キャプチャ(CDC)をまだ有効にしていない場合は、一度かぎりの変更で有効にし、TRANDATAを有効にすると取り消すことができます。

ALTER SERVER ROLE sysadmin ADD MEMBER gguser;

sysadmin資格証明を持つデータベース管理者は、次を使用してCDCのデータベースを手動で有効にできます。これにより、Extractユーザーがこの権限を持つ必要がなくなります:

EXEC msdb.sys.sp_cdc_enable_db ‘source_database’

DBOWNER

はい

はい

ALTER ROLE db_owner ADD MEMBER gguser;

Amazon RDSのユーザー権限および要件

Oracle GoldenGateがAmazon RDS for SQL Serverデータベースに対して取得および適用を実行するには、次のユーザー要件および最小限のデータベース権限とアクセス権が必要です。

  1. Oracle GoldenGate for Amazon RDS for SQL Serverの専用ログインを作成します。

  2. ログインをユーザーとしてmsdbデータベースおよびソース・データベースまたはターゲット・データベースに追加します。

  3. Oracle GoldenGateに必要なオブジェクトに使用するスキーマをソース・データベースまたはターゲット・データベースに作成します。このスキーマは、GLOBALSパラメータ・ファイルで使用されるGGSCHEMA値にマップする必要があります。

  4. ユーザーがExtractかReplicatかに基づいて、Oracle GoldenGateユーザーの次の権限およびアクセス権を有効にします。

表27-2 Oracle GoldenGateユーザーの権限およびアクセス権

権限 Extract Replicat 構文

msdbデータベースのロールと権限

EXECUTE ON rds_cdc_enable_db

はい

いいえ

GRANT EXECUTE ON msdb.dbo.rds_cdc_enable_db TO gguser;

マスター資格証明を持つデータベース管理者は、次のコマンドを使用して、データベースのチェンジ・データ・キャプチャを手動で有効にできます。これにより、Extractユーザーがこのアクセス権を持つ必要がなくなります。

EXEC msdb.dbo.rds_cdc_enable_db ‘source_database’

SQLAgentOperatorRole

はい

いいえ

ALTER ROLE SQLAgentOperatorRole ADD MEMBER gguser;

SQLAgentUserRole

継承

はい

ALTER ROLE SQLAgentUserRole ADD MEMBER gguser;

SELECT ON sysjobactivity

はい

いいえ

Classic Architectureにのみ必要です。

GRANT SELECT ON msdb.dbo.sysjobactivity TO gguser;

SELECT ON sysjobs

はい

いいえ

Classic Architectureにのみ必要です。

GRANT SELECT ON msdb.dbo.sysjobs TO gguser;

ユーザー・データベース・ロールおよび権限

DBOWNER

はい

はい

ALTER ROLE db_owner ADD MEMBER gguser;

Azure SQL Database

Oracle GoldenGateがAzure SQL Databaseに対して適用を実行するには、次のユーザー要件および最小限のデータベース権限とアクセス権が必要です:

  1. Oracle GoldenGate for Azure SQL Databaseの専用ログインを作成します。

  2. ログインをユーザーとしてターゲット・データベースに追加します。

  3. Oracle GoldenGateに必要なオブジェクトに使用するスキーマをターゲット・データベースに作成します。このスキーマは、GLOBALSパラメータ・ファイルで使用されるGGSCHEMA値にマップする必要があります。

  4. Oracle GoldenGateユーザーの次の権限およびアクセス権を有効にします。

表27-3 Oracle GoldenGateユーザーの権限およびアクセス権

権限 Extract Replicat 構文

ユーザー・データベース・ロールおよび権限

DBOWNER

該当なし

はい

ALTER ROLE db_owner ADD MEMBER gguser;

Google Cloud SQL for SQL Server

Oracle GoldenGateがGoogle Cloud SQL for SQL Serverデータベースに対して取得および適用を実行するには、次のユーザー要件および最小限のデータベース権限とアクセス権が必要です。

  1. Oracle GoldenGate Google Cloud SQL for SQL Serverの専用ログインを作成します。ユーザーは、データベース・インスタンスのGoogle Cloudダッシュボードの「ユーザー」セクション内から作成する必要があります。

  2. ユーザーをソース・データベースまたはターゲット・データベースに追加します。

  3. Oracle GoldenGateに必要なオブジェクトに使用するスキーマをソース・データベースまたはターゲット・データベースに作成します。このスキーマは、GLOBALSパラメータ・ファイルで使用されるGGSCHEMA値にマップする必要があります。

  4. データベースをExtractのソースとして使用する場合は、データベースのチェンジ・データ・キャプチャ(CDC)を手動で有効にします:

    EXEC msdb.dbo.gcloudsql_cdc_enable_db 'source_database';

  5. ユーザーがExtractかReplicatかに基づいて、Oracle GoldenGateユーザーの次の権限およびアクセス権を有効にします。

表27-4 Oracle GoldenGateユーザーの権限およびアクセス権

権限 Extract Replicat 構文

ユーザー・データベース・ロールおよび権限

DBOWNER

はい

はい

ALTER ROLE db_owner ADD MEMBER gguser;

データベース接続の構成

この項では、DB2 z/OSデータベースへのExtractおよびReplicatの接続を設定する手順について説明します。

内容は次のとおりです。

ExtractおよびReplicatのデータベース接続

ExtractおよびReplicatは、システムODBC DSN (データ・ソース名)を使用してSQL Serverデータベースに接続し、そのメタデータ問合せおよびトランザクション・データ処理にODBCを使用します。

Linuxでのデータベース接続の作成

Linux上で実行されているOracle GoldenGateプロセスのデータベース接続を作成する前に、最新バージョンのMicrosoft ODBC Driver for SQL Server (Linux)をインストールします。

ダウンロードおよびインストールのステップは、次のリンクを選択してください。

https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15

インストールの場合は、「Red Hat Enterprise Linux and Oracle」にリストされているステップを選択します。

ODBCソフトウェアをインストールした後、次の例に従ってLinux用のODBC DSNを作成します。
  1. データ・ソースのテンプレート・ファイルを作成します。

    vi odbc_template_file.ini
  2. テンプレート・ファイルにデータ・ソースを記述します。必要に応じて、複数の一意のDSNエントリをテンプレート・ファイルにリストできます。

    次の例では、mydsn_2019_sourceがDSN名です。これは、データベースにExtractまたはReplicatを接続するために、DBLOGINおよびSOURCEDBまたはTARGETDBとともに使用されます。
    [mydsn_2019_source]            
    Driver = ODBC Driver 18 for SQL Server            
    Server = myserver,1433            
    Database = source_database
    TrustServerCertificate=YES
  3. 次のコマンドを使用して、データ・ソースをインストールします。
    odbcinst -i -s -f odbc_template_file.ini

    このコマンドは、DSNをシステムのodbc.iniファイルに追加します。詳細は、次のリンクを選択してください。

    https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/connection-string-keywords-and-data-source-names-dsns?view=sql-server-2017

Windowsでのデータベース接続の作成

Windows上で実行されているOracle GoldenGateプロセスのデータベース接続を作成する前に、最新バージョンのMicrosoft ODBC Driver for SQL Serverをインストールします。

次のステップに従って、Oracle GoldenGateがインストールされているWindowsサーバーにシステムDSNを作成します。

SQL ServerのDSNの作成手順

  1. 「ODBC データ ソース (64 ビット)」アプリケーションを開きます。

  2. 「ODBC データ ソース アドミニストレーター」ダイアログ・ボックスで、「システム DSN」タブを選択し、「追加」をクリックします。

  3. 「データ ソースの新規作成」で、ODBC Driver {version} for SQL Serverを選択し、「完了」をクリックします。「SQL Serverに接続するための新規データソースを作成する」ウィザードが表示されます。

  4. 次の詳細を入力し、「次へ」をクリックします。
    • 名前: 任意の名前にできます。Windowsクラスタで、クラスタ内のすべてのノードにわたって同じ名前を使用します。

    • 説明: (オプション)このデータ・ソースの説明を入力します。

    • サーバー: SQL Server接続文字列またはサーバー\インスタンス名を入力します。Always On接続の場合は、Always On可用性グループのリスナー\インスタンス名を使用します。

  5. ログイン認証では、次のオプションのいずれかを選択し、「次へ」をクリックします。
    1. 統合Windows認証

    2. ログインIDとユーザーが入力するパスワードを使用するSQL Server認証

  6. 「既定のデータベースを以下に変更する」を選択し、リストからソース・データベースまたはターゲット・データベースを選択します。「Use ANSI」設定を有効にします。「次へ」をクリックします。

  7. 次のページはデフォルト設定のままにします。「完了」をクリックします。

  8. 「データ ソースのテスト」をクリックし、接続をテストします。

  9. テストが成功したら、確認ボックスと「新しいデータ ソースの作成」ボックスを閉じます。

  10. SQL Serverのソース・データベースとターゲット・データベースごとに、この手順を繰り返します。

SQL ServerのAlways On構成のリスナーへの接続

ExtractおよびReplicatは、使用されているDSN接続に応じて、Always On構成のリスナーに接続するか、またはグループの現在のプライマリ・レプリカに直接接続できます。

リスナーへの接続を作成する利点は、ExtractまたはReplicatで、フェイルオーバー時に新しいプライマリ・レプリカにDSNを再構成しなくても、新しいプライマリに再接続できることです。

Extractは、読取り専用問合せを使用可能で読取り可能な同期モードのセカンダリ・レプリカにルーティングするように構成することもできます。デフォルトでは、Extractがリスナーに接続していると、すべての処理がプライマリ・レプリカに対して実行されますが、Extractの構成でTRANLOGOPTIONS ALWAYSONREADONLYROUTINGパラメータが指定されていると、読取り専用問合せはリスナーによって使用可能な読取り可能セカンダリ・レプリカにルーティングされます。

詳細は、TRANLOGOPTIONSおよび「AlwaysOn可用性グループ内のデータベースのキャプチャおよび配信要件の概要」を参照してください。

Always On構成のリスナーに接続するためのDSNを作成する場合は、DSNの作成時にマルチサブネット・フェイルオーバー・オプションを有効にします。Linux DSN接続の場合は、DSNエントリのMultiSubnetFailover=Yesオプションを使用します。

処理のための表の準備

次の項に示す表属性はOracle GoldenGate環境で処理する必要があります。

ターゲット表に対するトリガーおよびカスケード制約の無効化

SQL Serverがターゲットの環境では、ソースで発生した操作を繰り返す可能性のあるトリガーおよびカスケード制約を考慮します。たとえば、TableBにレコードを挿入するTableAの挿入トリガーがソースにあり、TableAおよびTableBの両方をキャプチャおよび配信するようにOracle GoldenGateが構成されている場合、ターゲット表TableAの挿入トリガーを無効にする必要があります。そうしないと、ReplicatはTableAに挿入し、トリガーが起動してTableBに挿入します。ReplicatはTableBにも挿入しようとするため、異常終了します。

トリガーまたはカスケード制約がソースで発生した操作を繰り返すと、次の条件が両方ともtrueである場合、トリガーまたは制約を使用禁止にする必要はありません。
  • DBOPTIONS USEREPLICATIONUSERパラメータをReplicatに使用します。

  • OLE DB接続をReplicatに使用します。OLE DB接続の使用はデフォルトの構成です。トリガー、制約、またはIDENTITYプロパティでNOT FOR REPLICATIONを有効にする必要があります。

次のシナリオでは、ターゲットでトリガーおよび制約を無効にします。

  • ソースのすべての表がレプリケートされる単方向のレプリケーション。

次のシナリオでは、ターゲットのトリガーおよび制約を有効にします。

  • トリガーまたはカスケード操作によって影響を受ける表がレプリケートされず、これらの表をロードするアプリケーションのみがトリガーまたはカスケード操作を使用している単方向のレプリケーション。

  • ソースのすべての表がレプリケートされる単方向または双方向のレプリケーション。このシナリオでは、ターゲット表のカスケード制約およびトリガーを設定してNOT FOR REPLICATIONを有効にし、ReplicatのDBOPTIONS USEREPLICATIONUSERパラメータを使用してください。

ターゲットのIDENTITY列、トリガーおよび制約に対するReplicatの考慮事項

IDENTITY列、トリガー、カスケード制約およびチェック制約があるターゲットSQL Serverデータベースにデータをレプリケートする場合は、次の点を考慮してください。
  • 列にIDENTITY列が含まれる場合、Replicatにより表のIDENTITY_INSERT ONが設定されます。これにより、配信パフォーマンスが低下する可能性があります。

  • トリガーまたはカスケード制約が含まれる表について、トリガーによって挿入されるデータやカスケード制約によって更新または削除されるデータと同じデータを配信するようにReplicatが構成されている場合は、トリガーまたはカスケード操作を実行するとReplicatエラーが発生する可能性があります。

    たとえば、ソースのTableAには、レコードをTableBに挿入するトリガーが含まれます。Extractは、TableAとTableBの両方のレコードを取得するように構成されています。ターゲットでは、Replicatにより、最初にTableAのレコードが挿入され、次に、TableAのトリガーが起動してTableBに挿入された後、Replicatによって同じレコードのTableBへの挿入が試行される結果、Replicatエラーが発生します。

  • すべての外部キーのチェック制約も強制されるため、配信パフォーマンスが低下する可能性があります。

このような状況に対処するために、レプリケーションのユースケースに基づいて実装できるいくつかのオプションがあります。

  • Replicatがターゲット表にデータを書き込む唯一のプロセスである一方向の実装では、ターゲット表のIDENTITY列、トリガーおよび制約について次のオプションを検討します。
    1. ターゲット表のIDENTITYプロパティ、トリガーおよび制約を無効化または削除します。

    2. IDENTITYプロパティ、トリガーおよび制約を変更し、それぞれに対してNOT FOR REPLICATIONオプションをオンに設定して、Microsoft ODBCドライバが少なくともバージョン17.8.1であることを確認します。

  • Replicatとアプリケーションの両方でターゲット表にデータが書き込まれ、トリガーと制約が有効になっている複数方向の実装では、IDENTITYプロパティ、トリガーおよび制約を変更し、それぞれに対してNOT FOR REPLICATIONオプションをオンに設定して、Microsoft ODBCドライバが少なくともバージョン17.8.1であることを確認します。

    また、複数方向レプリケーション構成でIDENTITY列を使用するには、それぞれに異なるシード値を持ち、構成内のサーバーの数と等しい増分値を持つようにIDENTITY列を定義します。

    たとえば、3つのデータベース構成は次のようになります。

    Database1は、増分値3で、0にシード値を設定します。

    Database2は、増分値3で、1にシード値を設定します。

    Database3は、増分値3で、2にシード値を設定します。

ターゲットのIDENTITY列、トリガーおよび制約に対するNOT FOR REPLICATIONフラグの設定

  1. 次のオブジェクトにNOT FOR REPLICATIONフラグを設定します。
    • 外部キー制約

    • チェック制約

    • IDENTITY

    • トリガー(定義に対するテキスト変更が必要です。詳細は、SQL Serverのドキュメントを参照してください。)

    アクティブ/パッシブ構成の場合、パッシブ・データベースでのみ設定します。アクティブ/アクティブ構成の場合、両方のデータベースで設定します。

  2. 双方向構成用にIDENTITY値をパーティション化します。

  3. ReplicatのMAP文で、ソース表を適切なターゲットにマップし、ソース表がトリガーまたは外部キー・カスケード制約で参照する子表をマップします。トリガーおよびカスケードされる子の操作がOracle GoldenGateによってレプリケートされるため、参照される表を適切なターゲットにマップし、データの整合性を保ちます。必ず、ExtractのTABLEパラメータに同じ親と子のソース表を含めてください。

    ノート:

    参照先の表がMAP文に含まれていない場合、整合性違反(レプリケートされていない表への外部キーが含まれている表に行が挿入される場合など)をアラートするエラーは表示されません。

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

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

TABLEまたはMAP文でKEYCOLS句が使用されないかぎり、Oracle GoldenGateは、使用する行識別子を次の優先順位に従って選択します。
  1. 主キー

  2. タイムスタンプまたはマテリアライズされていない計算結果列を含まない英数字順で最初の一意キー。

  3. 前述のキー・タイプのいずれも存在しない場合(その他の種類のキーが表に定義されている場合でも)、Oracle GoldenGateは、データベースで一意キーでの使用を許可されているすべての列(キー内での使用がOracle GoldenGateでサポートされていない列やOracle GoldenGate構成から除外されている列は除く)で疑似キーを作成します。

    ノート:

    表に使用可能な他のキーがない場合や、表にキーがまったくない場合、Oracle GoldenGateは該当するメッセージをレポート・ファイルに記録します。すべての列からキーを作成すると、ソース・システムのOracle GoldenGateのパフォーマンスが低下します。ターゲットでは、このキーはReplicatであまり効率的でないより大きいWHERE句が使用される原因となります。
  4. 表に適切なキーがない場合、あるいは既存のキーを使用しない場合は、表に一意の値が常に含まれる列があれば、代替キーを定義できます。ExtractのTABLEパラメータおよびReplicatのMAPパラメータ内にKEYCOLS句を含めることで、この代替キーを定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。Oracle GoldenGateリファレンスTABLE | MAPを参照してください。

KEYCOLSを使用したカスタム・キーの指定

該当するキーが表にない場合、あるいは識別子を使用しない場合、表に常に一意の値を含んだ列があれば、代替キーを定義できます。ExtractのTABLEパラメータおよびReplicatのMAPパラメータ内にKEYCOLS句を含めることで、この代替キーを定義します。指定されたキーは、Oracle GoldenGateが検出する既存の主キーまたは一意キーを上書きします。

配列処理を使用したIDENTITYレプリケーションの改善

セッションごとに1つの表しかIDENTITY_INSERTONに設定できないため、セッション内の複数の表にIDENTITYデータを適用するときは、ReplicatがIDENTITY_INSERTの切替えを続ける必要があります。このような状況で、Replicatのパフォーマンスを改善するには、BATCHSQLパラメータを使用します。BATCHSQLを使用すると、Replicatは、一度に1つずつSQL文を適用するかわりに配列処理を使用します。

グローバリゼーション・サポート

Oracle GoldenGateのグローバリゼーション・サポートにより、ネイティブ言語のエンコーディングでのデータ処理が可能になります。Oracle GoldenGateの適用プロセス(Replicat)では、文字型の列にデータが含まれている場合に、ある文字セットから別の文字セットへのデータ変換がサポートされます。