13 Oracle GoldenGateのためのシステムの準備および構成
内容は次のとおりです。
- データ使用可能性の確保
- ログ・パラメータの設定
- ホスト名の追加
- セッション・キャラクタ・セットの設定
- 処理のための表の準備
- log-binの場所の変更
- 双方向レプリケーションの構成
- MySQLレプリケーション・スレーブを使用した取得
- AWS Aurora MySQLへのセキュアなデータベース接続の確立
Oracle GoldenGateは、SSHトンネリングを使用し、.pemファイルを使用してAWS Auroraインスタンスに接続し、オンプレミスからOracle GoldenGateのMySQL配信を実行します。 - MySQLに関するその他のOracle GoldenGateパラメータ
- 特定の開始ポイントへのExtractの設定
親トピック: MySQLでのOracle GoldenGateの使用
データ使用可能性の確保
十分なバイナリ・ログ・データを保持し、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
はサポートされません。
Extractは次のパラメータ設定を確認してこの索引ファイル・パスを取得します。
ホスト名の追加
Oracle GoldenGateは、接続先のデータベースの名前をSOURCEDB
パラメータから取得します。接続の成功は、システム・ホスト・ファイルで適切に構成されているlocalhostエントリに依存します。不適切なローカル・ホスト構成によって問題が生じないようにするには、SOURCEDB
を次のように使用します。
SOURCEDB
database_name
@
host_name
説明: database_name
はMySQLインスタンスの名前、host_name
はローカル・ホストの名前またはIPアドレスです。修飾されていないホスト名を使用する場合、名前はDNSデータベースに適切に構成されている必要があります。そうでない場合、完全修飾されたホスト名(myhost.company.com
など)を使用します。
セッション・キャラクタ・セットの設定
GGSCI
、ExtractおよびReplicatプロセスは、データベースへの接続時にセッション・キャラクタ・セットを使用します。MySQLでは、セッション・キャラクタ・セットは、SOURCEDB
およびTARGETDB
のSESSIONCHARSET
オプションから取得されます。Oracle GoldenGateを構成する際、これらのいずれかでセッション・キャラクタ・セットを必ず指定してください。
処理のための表の準備
この項では、処理のための表の準備方法について説明します。表の準備では次のタスクが必要です。
行識別子の割当て
Oracle GoldenGateでは、レプリケートされた更新および削除に対して正しいターゲット行を見つけるために、ソース表とターゲット表にある形式の一意の行識別子が必要です。
親トピック: 処理のための表の準備
Oracle GoldenGateで使用する行識別子の種類を判別する方法
TABLE
またはMAP
文でKEYCOLS
句が使用されないかぎり、Oracle GoldenGateは、使用する行識別子を次の優先順位に従って選択します。
親トピック: 行識別子の割当て
一意索引から導出される主キーを持つ表
表に主キーがなく、索引付けされた列が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がレプリケートされます。同じトリガーや制約がターゲット表でアクティブになった場合、レプリケートされたバージョンのために重複となり、データベースでエラーが返されます。ソース表にemp_src
とsalary_src
、ターゲット表にemp_targ
とsalary_targ
を使用している次の例について考えます。
-
emp_src
に対して削除が発行されます。 -
それによって、削除が
salary_src
にカスケードされます。 -
Oracle GoldenGateが、両方の削除をターゲットに送信します。
-
まず親削除が到着し、
emp_targ
に適用されます。 -
親削除によって、削除が
salary_targ
にカスケードされます。 -
salary_src
のカスケードされた削除が、salary_targ
に適用されます。 -
行は、すでに手順5で削除されているため、見つかりません。
親トピック: 処理のための表の準備
log-binの場所の変更
log-bin
変数をMySQL構成ファイルで使用してバイナリ・ログの場所を変更すると、索引ファイル内に2つの異なるパス・エントリが生じることになり、エラーが発生する場合があります。エラーの可能性を避けるため、次の操作を行ってlog-binの場所を変更します。
- あらゆる新規のDML操作を停止します。
- Extractで既存バイナリ・ログのすべての処理を終了します。これは、チェックポイント位置が最終ログのオフセットに達した時間を注記することで確認できます。
- Extractがデータの処理を終了したら、Extractグループを停止して、必要ならばバイナリ・ログのバックアップを取ります。
- MySQLデータベースを停止します。
- 新しい場所の
log-bin
パスを変更します。 - MySQLデータベースを起動します。
- 索引ファイルから古いログ名エントリを消去するには、
flush master
またはreset master
を(MySQLのバージョンに応じて)使用します。 - Extractを起動します。
双方向レプリケーションの構成
双方向構成では、各システムのトランザクション変更をもう一方のシステムにレプリケーションすることをサポートするために、ソースおよびターゲットの両方のシステムにExtractおよびReplicatプロセスがあります。この構成をサポートするには、適用されたトランザクションが再キャプチャされてソースに送られることが繰り返されることのないよう、各ExtractがローカルのReplicatで適用されたトランザクションをフィルタできる必要があります。さらに、各システムで値の不整合が起こらないようにAUTO_INCREMENT
列も設定する必要があります。
MySQLレプリケーション・スレーブを使用した取得
MySQLレプリケーション・スレーブを構成して、マスターのバイナリ・ログ・イベントをスレーブから取得できます。
通常、スレーブによって適用されるトランザクションは、スレーブのbinlog
ではなくリレー・ログに記録されます。スレーブがマスターから受け取るトランザクションをbinlog
に書き込むには、Oracle GoldenGateの他のバイナリ・ログ・パラメータとともに、my.cnf
でlog-slave-updates
オプションを1
に指定して、レプリケーション・スレーブを起動する必要があります。マスターのトランザクションがスレーブのbinlog
に書き込まれた後で、通常のOracle GoldenGateキャプチャをスレーブに対して設定すると、スレーブのbinlog
を取得して処理できます。
AWS Aurora MySQLへのセキュアなデータベース接続の確立
Oracle GoldenGateは、SSHトンネリングを使用し、.pemファイルを使用してAWS Auroraインスタンスに接続し、オンプレミスからOracle GoldenGateのMySQL配信を実行します。
AWS Aurora MySQLへのセキュアなデータベース接続のためのSSHトンネリングを設定するには、次のタスクを実行します。
タスク1: SSHトンネリングの構成
ssh -i your_key.pem -v -f -L local port number:cluster end point:end
point port number ec2 host name > mysql_remote_forward.log 2>&1
次の例では、ローカルにインストールされているMySQLでポート番号3306が使用される可能性があるため、ローカル・ポート番号は3308に設定されています。
bash-4.1$ ssh -i "test.pem" -v -N -f -L
3308:test-cluster.cluster-copyxiqzdjjl.us-west-2.rds.amazonaws.com:3306
ec2-user@ec2-52-11-244-17.us-west-2.compute.amazonaws.com >
mysql_remote_forward.log 2>&1
ssh -i your_key.pem -v -f -L local port number:cluster end point:end point
port number ec2 host name -o command to bypass proxy in double quotes> >
mysql_remote_forward.log 2>&1
bash-4.1$ ssh -i "test.pem" -v -N -f -L 3308:test-cluster.cluster-copyxiqzdjjl.us-west-2.rds.amazonaws.com:3306
ec2-user@ec2-52-11-244-17.us-west-2.compute.amazonaws.com -o "ProxyCommand=nc
-X connect -x www-proxy.us.oracle.com:80 %h %p" > mysql_remote_forward.log 2>&1
タスク2: Extractパラメータ・ファイルの接続文字列の指定
remotedb@127.0.0.1:3308 userid
remote-user, password
remote-user-password
bash-4.1$ cat ~/.ssh/config
ServerAliveInterval 50
MySQLに関するその他のOracle GoldenGateパラメータ
MySQLインストールで次のパラメータを使用できます。デフォルト以外の設定がMySQLデータベースに対して使用される場合、必須です。ビジネス要件や構成によっては、これら以外のOracle GoldenGateパラメータも必要です。
表13-1 MySQLに関するその他のOracle GoldenGateパラメータ
パラメータ | 説明 |
---|---|
|
MySQLがデフォルトである3306で実行されない場合、Oracle GoldenGateプロセスの接続先のMySQLインスタンスのTCP/IP接続ポート番号をVAMに指定するために必要です。 DBOPTIONS CONNECTIONPORT 3307 |
|
Replicatの接続先のシステムをホストしているMySQLのDNS名またはIPアドレスを指定します。 |
|
レプリケートするLOBデータがターゲットMySQLの |
|
MySQLデータベースに接続するOracle GoldenGateプロセスによって使用されるデータベース、ユーザー名およびパスワードで構成されるデータベース接続情報を指定します。MySQLがデフォルト・ポートである3306で実行されていない場合、
MySQLデータベースをポート3306で実行中ではない場合、GGSCI経由でデータベースに影響するコマンドを発行する際に、 DBLOGIN SOURCEDB dbname@hostname:port, USERID user, PASSWORD password 次に例を示します。 GGSCI> DBLOGIN SOURCEDB mydb@mymachine:3307, USERID myuser, PASSWORD mypassword |
|
ReplicatでMySQLの接続タイムアウトを回避できるようにするため、Replicatパラメータ・ファイルの
説明: |
特定の開始ポイントへのExtractの設定
次のコマンドを使用して、トランザクション・ログの特定の開始ポイントにADD EXTRACT
およびALTER EXTRACT
コマンドを配置できます。
{ADD | ALTER EXTRACT}
group
, VAM, LOGNUM
log_num
, LOGPOS
log_pos
-
group
は、開始ポイントが必要なOracle GoldenGate Extractのグループ名です。 -
log_num
はログ・ファイル番号です。たとえば、必要なログ・ファイルの名前がtest.000034
である場合、この値は34です。Extractでは、このログ・ファイルが検索されます。 -
log_pos
は、特定のトランザクション・レコードを識別する、ログ・ファイル内のイベント・オフセット値です。イベント・オフセット値は、ログ・レコードのヘッダー・セクションに格納されます。binlog
ファイルの先頭に配置するには、log_pos
を4に設定します。log_pos
の0または1は、読取りと処理を開始するための有効なオフセットではありません。
MySQLログでは、イベント・オフセット値は所定のバイナリ・ファイル内でのみ一意にできます。位置の値とログ番号の組合せにより、トランザクション・レコードが一意に識別されますが、この組合せの長さは37文字を超えることはできません。指定したログ内でこの位置の後に使用可能なトランザクション・レコードが、Extractによってキャプチャされます。また、タイムスタンプを使用してExtractを配置することもできます。