13 Oracle GoldenGateのためのシステムの準備および構成
内容は次のとおりです。
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
ディレクトリの読取り権限と実行権限
-
親トピック: Oracle GoldenGateのシステムの準備と構成
データ使用可能性の確保
十分なバイナリ・ログ・データを保持し、Extractを停止した場合、または計画外の停止が発生した場合に、Extractをチェックポイントから再開できるようにします。Extractには、コミットされていない最も古い作業単位の開始点を含むバイナリ・ログ、およびそれ以降のすべてのバイナリ・ログへのアクセス権が必要です。推奨される保存期間は、少なくとも24時間は対応可能な、アクティブな情報とアーカイブされた情報の両方を含むトランザクション・データです。データ量とビジネス要件を考慮して最適な保存時間を決定するためにテストを実行しなければならない場合があります。
処理中にExtractで必要とされる、アクティブまたはバックアップ・ログのデータが保存されていない場合、次のいずれかの修正処理が必要になる場合があります。
-
バイナリ・ログ・データが使用可能な最新の時点からキャプチャを行う(およびターゲットで発生した可能性のあるデータ損失を受け入れる)ようにExtractを修正します。
-
ソース表とターゲット表を再同期してから、Oracle GoldenGate環境を再開します。
Extractのチェックポイントの位置を決定するには、INFO EXTRACT
コマンドを使用します。詳細は、『Oracle GoldenGateコマンド・ライン・インタフェース・リファレンス』のINFO EXTRACTを参照してください。
親トピック: Oracle GoldenGateのシステムの準備と構成
ログ・パラメータの設定
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は次のパラメータ設定を確認してこの索引ファイル・パスを取得します。
親トピック: Oracle GoldenGateのシステムの準備と構成
ホスト名の追加
Oracle GoldenGateは、接続先のデータベースの名前をSOURCEDB
パラメータから取得します。接続の成功は、システム・ホスト・ファイルで適切に構成されているlocalhostエントリに依存します。不適切なローカル・ホスト構成によって問題が生じないようにするには、SOURCEDB
を次のように使用します。
SOURCEDB
dbname
@
hostname:port, USERID mysqluser, PASSWORD welcome
dbname
はMySQLインスタンスの名前、hostname
は名前またはIPアドレス、port
はMySQLインスタンスのポート番号です。修飾されていないホスト名を使用する場合、名前はDNSデータベースに適切に構成されている必要があります。そうでない場合、完全修飾されたホスト名(myhost.company.com
など)を使用します。
親トピック: Oracle GoldenGateのシステムの準備と構成
セッション文字セットの設定
GGSCI
、ExtractおよびReplicatプロセスは、データベースへの接続時にセッション文字セットを使用します。MySQLでは、セッション文字セットは、SOURCEDB
およびTARGETDB
のSESSIONCHARSET
オプションから取得されます。Oracle GoldenGateを構成する際、これらのいずれかでセッション文字セットを必ず指定してください。
親トピック: 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がレプリケートされます。同じトリガーがターゲット表でアクティブになった場合、レプリケートされたバージョンのために重複となり、データベースでエラーが返されます。
カスケード制約に関する考慮事項
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の場所を変更します。
- あらゆる新規のDML操作を停止します。
- Extractで既存バイナリ・ログのすべての処理を終了します。これは、チェックポイント位置が最終ログのオフセットに達した時間を注記することで確認できます。
- Extractがデータの処理を終了したら、Extractグループを停止して、必要ならばバイナリ・ログのバックアップを取ります。
- MySQLデータベースを停止します。
- 新しい場所の
log-bin
パスを変更します。 - MySQLデータベースを起動します。
- 索引ファイルから古いログ名エントリを消去するには、
flush master
またはreset master
を(MySQLのバージョンに応じて)使用します。 - Extractを起動します。
親トピック: Oracle GoldenGateのシステムの準備と構成
双方向レプリケーションの構成
双方向構成では、各システムのトランザクション変更をもう一方のシステムにレプリケーションすることをサポートするために、ソースおよびターゲットの両方のシステムにExtractおよびReplicatプロセスがあります。この構成をサポートするには、適用されたトランザクションが再キャプチャされてソースに送られることが繰り返されることのないよう、各ExtractがローカルのReplicatで適用されたトランザクションをフィルタできる必要があります。さらに、各システムで値の不整合が起こらないようにAUTO_INCREMENT
列も設定する必要があります。
親トピック: Oracle GoldenGateのシステムの準備と構成
リモート・キャプチャのためのMySQLの構成
Oracle GoldenGateのMySQL、Amazon RDS for MySQL、Amazon Aurora MySQL、Azure Database for MySQLのリモート・キャプチャを使用して、Oracle GoldenGateインストールにリモートに配置されているデータベースからトランザクション・ログ・データを取得します。
データベース・サーバー構成
リモート取得が機能するには、MySQLサーバーを次のように構成します。
-
Oracle GoldenGateリモート取得ユーザーにアクセス権を付与します。
リモート・データベースに対して次の文を実行し、ユーザーを作成してリモート・キャプチャに必要な権限を付与します。
mysql > CREATE USER 'username'@'host' IDENTIFIED BY 'Password'; mysql > GRANT ALL PRIVILEGES ON *.* TO 'username'@'host’ WITH GRANT OPTION; mysql > FLUSH PRIVILEGES;
-
リモートのMySQLサーバーの
server_id
値は0より大きくする必要があります。この値は、MySQLリモート・サーバーで次の文を発行して検証できます。mysql > show variables like ‘server_id’;
server_id
の値が0の場合は、my.cnf
構成ファイルを変更して0より大きい値を設定します。
Oracle GoldenGate構成
Oracle GoldenGate構成には、次のステップがあります。
-
Extractのパラメータ・ファイルにリモート・データベースの接続情報を指定します。
SOURCEDB remotedb@mysqlserver.company.com:port, USERID username, PASSWORD password
-
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データベースから取得できます。
親トピック: 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
: クライアント・キーのフルパスを設定します。
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')
親トピック: Oracle GoldenGateのシステムの準備と構成
MySQLレプリケーション・スレーブを使用した取得
MySQLレプリケーション・スレーブを構成して、マスターのバイナリ・ログ・イベントをスレーブから取得できます。
通常、スレーブによって適用されるトランザクションは、スレーブのbinlog
ではなくリレー・ログに記録されます。スレーブがマスターから受け取るトランザクションをbinlog
に書き込むには、Oracle GoldenGateの他のバイナリ・ログ・パラメータとともに、my.cnf
でlog-slave-updates
オプションを1
に指定して、レプリケーション・スレーブを起動する必要があります。マスターのトランザクションがスレーブのbinlog
に書き込まれた後で、通常のOracle GoldenGateキャプチャをスレーブに対して設定すると、スレーブのbinlog
を取得して処理できます。
親トピック: Oracle GoldenGateのシステムの準備と構成
MySQLに関するその他のOracle GoldenGateパラメータ
MySQLインストールで次のパラメータを使用できます。デフォルト以外の設定が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パラメータ・ファイルの
説明: |
グローバル変数 |
MySQL 5.7でハートビート表を機能させるには、MySQLグローバル変数
これらの値は、次のコマンドを発行して削除する必要があります。
|
親トピック: Oracle GoldenGateのシステムの準備と構成
特定の開始ポイントへの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を配置することもできます。
親トピック: Oracle GoldenGateのシステムの準備と構成