13 Oracle GoldenGateのためのシステムの準備および構成

Oracle GoldenGateを実行するためにシステムを準備する方法、およびMySQLデータベースを使用して構成する方法について学習します。

内容は次のとおりです。

MySQLのOracle GoldenGateプロセス用データベース・ユーザー

Oracle GoldenGateプロセスのデータベース・ユーザーの要件は次のとおりです。

  • Oracle GoldenGate専用のデータベース・ユーザーを作成します。データベースに接続する必要のあるすべてのOracle GoldenGateプロセスに対して同じユーザーでもかまいません。

    • Extract (ソース・データベース)

    • Replicat (ターゲット・データベース)

    • DEFGEN (ソース・データベースまたはターゲット・データベース)

  • DDLを使用するには、MySQLユーザーにデータベース・プラグインをインストールする権限が付与されている必要があります。

  • データのセキュリティを維持したり、Oracle GoldenGateの処理を的確に監視したりするには、他のユーザー、アプリケーションまたはプロセスに対してOracle GoldenGateデータベース・ユーザーでのログインまたは操作を許可しないでください。

  • データベース・ユーザーを記録します。それらをOracle GoldenGateパラメータ・ファイルのUSERIDパラメータを使用して指定する必要があります。

  • Oracle GoldenGateユーザーは、INFORMATION_SCHEMAデータベースに読取りアクセスできる必要があります。

  • Oracle GoldenGateユーザーには、次の権限が必要です。

    権限 ソースExtract ターゲットReplicat 用途

    SELECT

    はい

    はい

    データベースに接続し、オブジェクト定義を選択します

    REPLICATION SLAVE

    はい

    該当なし

    レプリケーション・マスターのバイナリ・ログに接続し、そこから更新を受信します。

    CREATE

    CREATE VIEW

    EVENT

    INSERT

    UPDATE

    DELETE

    はい

    はい

    ソースおよびターゲット・データベースのハートビート表とチェックポイント表の作成、およびデータ・レコードの生成とパージ

    DROP

    はい はい

    Replicatチェックポイント表の削除またはハートビート表実装の削除

    EXECUTE

    はい はい

    ストアド・プロシージャを実行する

    ターゲット表に対するINSERT、UPDATE、DELETE

    該当なし

    はい

    レプリケートされたDMLをターゲット・オブジェクトに適用

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

    該当なし

    はい

    レプリケートされたDDLをターゲット・オブジェクトに発行

  • バイナリ・ログ・イベントをキャプチャするためには、管理者がExtractユーザーに次の権限を指定する必要があります。

    • MySQL構成ファイル(my.cnf)があるディレクトリの読取り権限と実行権限

    • MySQL構成ファイル(my.cnf)の読取り権限

    • バイナリ・ログがあるディレクトリの読取り権限と実行権限

    • tmpディレクトリの読取り権限と実行権限

データ使用可能性の確保

十分なバイナリ・ログ・データを保持し、Extractを停止した場合、または計画外の停止が発生した場合に、Extractをチェックポイントから再開できるようにします。Extractには、コミットされていない最も古い作業単位の開始点を含むバイナリ・ログ、およびそれ以降のすべてのバイナリ・ログへのアクセス権が必要です。推奨される保存期間は、少なくとも24時間は対応可能な、アクティブな情報とアーカイブされた情報の両方を含むトランザクション・データです。データ量とビジネス要件を考慮して最適な保存時間を決定するためにテストを実行しなければならない場合があります。

処理中にExtractで必要とされる、アクティブまたはバックアップ・ログのデータが保存されていない場合、次のいずれかの修正処理が必要になる場合があります。

  • バイナリ・ログ・データが使用可能な最新の時点からキャプチャを行う(およびターゲットで発生した可能性のあるデータ損失を受け入れる)ようにExtractを修正します。

  • ソース表とターゲット表を再同期してから、Oracle GoldenGate環境を再開します。

Extractのチェックポイントの位置を決定するには、INFO EXTRACTコマンドを使用します。詳細は、『Oracle GoldenGateコマンド・ライン・インタフェース・リファレンス』INFO EXTRACTを参照してください。

ログ・パラメータの設定

MySQLのトランザクション・ログからキャプチャするには、Oracle GoldenGate Extractプロセスが、すべてのバイナリ・ログ・ファイルのパスが含まれる索引ファイルを検索できる必要があります。

Extractは、すべての表列がバイナリ・ログに存在するものと想定します。その結果、fullと設定されているbinlog_row_imageのみがサポートされ、これがデフォルトになります。他の値のbinlog_row_imageはサポートされません。

ノート:

Oracleでは、バイナリログを少なくとも24時間は保持することをお薦めします。

MySQL 5.7では、server_idオプションをlog-binとともに指定する必要があり、そのようにしないとサーバーが起動しません。MySQL 8.0では、server_idはデフォルトで有効化されます。

Extractは次のパラメータ設定を確認してこの索引ファイル・パスを取得します。


  1. ALTLOGDESTオプションを指定したExtractのTRANLOGOPTIONSパラメータ。このパラメータでログ索引ファイルの場所を指定する場合、ExtractはMySQL Server構成ファイルで指定されているデフォルトよりも、こちらの場所を受け入れます。ALTLOGDESTが使用される場合、バイナリ・ログ索引ファイルも指定されたディレクトリに格納される必要があります。このパラメータは、MySQL構成ファイルで索引ファイルのフル・パス名が指定されていないか、間違った場所が指定されている場合、または同じマシンに複数のMySQLのインストールがある場合に使用されます。From Oracle GoldenGate 21c以降、ALTLOGDESTパラメータはオプションです。ALTLOGDESTが指定されていない場合、バイナリ・ログ索引とバイナリ・ログ・ファイルパスはデータベースから直接フェッチされます。このようにして取得されたパスも、既存のプロセスと同じアクセシビリティ・チェックの対象になります。

    索引ファイル・パスをTRANLOGOPTIONSALTLOGDESTとともに指定するには、次のコマンド形式をWindowsで使用します。

    TRANLOGOPTIONS ALTLOGDEST "C:\Program Files\MySQL\logs\binlog.index"

    Linuxでは次の形式を使用します。

    TRANLOGOPTIONS ALTLOGDEST "/mnt/rdbms/mysql/data/logs/binlog.index" 

    リモート・サーバーから取得する場合、またはリモート取得の場合は、リモート・サーバー上のインデックス・ファイル・パスのかわりにREMOTEオプションを指定するのみで済みます。WindowsとLinuxの両方でリモート・キャプチャする場合は、Extractパラメータ・ファイルで次のように指定します

    TRANLOGOPTIONS ALTLOGDEST REMOTE

  2. MySQLサーバー構成ファイル: 構成ファイルには、MySQLのサーバーとクライアントのデフォルト起動オプションが格納されます。Windowsでは、構成ファイルの名前はmy.iniです。他のプラットフォームでは、my.cnfです。ALTLOGDEST付きのTRANLOGOPTIONSが指定されていない場合、Extractは構成ファイルからログ・ファイルの場所に関する情報を取得します。ただし、ALTLOGDESTを指定している場合でも、次のExtractパラメータは正しく設定する必要があります。
    • binlog-ignore-db=oggddl: DDLログ履歴表がbinlogに入力されないようにします。これはmy.cnfまたはmy.iniファイルで設定されます。

    • log-bin: このパラメータは、バイナリ・ロギングの有効化に使用されます。このパラメータはバイナリ・ログ索引ファイルの場所も指定します。ALTLOGDESTが使用される場合でもOracle GoldenGateの必須パラメータです。log-binが指定されていないと、バイナリ・ロギングが無効になり、Extractからエラーが返されます。

    • log-bin-index: このパラメータでは、バイナリ・ログ索引の場所を指定します。使用されていない場合、Extractは索引ファイルがログ・ファイルと同じ場所にあるとみなします。このパラメータが使用され、バイナリ・ログが含まれるディレクトリとは異なるディレクトリが指定されている場合、Extractの起動後、バイナリ・ログは移動できません。

    • max_binlog_size: このパラメータでは、バイナリ・ログ・ファイルのサイズをバイト単位で指定します。

      ノート:

      現在のログのサイズがmax_binlog_size値に達すると、新しいファイルにロールオーバーする前にトランザクションの記録を終了する必要がある場合を除き、サーバーでは新しいバイナリ・ログ・ファイルが自動的に作成されます。

    • binlog_format: このパラメータでは、ログの形式を設定します。ROWという値に設定する必要があります。これによって、DML文をバイナリ形式で記録するようデータベースに指示されます。Oracle GoldenGate 19c以降、Extractでは、ROW以外のbinlog_formatが検出されたときに、異常終了するのではなく、ROW形式で書き込まれていないbinlogイベントが暗黙的に無視されます。

      ノート:

      MySQLのバイナリ・ロギングでは、特定の表についてロギングを有効または無効にすることはできません。データベースのすべての表にグローバルに適用されます。

    • mysql.rds_set_configuration: MySQL Amazon RDSインスタンスからキャプチャする場合は、MySQLコマンドラインでmysql.rds_set_configuratonストアド・プロシージャを呼び出して、特定の期間バイナリログを保持する必要があります。デフォルトでは、MySQL Amazon RDSのbinlog_retention_hoursのデフォルト値はNULLに設定されています。これは、バイナリ・ログが保持されないことを意味します。

      次の例は、バイナリログを24時間保持するコマンドを示しています。
      mysql > call mysql.rds_set_configuration('binlog retention hours', 24);

    構成ファイルを検出するために、ExtractはMYSQL_HOME環境変数を確認します。MYSQL_HOMEが設定されている場合、Extractは指定されたディレクトリの構成ファイルを使用します。MYSQL_HOMEが設定されていない場合、Extractはinformation_schema.global_variables表に問い合せてMySQLのインストール・ディレクトリを決定します。構成ファイルがそのディレクトリにある場合、Extractはそれを使用します。

  3. MariaDBバージョン10.2以降では、Oracle GoldenGateはMySQLの場合と同様に動作しますが、my.cnfファイルまたはmy.iniファイルで新しい変数を構成する必要があります。追加する必要がある変数は、binlog-annotate-row-events=OFFです。この変数を構成した後にMariaDBを再起動し、Extractプロセスを開始します。

ホスト名の追加

Oracle GoldenGateは、接続先のデータベースの名前をSOURCEDBパラメータから取得します。接続の成功は、システム・ホスト・ファイルで適切に構成されているlocalhostエントリに依存します。不適切なローカル・ホスト構成によって問題が生じないようにするには、SOURCEDBを次のように使用します。

SOURCEDB dbname@hostname:port, USERID mysqluser, PASSWORD welcome

dbnameはMySQLインスタンスの名前、hostnameは名前またはIPアドレス、portはMySQLインスタンスのポート番号です。修飾されていないホスト名を使用する場合、名前はDNSデータベースに適切に構成されている必要があります。そうでない場合、完全修飾されたホスト名(myhost.company.comなど)を使用します。

セッション文字セットの設定

GGSCI、ExtractおよびReplicatプロセスは、データベースへの接続時にセッション文字セットを使用します。MySQLでは、セッション文字セットは、SOURCEDBおよびTARGETDBSESSIONCHARSETオプションから取得されます。Oracle GoldenGateを構成する際、これらのいずれかでセッション文字セットを必ず指定してください。

処理のための表の準備

この項では、処理のための表の準備方法について説明します。表の準備では次のタスクが必要です。

行識別子の割当て

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

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

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

  1. 主キー
  2. タイムスタンプまたはマテリアライズされていない計算結果列を含まない英数字順で最初の一意キー。
  3. 前述のキー・タイプのいずれも存在しない場合(その他の種類のキーが表に定義されている場合でも)、Oracle GoldenGateは、データベースで一意キーでの使用を許可されているすべての列(キー内での使用がOracle GoldenGateでサポートされていない列やOracle GoldenGate構成から除外されている列は除く)で疑似キーを作成します。

    ノート:

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

一意索引から導出される主キーを持つ表

表に主キーがなく、索引付けされた列がNOT NULLである場合、MySQLでは一意索引が主キーにプロモートされます。これらのNOT NULL索引が複数ある場合、最初に作成された索引が主キーになります。Replicatでエラーが発生しないようにするには、ソース表とターゲット表でこれらの索引を同じ順序で作成します。

たとえば、ggvam.empという名前のソース表とターゲット表のそれぞれにfirst、middle、lastという列があり、それらすべてがNOT NULLとして定義されているとします。次の順序で一意索引を作成した場合、表定義が一致しないため、Oracle GoldenGateはターゲットで異常終了します。

ソース:

mysql> create unique index uq1 on ggvam.emp(first); 
mysql> create unique index uq2 on ggvam.emp(middle); 
mysql> create unique index uq3 on ggvam.emp(last); 

ターゲット:

mysql> create unique index uq1 on ggvam.emp(last); 
mysql> create unique index uq2 on ggvam.emp(first); 
mysql> create unique index uq3 on ggvam.emp(middle); 

この順序の結果、MySQLでは、ソースの"first"列の索引と、ターゲットの"last"列の索引が主キーにプロモートされます。Oracle GoldenGateでは、メタデータ・レコードの作成時に主キーが識別子として選択されるため、メタデータが一致しなくなります。このエラーを回避するには、主キーにプロモートする列を決定し、ソースおよびターゲットでその索引を最初に作成します。

Oracle GoldenGateで使用する独自キーを指定する方法

前述のキー・タイプの行識別子が表に存在しないか、または、それらの識別子を使用しない場合は、常に一意の値が含まれている列が表にあれば、代替キーを定義できます。ExtractのTABLEパラメータおよびReplicatのMAPパラメータ内にKEYCOLS句を含めることで、この代替キーを定義します。指定したキーにより、Oracle GoldenGateで検出される既存の主キーまたは一意キーはオーバーライドされます。

キーのない表での行の変更の制限

ターゲット表に主キーまたは一意のキーがない場合、重複する行が存在する可能性があります。この場合、Oracle GoldenGateで更新または削除されるターゲット表の行数が多くなりすぎ、ソース・データとターゲット・データの同期がとれなくなる可能性があります。警告するエラー・メッセージは表示されません。更新される行数を制限するには、Replicatパラメータ・ファイルでDBOPTIONSパラメータにLIMITROWSオプションを使用します。LIMITROWSを使用すると1行しか処理されないため、ターゲット・システムにおけるOracle GoldenGateのパフォーマンスが向上する可能性があります。

トリガーおよびカスケード制約に関する考慮事項

トリガー

ターゲット表のトリガーを無効にするか、Oracle GoldenGateデータベース・ユーザーによる変更を無視するように変更します。Oracle GoldenGateでは、トリガーの結果として生成されるDMLがレプリケートされます。同じトリガーがターゲット表でアクティブになった場合、レプリケートされたバージョンのために重複となり、データベースでエラーが返されます。

カスケード制約に関する考慮事項

Oracle GoldenGateによって取得されたカスケード更新と削除はバイナリ・ログに記録されないため、取得されません。これは、MySQLとMariaDBの両方で有効です。たとえば、表間に親子関係がある親表でdelete文を実行すると、子表に対してカスケード削除(存在する場合)が行われますが、バイナリ・ログには記録されません。親表の削除または更新レコードのみがバイナリ・ログに記録され、Oracle GoldenGateによって取得されます。

詳細は、https://mariadb.com/kb/en/replication-and-foreign-keys/およびhttps://dev.mysql.com/doc/refman/8.0/en/innodb-and-mysql-replication.htmlを参照してください。

カスケード操作のレプリケーションを適切に処理するために、ソースでカスケード削除と更新を無効にし、子レコードを明示的に削除または更新するようにアプリケーションをコーディングしてから、親レコードを変更することをお薦めします。または、ターゲット親表にソース親表と同じカスケード制約が構成されていることを確認する必要がありますが、これにより、特に双方向レプリケーションの場合にソースとターゲットの間で同期が取れない状態が発生する可能性があります。

log-binの場所の変更

log-bin変数をMySQL構成ファイルで使用してバイナリ・ログの場所を変更すると、索引ファイル内に2つの異なるパス・エントリが生じることになり、エラーが発生する場合があります。エラーの可能性を避けるため、次の操作を行ってlog-binの場所を変更します。

  1. あらゆる新規のDML操作を停止します。
  2. Extractで既存バイナリ・ログのすべての処理を終了します。これは、チェックポイント位置が最終ログのオフセットに達した時間を注記することで確認できます。
  3. Extractがデータの処理を終了したら、Extractグループを停止して、必要ならばバイナリ・ログのバックアップを取ります。
  4. MySQLデータベースを停止します。
  5. 新しい場所のlog-binパスを変更します。
  6. MySQLデータベースを起動します。
  7. 索引ファイルから古いログ名エントリを消去するには、flush masterまたはreset masterを(MySQLのバージョンに応じて)使用します。
  8. Extractを起動します。

双方向レプリケーションの構成

双方向構成では、各システムのトランザクション変更をもう一方のシステムにレプリケーションすることをサポートするために、ソースおよびターゲットの両方のシステムにExtractおよびReplicatプロセスがあります。この構成をサポートするには、適用されたトランザクションが再キャプチャされてソースに送られることが繰り返されることのないよう、各ExtractがローカルのReplicatで適用されたトランザクションをフィルタできる必要があります。さらに、各システムで値の不整合が起こらないようにAUTO_INCREMENT列も設定する必要があります。

  1. 『Oracle DatabaseのためのOracle GoldenGateの使用』アクティブ-アクティブ(双方向)構成でのDDLの伝播に関する項の手順に従って、Oracle GoldenGateを高可用性またはアクティブ-アクティブ・レプリケーション用に構成します。
  2. 適用された操作がキャプチャされてソースに再度ループバックされないように、双方向構成のReplicat操作をフィルタの対象外にするには、各MySQLデータベースで次のステップを実行します。
    • チェックポイント表を使用するように各Replicatプロセスを構成します。Replicatでは、各トランザクションの最後にチェックポイントをこの表に書き込みます。1つのグローバル・チェックポイント表またはReplicatプロセスごとに1つを使用できます。『Oracle GoldenGateの理解』Replicatの概要に関する項を参照してください。

    • Extractパラメータ・ファイルに含まれるTRANLOGOPTIONSパラメータのFILTERTABLEオプションを使用して、チェックポイント表の名前を指定します。Extractプロセスでは、指定された表に対する操作(Replicat操作のみ)で終了するトランザクションは無視されます。

      ノート:

      チェックポイント表の使用は、サポートされている他のデータベースではリカバリを拡張するためのオプションですが、MySQLで双方向レプリケーションを使用する際には必須です(同様にリカバリも拡張されます)。

  3. 双方向操作で発生する可能性のある不一致を回避するよう、MySQLサーバー構成ファイルを編集して、auto_increment_incrementおよびauto_increment_offsetパラメータを設定します。ServerAServerBの2つのサーバーを例として、これらのパラメータを次に示します。

    ServerA:

    auto-increment-increment = 2
    auto-increment-offset = 1
    

    ServerB:

    auto-increment-increment = 2
    auto-increment-offset = 2

リモート・キャプチャのためのMySQLの構成

Oracle GoldenGateのMySQL、Amazon RDS for MySQL、Amazon Aurora MySQL、Azure Database for MySQLのリモート・キャプチャを使用して、Oracle GoldenGateインストールにリモートに配置されているデータベースからトランザクション・ログ・データを取得します。

データベース・サーバー構成

リモート取得が機能するには、MySQLサーバーを次のように構成します。

  1. Oracle GoldenGateリモート取得ユーザーにアクセス権を付与します。

    リモート・データベースに対して次の文を実行し、ユーザーを作成してリモート・キャプチャに必要な権限を付与します。

    mysql > CREATE USER 'username'@'host' IDENTIFIED BY 'Password'; 
    mysql > GRANT ALL PRIVILEGES ON *.* TO 'username'@'host’ WITH GRANT OPTION; 
    mysql > FLUSH PRIVILEGES;
  2. リモートのMySQLサーバーのserver_id値は0より大きくする必要があります。この値は、MySQLリモート・サーバーで次の文を発行して検証できます。

    mysql > show variables like ‘server_id’;
    

    server_idの値が0の場合は、my.cnf構成ファイルを変更して0より大きい値を設定します。

Oracle GoldenGate構成

Oracle GoldenGate構成には、次のステップがあります。

  1. Extractのパラメータ・ファイルにリモート・データベースの接続情報を指定します。

    SOURCEDB remotedb@mysqlserver.company.com:port, USERID username, PASSWORD
    password
  2. Extractのパラメータ・ファイルの接続情報の後に、次のパラメータを追加します。

    TRANLOGOPTIONS ALTLOGDEST REMOTE

MySQL用Oracle GoldenGateリモート取得の制限

Oracle GoldenGate for MySQLとMySQLのネイティブ・レプリケーション・スレーブの共存は、次の条件と制限でサポートされています。

  • ネイティブ・レプリケーション・スレーブには、現在実行中のスレーブとは異なるserver_idを割り当てる必要があります。スレーブserver_idの値は、マスター・サーバーで次のMySQLコマンドを使用して表示できます。
    mysql> show slave hosts;
    • Oracle GoldenGate取得が、A slave with the same server_uuid or server_id as this slave has connected to the masterで異常終了した場合は、取得の名前を変更して取得を再開します。

    • ネイティブ・レプリケーション・スレーブが、A slave with the same server_uuid or server_id as this slave has connected to the masterで異常終了した場合は、ネイティブ・レプリケーション・スレーブのserver_idを変更して再起動します。

  • リモート取得はLinux64ビット・プラットフォームでのみサポートされ、Windowsではサポートされません。 ただし、LinuxのOracle GoldenGateのリモート・キャプチャは、リモートWindowsマシンで実行されているMySQLデータベースから取得できます。

MySQLキャプチャおよび配信での双方向SSL接続の構成

Oracle GoldenGate MySQLのキャプチャと配信で双方向SSLを使用するには、認証局(ca.pem)ファイル、クライアント証明書(client-cert.pem)ファイルおよびクライアント・キー(client-key.pem)ファイルのフルパスをキャプチャと配信に指定する必要があります。
証明書ファイルの生成の詳細は、次を参照してください。

https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-rsa-files-using-mysql.html

これらのパスは、ExtractとReplicatのパラメータ・ファイルでSETENVパラメータを使用して指定する必要があります。

双方向SSL接続を設定するためのSETENV環境パラメータは次のとおりです。

  • OGG_MYSQL_OPT_SSL_CA: 認証局のフルパスを設定します。

  • OGG_MYSQL_OPT_SSL_CERT: クライアント証明書のフルパスを設定します。

  • OGG_MYSQL_OPT_SSL_KEY: クライアント・キーのフルパスを設定します。

次の例では、MySQL SSL認証局、クライアント証明書およびクライアント・キーのパスがOracle GoldenGate MySQL ExtractおよびReplicatパラメータに設定されます。
SETENV (OGG_MYSQL_OPT_SSL_CA='/var/lib/mysql.pem') 
SETENV (OGG_MYSQL_OPT_SSL_CERT='/var/lib/mysql/client-cert.pem') 
SETENV (OGG_MYSQL_OPT_SSL_KEY='/var/lib/mysql/client-key.pem')

MySQLレプリケーション・スレーブを使用した取得

MySQLレプリケーション・スレーブを構成して、マスターのバイナリ・ログ・イベントをスレーブから取得できます。

通常、スレーブによって適用されるトランザクションは、スレーブのbinlogではなくリレー・ログに記録されます。スレーブがマスターから受け取るトランザクションをbinlogに書き込むには、Oracle GoldenGateの他のバイナリ・ログ・パラメータとともに、my.cnflog-slave-updatesオプションを1に指定して、レプリケーション・スレーブを起動する必要があります。マスターのトランザクションがスレーブのbinlogに書き込まれた後で、通常のOracle GoldenGateキャプチャをスレーブに対して設定すると、スレーブのbinlogを取得して処理できます。

MySQLに関するその他のOracle GoldenGateパラメータ

MySQLインストールで次のパラメータを使用できます。デフォルト以外の設定がMySQLデータベースに対して使用される場合、必須です。ビジネス要件や構成によっては、これら以外のOracle GoldenGateパラメータも必要です。

パラメータ 説明

CONNECTIONPORT port_numberを使用したDBOPTIONS

MySQLがデフォルトである3306で実行されない場合、Oracle GoldenGateプロセスの接続先のMySQLインスタンスのTCP/IP接続ポート番号をVAMに指定するために必要です。

DBOPTIONS CONNECTIONPORT 3307 

HOST host_idを使用したDBOPTIONS

Replicatの接続先のシステムをホストしているMySQLのDNS名またはIPアドレスを指定します。

ALLOWLOBDATATRUNCATEを使用したDBOPTIONS

レプリケートするLOBデータがターゲットMySQLのCHARVARCHARBINARYまたはVARBINARY列に対して大きすぎる場合にReplicatが異常終了することを防ぎます。

USERIDおよびPASSWORDを使用したSOURCEDB

MySQLデータベースに接続するOracle GoldenGateプロセスによって使用されるデータベース、ユーザー名およびパスワードで構成されるデータベース接続情報を指定します。MySQLがデフォルト・ポートである3306で実行されていない場合、SOURCEDB dbname@hostname:port, USERID user, PASSWORD passwordのようにポート番号を含む完全な接続文字列を指定する必要があります。.次に例を示します。

SOURCEDB mydb@mymachine:3307, USERID myuser, PASSWORD mypassword

MySQLデータベースをポート3306で実行中ではない場合、GGSCI経由でデータベースに影響するコマンドを発行する際に、DBLOGINコマンドでMySQLデータベースの接続ポートも指定する必要があります。

DBLOGIN SOURCEDB dbname@hostname:port, USERID user, PASSWORD password

たとえば:

GGSCI> DBLOGIN SOURCEDB mydb@mymachine:3307, USERID myuser, PASSWORD mypassword 

SQLEXEC

ReplicatでMySQLの接続タイムアウトを回避できるようにするため、Replicatパラメータ・ファイルのSQLEXEC文で次のコマンドを構成します。

SQLEXEC "select CURRENT_TIME();" EVERY n MINUTES

説明: nは、Replicatで再接続を行うまでの最大間隔です。推奨される接続タイムアウトは31536000秒(365日)です。

グローバル変数sql_mode

MySQL 5.7でハートビート表を機能させるには、MySQLグローバル変数sql_modeNO_ZERO_IN_DATE, NO_ZERO_DATEを含めないでください。次の例のsql_modeには、NO_ZERO_IN_DATE,NO_ZERO_DATE値が含まれています。

mysql> show variables like '%sql_mode%';+---------------+-
+
| Variable_name | Value                                                      
                                                                              
|
+---------------+------------------------------------------------
+
| sql_mode      |
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_
DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+------------------------------------------------
-----------------------------------------------------------------
+
1 row in set (0.00 sec)
これらの値は、次のコマンドを発行して削除する必要があります。
mysql> Set global
sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO
_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show variables like '%sql_mode%';
+---------------+--------------------------------------
-------------------------------------------------+
| Variable_name | Value                                                      
                                                 |
+---------------+--------------------------------------
-------------------------------------------------+
| sql_mode      |
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREA
TE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-----------------------------------
-------------------------------------------------+
1 row in set (0.01 sec)

特定の開始ポイントへのExtractの設定

ADD/ALTER EXTRACTコマンドを使用すると、Extractの位置をトランザクション・ログ内の特定の開始ポイントに設定できます。

{ADD | ALTER EXTRACT} group, LOGNUM log_num, LOGPOS log_pos

  • groupは、開始ポイントが必要なOracle GoldenGate Extractのグループ名です。

  • LOGNUMはログ・ファイル番号です。たとえば、必要なログ・ファイルの名前がtest.000034の場合、LOGNUMの値は34です。Extractでは、このログ・ファイルが検索されます。

  • LOGPOSは、特定のトランザクション・レコードを識別する、ログ・ファイル内のイベント・オフセット値です。イベント・オフセット値は、ログ・レコードのヘッダー・セクションに格納されます。binlogファイルの先頭に配置するには、LOGPOSを0に設定します。

MySQLログでは、イベント・オフセット値は所定のバイナリ・ファイル内でのみ一意にできます。位置の値とログ番号の組合せにより、トランザクション・レコードが一意に識別されます。ログ番号の最大長は8バイトの符号なし整数です。また、最大ログ・オフセット長は8バイトの符号なし整数です。ログ番号とログ・オフセットはパイプ(|)デリミタで区切ります。指定したログ内でこの位置の後に使用可能なトランザクション・レコードが、Extractによってキャプチャされます。また、タイムスタンプを使用してExtractを配置することもできます。