8 Oracle GoldenGateシステムの準備

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

内容は次のとおりです。

8.1 SQL ServerのためのOracle GoldenGateプロセスのデータベース・ユーザー

Oracle GoldenGateでSQL Serverデータベースに対する取得および適用を実行するには、次のデータベース・ユーザーおよび権限が必要です。

8.1.1 SQL ServerのExtractユーザーとReplicatユーザー

Oracle GoldenGate Extractプロセスは、初期ロードの場合にはSQL Serverの表からのデータを取得し、変更データExtractの場合にはSQL Server変更データ取得表からのデータを取得します。Replicatプロセスは、ターゲットのSQL Serverデータベースにデータを適用します。 これらのプロセスは、Windows認証またはSQL Server認証を使用してデータベースに接続できます。

  • Windows認証を使用するために、Managerサービスの「プロパティ」に指定されている「ログオン」アカウントによって識別されるように、ExtractプロセスおよびReplicatプロセスがManagerプロセスのログイン資格証明を継承します。このアカウントは、次にリストされた権限を持つ必要があります。

    Oracle GoldenGateプロセス ローカル・システム・アカウントを使用している場合のManagerの権限 ローカル/ドメイン・アカウントを使用している場合のManagerの権限

    Extract (ソース・システム)

    BUILTIN\Administratorsアカウントは、最低でもソース・データベースのロールdb_ownerのメンバーであることが必要です。

    アカウントは、最低でもソース・データベースの固定データベース・ロールdb_ownerのメンバーであることが必要です。

    Replicat

    (ターゲット・システム)

    BUILTIN\Administratorsアカウントは、最低でもターゲット・データベースの固定データベース・ロールdb_ownerのメンバーである必要があります。

    アカウントは、最低でもターゲット・データベースの固定データベース・ロールdb_ownerのメンバーである必要があります。

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

SQL Server認証を使用して接続するExtract SQL Server認証を使用して接続するReplicat

アカウントは、最低でもソース・データベースの固定データベース・ロールdb_ownerのメンバーである必要があります。

アカウントは、最低でもターゲット・データベースの固定データベース・ロールdb_ownerのメンバーであることが必要です。

SQL Server認証を使用している場合、ExtractまたはReplicatパラメータ・ファイルでUSERIDパラメータとPASSWORDオプションを使用して、ユーザーおよびパスワードを指定する必要があります。または、Oracle GoldenGate資格証明ストアを使用して、USERIDALIASパラメータでユーザーの別名を指定することもできます。

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

SQL Server用にAmzon RDSの権限を設定するステップは、次のとおりです。

  1. SQL Serverマスター・ユーザー名にAmazon RDSを使用して、Oracle GoldenGateプロセスで使用される新しいSQL Serverログインを作成します。
    USE [master]
    GO
    CREATE LOGIN [ggs] WITH PASSWORD=N'ggs', DEFAULT_DATABASE=<source database>
    GO
  2. SQL Serverに対するAmazon RDSのキャプチャまたは配信をサポートするかどうかに基づいて、次の権限をログインに付与します。
    1. Extractユーザーと、Oracle GoldenGate CDCクリーンアップ・ジョブのADD/DELETE TRANDATAADD/DELETE/ALTER HEARTBEATTABLECreate/Drop
      USE [msdb]
      GO
      CREATE USER [<user>] FOR LOGIN [<login>];
      grant execute on msdb.dbo.rds_cdc_enable_db to [<user>];
      grant execute on msdb.dbo.rds_cdc_disable_db to [<user>];
      grant select on msdb.dbo.sysjobs to [<user>];
      grant select on msdb.dbo.sysjobactivity to [<user>];
      ALTER ROLE [SQLAgentUserRole] ADD MEMBER [<user>];
      ALTER ROLE [SQLAgentOperatorRole] ADD MEMBER [<user>];
      GO
      USE [<source database>]
      GO
      CREATE USER [<user>] FOR LOGIN [<login>];
      ALTER ROLE [db_owner] ADD MEMBER [<user>];
      GO
    2. Replicatユーザーと、ADD/DELETE HEARTBEATTABLE TARGETONLYADD/DELETE CHECKPOINTTABLE:
      USE [msdb]
      GO
      CREATE USER [<user>] FOR LOGIN [<login>];
      grant select on msdb.dbo.sysjobs to [<user>];
      grant select on msdb.dbo.sysjobactivity to [<user>];
      ALTER ROLE [SQLAgentUserRole] ADD MEMBER [<user>];
      GO
      USE [<target database name>]
      GO
      ALTER ROLE [db_owner] ADD MEMBER [<user>];
      GO
    3. ユースケースに応じて、データベースに作成される可能性があるOracle GoldenGateオブジェクトによって使用される新しいスキーマをデータベースに追加します。このスキーマ名は、GLOBALSファイルでパラメータGGSCHEMAを使用して参照する必要があります。または、Microservices Architectureをインストールする場合は、デプロイメントの作成の際にスキーマ名の入力を求められます。
      USE [source database,target database]
      GO
      CREATE SCHEMA [OGG schema name];

      ノート:

      Amazonではsp_configureがデフォルトにロックされるため、64MBを超えるテキスト・データはレプリケートできません。パラメータ・グループを使用する必要があります。
  3. SQL Server用のAmazon RDSでSQL Server CDCクリーンアップ・ジョブを削除し、Oracle GoldenGate CDCクリーンアップ・ジョブに置き換えるには、次のスクリプトを実行します。

    USE [source database]
    GO
    EXEC sys.sp_cdc_drop_job N'cleanup';
    
  4. このスクリプトを実行してOracle GoldenGate CDCクリーンアップ・ジョブを作成します。インスタンス・エンドポイントおよびポート接続文字列を二重引用符で囲みます。スクリプトはMicrosoftのSQLCMDユーティリティを使用するため、次の例に示すように、Oracle GoldenGateがインストールされているシステムにSQLCMDがインストールされていることを確認してください。
    sh ogg_cdc_cleanup_setup.bat createJob login password source database "sql2016.samplestring.us-west-1.rds.amazonaws.com,1433" OGG schema name

8.1.3 サプリメンタル・ロギングなどの機能を有効にするユーザー

データベース・ユーザーは、Oracle GoldenGate構成内のソース・データベースに対してサプリメンタル・ロギングを有効にするために、ADD TRANDATAコマンドを発行する必要があります。データベース・ログイン・コマンド(DBLOGIN)は、ADD TRANDATA の発行前にGGSCIから発行されます。

  • TRANDATAを有効にするデータベース・ユーザーには、sysadmin権限が付与されている必要があります。

Extractはdbowner権限で実行できます。ただし、ADD/ALTER/ DELETE/INFO HEARTBEATTABLEコマンドを発行する場合や、ogg_cdc_cleanup_setup.batバッチ・ファイルを使用してOracle GoldenGate CDCクリーン・アップ・ジョブを作成する場合には、sysadmin権限も必要になります。

8.2 データベース接続の構成

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

8.2.1 Extractのデータベース接続の構成

Extractでは、ODBC (Open Database Connectivity)接続でソースSQL Serverデータベースに接続します。この接続を確立するには、「データ ソース (ODBC)」コントロール パネルからデータ・ソース名(DSN)を設定します。

手順は、Windowsでのデータベース接続の構成およびLinuxでのデータベース接続の構成を参照してください。

Always On環境のリスナーへの接続

Extractは、Always On環境のリスナーに接続できます。また、読取り専用問合せを使用可能な同期モードのセカンダリ・レプリカにルーティングするように構成できます。デフォルトでは、Extractがリスナーに接続していると、すべての処理がプライマリ・レプリカに対して実行されますが、Extractの構成でTRANLOGOPTIONS ALWAYSONREADONLYROUTINGパラメータが指定されていると、読取り専用問合せはリスナーによって使用可能な読取り可能セカンダリ・レプリカにルーティングされます。詳細は、TRANLOGOPTIONSおよび「AlwaysOn可用性グループ内のデータベースのキャプチャおよび配信要件の概要」を参照してください。

8.2.2 Replicatのデータベース接続の構成

Replicatは、次のようにしてターゲット・データベースに接続しDML操作を実行できます。

  • ODBCを使用します。

  • SQL Serverドライバがサポートしている場合はOLE DBを使用します。

  • SQL Serverレプリケーション・ユーザーとしてOLE DBを使用します。IDENTITY列、外部キー制約、およびトリガーに、NOT FOR REPLICATIONを設定する必要があります。

使用する方法を選択する前に、次のガイドラインと手順を確認してそれぞれのメリットとデメリットを評価します。

8.2.2.1 ODBCまたはデフォルトのOLE DBの使用

ReplicatがODBC接続またはデフォルトのOLE DB接続を介して接続すると、次のような制限が適用されます。

  • ODBCまたはデフォルトのOLE DBを使用している場合に、ソースとターゲットに対してIDENTITY列をまったく同じに保つには、Replicatはトランザクションで特別な操作を作成し、必ずターゲットに対してシードがインクリメントされるようにします。これらのステップによって、配信パフォーマンスが低下する場合があります。

  • 冗長な操作の可能性を排除するために、ターゲット表に対するトリガーおよび制約を調整または無効にする必要があります。

ReplicatをODBCまたはOLE DBと組み合せて使用するには、次のステップに従います。

  1. ODBCのみを使用する場合、DBOPTIONSパラメータにUSEODBCオプションを指定してReplicatパラメータ・ファイルに含めます。(デフォルトのOLE DB接続を使用する場合、パラメータは不要です)。Oracle GoldenGateのSQL Server CDC for Linuxの場合、USEODBCオプションは使用できません。
  2. ターゲット表に対するトリガーおよび制約を無効にします。ターゲットに対するトリガーおよびカスケード制約の無効化を参照してください。
  3. 双方向のSQL Server構成でIDENTITY列を使用するには、それぞれに異なるシード値を持ち、構成内のサーバーの数と等しい増分値を持つようにIDENTITY列を定義します。たとえば、2つのサーバーのインストールは次のようになります。
    • Sys1は、増分値2で、1にシード値を設定します。

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

    3つのサーバーのインストールは次のようになります。

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

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

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

  4. ODBCデータ・ソースを構成します。「Windowsでのデータベース接続の構成」を参照してください。
8.2.2.2 OLE DBでのUSEREPLICATIONUSERの使用

ReplicatがUSEREPLICATIONUSERオプションを指定したOLE DB経由でSQL Serverレプリケーション・ユーザーとして接続し、IDENTITYNOT FOR REPLICATIONが有効化されているときに、外部キー制約でトリガーされる場合は、次のような利点と制限が適用されます。

  • Replicatが挿入を実行すると、IDENTITYシードがインクリメントされません。双方向のSQL Server構成では、前の項のステップ3で示した例のように、シード値と増分値をずらして設定します。

  • トリガーは、冗長な操作を回避するために、ターゲット上でReplicatユーザーに対して自動的に無効になります。ただし、他のユーザーに対してはターゲット上でトリガーが起動されます。

  • 外部キー制約は、Replicatトランザクションのターゲットに対して強制されません。CASCADE更新および削除は行われません。これらも冗長な操作を防ぎます。

  • CHECK制約は、Replicatトランザクションのターゲットに対して強制されません。これらの制約は、データの取得前にソースに対して強制されますが、ターゲットに制約がないことでデータの整合性の問題が発生するかを検討します。

    ノート:

    通常のIDENTITY、トリガー、および制約の機能は、Replicatレプリケーション・ユーザー以外のユーザーに対しては有効のままです。

USEREPLICATIONUSERを設定してReplicatを使用するには、次のステップに従います。

ノート:

Oracle GoldenGateのSQL Server CDC for Linuxの場合、USEREPLICATIONUSERオプションは使用できません。

ノート:

Replicatで、Microsoft ODBCドライバを使用する接続の場合は、USEREPLICATIONUSERオプションをサポートするために、Microsoft OLE DB Driver 18 for SQL Serverをインストールします。

https://www.microsoft.com/en-us/download/details.aspx?id=56730

  1. SQL Server Management Studio (またはその他のインタフェース)で、次のオブジェクトにNOT FOR REPLICATIONフラグを設定します。アクティブ/パッシブ構成の場合、パッシブ・データベースでのみ設定します。アクティブ/アクティブ構成の場合、両方のデータベースで設定します。
    • 外部キー制約

    • チェック制約

    • IDENTITY

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

  2. 双方向構成用にIDENTITY値をパーティション化します。
  3. ReplicatのMAP文で、ソース表を適切なターゲットにマップし、ソース表がトリガーまたは外部キー・カスケード制約で参照する子表をマップします。トリガーおよびカスケードされる子の操作がOracle GoldenGateによってレプリケートされるため、参照される表を適切なターゲットにマップし、データの整合性を保ちます。ExtractのTABLEパラメータに同じ親と子のソース表を含めます。

    ノート:

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

  4. Replicatパラメータ・ファイルに、USEREPLICATIONUSERオプションを指定してDBOPTIONSパラメータを含めます。
  5. ODBCデータ・ソースを構成します。「Windowsでのデータベース接続の構成」を参照してください。

8.2.3 Linuxでのデータベース接続の構成

SQL Serverデータベース構成のOracle GoldenGateは、LinuxとWindowsに同じサポートを提供します。ただし、Linux環境の接続を設定するには、msodbcsql13*またはmsodbcsql17*ドライバが必要です。

次を参照してください。

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

https://docs.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-2017

次の例では、Linux環境でODBCデータ・ソースを作成する方法を示します。
  1. データ・ソースのテンプレート・ファイルを作成します。

    vi odbc_template_file.ini

  2. テンプレート・ファイルにデータ・ソースを記述します。次の例では、データベースに接続するために、DBLOGINおよびSOURCEDBでの名前としてmyserver_ss2017_sourceが使用されています。

    [myserver_SS2017_source]            
    Driver = ODBC Driver 17 for SQL Server            
    Server = myserver,1433            
    Database = source_database            
    User = ssuser            
    Password = ssuserpassword
  3. 次のコマンドを使用して、データ・ソースをインストールします。

    odbcinst -i -s -f odbc_template_file.ini

    詳細は、次を参照してください。

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

8.2.4 Windowsでのデータベース接続の構成

次の手順に従って、ソースまたはターゲットのSQL Serverデータベース用にSQL Serverシステムのデータ・ソース名(DSN)を作成します。DSNには、ODBC (Open Database Connectivity)を介したSQL Serverデータベースへの接続方法に関する情報が格納されます。

SQL ServerのDSNの作成手順

  1. ODBCクライアントを実行するには、「コントロール パネル」「管理ツール」「データソース(ODBC)」の順に選択します。
  2. ODBCクライアントの「ODBCデータ ソース アドミニストレータ」ダイアログ・ボックスで「システムDSN」タブを選択し、「追加」をクリックします。
  3. 「新規データソースの作成」で、対象のSQL Serverのバージョンでサポートされている適切なSQL Serverドライバを選択して「完了」をクリックします。SQL Serverに接続するための新規データソースを作成するウィザードが表示されます。適切なSQL Serverドライバを判断するには、「データベース接続」を参照してください。
  4. 次の情報を入力してから、「次」をクリックします。
    • 名前: 任意の名前にできます。Windowsクラスタで、クラスタ内のすべてのノードにわたって同じ名前を使用します。

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

    • サーバー: SQL Serverのサーバー名またはインスタンス名を選択します。オプションで、Always On可用性グループのリスナー\インスタンス名をリストできます。

  5. ログイン認証のために、次のいずれかを実行してから「次へ」をクリックします。
    1. Oracle GoldenGateでWindows認証を使用するには、「統合Windows認証を使用する」を選択します。
    2. データベース資格証明を使用するには、「ユーザーが入力するSQL Server用のログインIDとパスワードを使う」を選択して、ログイン情報を指定します。
  6. デフォルト・データベースが、Oracle GoldenGateの接続先データベースに設定されていない場合は、「既定のデータベースを以下のものに変更する」をクリックしてデータベースを選択します。ANSIを使用するためのその他の設定を設定します。「次へ」をクリックします。
  7. 次のページはデフォルト設定のままにします。「完了」をクリックします。
  8. 「データ ソースのテスト」をクリックし、接続をテストします。
  9. テストが成功したら、確認ボックスと「データ ソースの新規作成」ボックスを閉じます。
  10. SQL Serverのソース・システムとターゲット・システムごとに、この手順を繰り返します。

8.3 処理のための表の準備

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

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

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パラメータを使用してください。

8.3.2 行識別子の割当て

Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表に一意の行識別子が必要です。ソース表は、Oracle GoldenGateが使用する行識別子の種類を判別する方法に記載されている任意の種類のキーを持つことができます。固定長の列が存在する表に主キーが識別されない場合、それらの固定長列のいずれかの長さは3800バイト未満である必要があります。

8.3.2.1 Oracle GoldenGateで使用する行識別子の種類を判別する方法

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

  1. タイムスタンプまたはマテリアライズされていない計算結果列を含まない英数字順で最初の一意キー。
  2. これらのキー・タイプのいずれも存在しない場合、Oracle GoldenGateは、データベースで一意キーでの使用を許可されているすべての列(キー内での使用がOracle GoldenGateでサポートされていない列やOracle GoldenGate構成から除外されている列は除く)で疑似キーを作成します。SQL Serverの場合、Oracle GoldenGateでは、主キーのないターゲット表の行データの長さが8000バイト未満である必要があります。

    ノート:

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

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

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

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

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

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

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