業界トップクラスのデータベースエキスパート集団

株式会社アクアシステムズ

Oracle GoldenGateによる高速データ連携
最終回「拡張機能/Tips」

 Oracle GoldenGateによる高速データ連携

update:

最終回「拡張機能/Tips」

著者:吉田 宗弘

1. Introduction

1.1 拡張機能/Tips

前回まででGoldenGate の基本機能を使用して、様々な構成のレプリケーション環境が構築可能な事を確認しました。GoldenGate はVersion Up 度に対応するDatabase を増やし、拡張機能としてOracle Database との連携を強化してきました。今回は拡張機能の代表例である統合キャプチャを取り上げてみたいと思います。また、最終回として、GoldenGate のTips や本連載を行うに当たって参考としてサイトについても纏めました。

1.2 統合キャプチャ

GoldenGate のCapture プロセスは、クラシック・キャプチャ, 統合キャプチャと呼ばれる2つのモードを持っています。これまでは、従来モード (クラシック・キャプチャ) を使用した手順について説明を行ってきました。ここではもう1つのキャプチャ・モードである統合キャプチャについて説明を行います。
先ず、2つのキャプチャ・モードの違いについて説明します。
クラシック・キャプチャは、GoldenGate がサポートする全てのDB, DB Version で使用可能ですが、XML Type表, RAC 上のXA/Parallel DML, セグメント圧縮されたテーブル等はサポートされていません。対して統合キャプチャは、Oracle 11.2.0.3 以降が対象となりますが、Database Mining Server からLCR (論理変更レコード) を受信する方式で変更内容を取得し、クラシック・キャプチャで未サポートだったデータ型についても、サポートされています。
(統合キャプチャを使用しても、サポートされないデータ型もあります。)


キャプチャ・モードの比較

キャプチャ・モードの比較
注1: 11.2.0.3 の場合は、Notes#1411356.1で説明されているBundle Patchが 適用されている必要があります。また、Compatible パラメータが11.2.0.0.0 以上 (11.2.0.3.0 以上を推奨) に設定されている必要があります。
注2: サポートされないデータ型については、セットアップガイド1.5 「サポートされるOracle データ型の詳細」を参照願います。


以下に、クラシック・キャプチャ, 統合キャプチャの概念図を示します。

クラシック・キャプチャ, 統合キャプチャの概念図

それでは実際に、統合キャプチャの設定を行ってみましょう。
統合キャプチャを使用するためには、以下の手順で設定を行います。

1) 統合キャプチャのための初期化パラメータ設定
2) Capture プロセスのパラメータに、統合キャプチャ用のパラメータ追加
3) Capture プロセスをMining Database に登録

※ GoldenGate では、クラシック・キャプチャと統合キャプチャを併用する事が可能です。

それでは実際に統合キャプチャの設定を行って、セグメント圧縮を行っているテーブルが正しく反映される事を確認してみましょう。
※ 今回は、Target DB のemp 表をセグメント圧縮して検証を行います。


1.2.1 統合キャプチャの設定

1)統合キャプチャのための初期化パラメータ設定 統合キャプチャを使用するためには、対象のデータベース・インスタンスに以下のパラメータが設定されている必要があります。

統合キャプチャで設定が必要となるパラメータ

統合キャプチャで設定が必要となるパラメータ
※ streams_pool_size を変更する事で、sga_target 等の変更も必要となる場合があります。

上記パラメータはAlter system で動的に変更する事も可能ですが、今回検証に使用している環境ではsga_target も併せて変更する必要があるため、初期化パラメータを変更してインスタンスを再起動しました。
今回変更したパラメータを以下に示します。


統合キャプチャの設定に伴い変更した初期化パラメータ (括弧内はデフォルト)

統合キャプチャの設定に伴い変更した初期化パラメータ


統合キャプチャを使用するにあたってDBの設定が要件を満たしているかチェックするためのスクリプトが、My Oracle Support のNotes#1448324.1 で提供されていますので、統合キャプチャを使用する場合には事前に提供スクリプトによるチェックを行って下さい。

2) Captureプロセスのパラメータに、統合キャプチャ用のパラメータ追加
Capture プロセス (CAP01) のパラメータ・ファイル



パラメータの説明

パラメータの説明

注 : 今回検証を行った環境で、downstream_real_time_mine を設定すると、OGG-02032 エラーが発生してCapture の起動に失敗する事象が発生した。同様の事象は、Oracle Support にも報告されているが、Oracle 社では再現に至っていない模様。そのため今回は、downstream_real_time_mine の設定を削除して検証を実施した。本パラメータのデフォルトはN となっているため、本パラメータが設定できないとArchive Log からのCapture となってしまうが、今回はSource DB と同じマシン上に統合キャプチャプロセスが存在するため、本パラメータの設定無しでもRedo Log からのMining が可能になったと思われる。

3) Capture プロセスをMining Database に登録
統合キャプチャの場合はMining Database への登録が必要となります。
GGSCI から、定義済みのCapture を一旦削除してから、Mining Database に登録を行います。

Mining Database への登録が完了したら、通常通りCapture, DataPump, Replicat を起動して完了です。

注: Source DB の外部にMining Database を構成している場合は、事前にMININGDBLOGINコマンドでMining Databaseと接続を確立しておく必要があります。

1.2.2 セグメント圧縮の有効化

Target DB のemp 表に対してセグメント圧縮を有効化します。



1.2.3 動作確認

統合キャプチャの設定/検証準備が完了したので、再度双方向レプリケーションの確認を行って、統合キャプチャがセグメント圧縮したテーブルに対して有効である事を確認します。


以上で、統合キャプチャを使用しての検証が完了しました。因みに、統合キャプチャが構成されていない環境で、圧縮表に対する更新データの抽出を行おうとすると以下のエラーが発生してCapture プロセスが異常終了します。



2. まとめ

以上で、GoldenGate の主要機能について一通りの検証を行う事ができました。これまで見てきたように、GoldenGate は非常にシンプルな製品で容易に他のDB とほぼリアルタイムにデータ連携を行う事が可能です。これによってDB 移行時のシステム停止時間の極小化, スキーマ統合, DWHサイトに対するデータ最新化, バックアップ・サイトの構築等、様々な場面で利用する事が可能です。
また今回は特に触れませんでしたが、GoldenGate には32ビットから128ビットの暗号化機能も含まれており、機密データもセキュアに転送する事が可能です。

2.1 Amazon RDS との連携

GoldenGate 単体の機能ではありませんが、Amazon が2014/4/3 にRDS のGoldenGate 対応を発表しました。これは、オンプレミス/EC2環境にGoldenGate のHub サイトをセットアップして、オンプレミス/EC2/RDS環境のDatabase をRDS インスタンスに対してデータ同期を行うものです。Amazon では現在、以下の5つの構成を想定しています。Amazon が想定しているGoldenGate を使用したデータ連携の構成を以下に示します。



上記のように、GoldenGate が変更内容をCapture するSource DB は、オンプレミス /EC2/RDS 等環境を問わずRDS に構築されたTarget DB にデータを反映させる事ができます。設定内容についても、初期化パラメータの設定/Supplemental Logging の有効化/Archive Log 保持期間の設定等一般的なものだけで、特殊な設定は必要ありません。これによって、様々な環境に構築してきたDatabase の災害対策サイトや統合Database をRDS 上に容易に構築できるようになります。Cloud のマーケット・リーダーであるAmazon がRDS でGoldenGate を使えるようにした事で、今後GoldenGate が利用される機会が益々増加する事が予想されます。巻末に示したURL に、GoldenGate を使用してRDS 環境とデータ同期を行う手順についても記載されていますので、是非ご確認下さい。

3. GodenGate Tips

3.1 CSN (コミット順序番号)

GoldenGate では、様々なDB からCommit された変更内容を取得するため、CSN (コミット順序番号) をトレイル・ファイルに含める事でトランザクションを一意に識別できるようになっています。CSN はGoldenGate が作成するトランザクションID で、実際にはデータ取得対象のDB が生成しているシリアル番号を使用しています。例えばOracle Database の場合には、SCN (システム変更番号) がそのままCSN としてマッピングされます。CSN の詳細については、管理者ガイドの付録4 「コミット順序番号について」をご参照下さい。

3.2 初期データのロード

GoldenGate を使用してデータ連携を行う場合、最初にSource DB からTarget DB に初期データをロードする必要があります。通常GoldenGate はArchive Log/Redo Log から変更データの内容を取得しますが、Extract パラメータにSOURCEISTABLE を指定する事で、テーブルから直接データを取得する事が可能になっています。これをそのままGoldenGate でTarget DB に反映させる事も可能ですが、GoldenGate は1件ずつデータを反映していくため、初期データのローディングには不向きです。そこでGoldenGate には、出力するファイルを通常のトレイル・ファイル形式でなく、SQL*Loader (Oracle 用), BCP, DTS, SSIS (SQL Server 用), Loadutil (IBM DB/2 用) 等の外部のデータ・ローディング・ツールの形式で出力するためのオプションが用意されており、高速に初期データのロードが行えるようになっています。手順の詳細については、管理者ガイド 15章 「初期データ・ロードの実行」を参照して下さい。

注意: 使用するGoldenGate のバージョンによっては、使用制限がある場合がありますので、事前に使用するバージョンのマニュアルをご確認下さい。
例:11.2.1.0.1 のマニュアルでは、GoldenGate ダイレクト・ロードを使用したデータのロードで、LOB/LONG データの抽出はサポートされない旨の記載がありますが、12.1.2 のマニュアルではLOB/LONG/XML データ型もサポートされる旨記載されています。

またMy Oracle Support のNotes#1276058.1には、exp/imp, expdp/impdp を使用して初期データのロードを行う方法が紹介されていますので、併せてご確認下さい。

注意 : Notes#1276058.1 で紹介されている方法は、データの一貫性を担保するため、exp/expdp 実行時にflashbasck_scn を指定しています。 (Repicat でaftercsnを指定する事で、指定したSCN 以降をReplicat による反映の対象とするため)従って、大規模表のデータをexp/expdp 使用して初期データの抽出を行う場合にはUNDO表領域のサイズにご注意下さい。

3.3 Sequence の伝播

Sequence を伝播させる場合は、Capture, DataPump の各パラメータ・ファイルに伝播させるSequence を指定する事で伝播が可能になります。但し、Target 側の順序番号がSource 側より進んでいる事は保障されますが、Source 側/Target 側での順序番号の一致までは保障されません。
また、双方向の伝播については未サポートとなっています。

3.4 Truncateの伝播

GoldenGate はデフォルトではTruncate 操作を処理しません。Truncate を伝播させる場合には、以下の2つの方法があります。

1) GETTRUNCATES/IGNORETRUNCATES パラメータを指定する。 (表に固有)
2) DDL レプリケーションを使用する。

どちらの方法で伝播させても構いませんが、以下のいずれかの条件に合致する場合Oracle はログを取得しないので、DDL レプリケーションを使用する必要があります。

1) Truncate Partition 文
2) 空表 又は 空パーティションを含む表に対するTruncate
また、どちらの方法を使用しても、双方向の伝播については未サポートとなっています。

3.5 各プロセスの自動起動/自動再起動

今回の検証では、全てのプロセスを手動で起動/停止を行いましたが、Manager プロセスのパラメータ・ファイルにAUTOSTART/AUTORESTART パラメータを指定する事で指定されたプロセスの自動起動や、プロセスの異常終了を検知した際の自動再起動を行わせる事ができます。プロセスの再起動については、最大試行回数や待機時間を明示的に指定する事ができます。

3.6 Target DB でTriggerによる更新/参照整合性制約による削除の無効化

GoldenGate によるレプリケーション対象となっているテーブルに対して、Trigger による更新や参照整合性制約による削除が有効になっており、Target DB 側でもこれが有効化されていると、Trigger/制約による更新内容がTarget DB 側で二重に適用されてしまうため、Target 側ではこれを無効化しておく必要があります。
Oracle 10.2.0.5 以降, Oracle 11.2.0.2 以降の環境 (11.1.0 は未対応) では、Replicat のパラメータ・ファイルにSUPPRESSTRIGGERS を指定する事で、Replicat による更新時にTrigger の起動を抑止する事が可能です。

3.7 GodenGate 運用/監視のポイント

GoldenGate を運用するに当って、通常通りプロセスの死活監視やエラーログの監視は当然重要ですが、GoldenGate は更新データをトレイル・ファイルとして出力し、伝播/適用を継続して行うため、トレイル・ファイルの領域監視も重要となります。更に、GoldenGate が処理できなかったレコードを出力するための破棄ファイルを各プロセスのパラメータ・ファイル (DISCARDFILE パラメータ) で指定していますが、デフォルトで破棄ファイルサイズの上限は1MB に設定されており、上限サイズに達するとプロセスは異常終了してしまいます。破棄ファイルサイズの上限は、MAXBYTES 又はMEGABYTES パラメータで変更する事が可能です。(破棄ファイルサイズの上限は、2GBです。) 更に、DISCARDROLLOVER パラメータを指定する事で破棄ファイルのローテーションをスケジュールする事が可能です。長時間の運用で、破棄ファイルサイズが上限に達してプロセスが異常終了しないように、適切に破棄ファイルサイズの上限を設定する事と、ローテーションを組込む事が重要となります。



3.8 GoldenGate 12c

今回は使用しませんでしたが、既にGoldenGate の新バージョン (12.1.2.0.0) がリリースされており、E-Delivery やUS OTN から入手可能になっています。最新のOracle Database 12c への対応の他にも様々な新機能が提供されており、Oracle Database では11g (11.1.0.6) 以降のバージョンに対応しています。GoldenGate 12c の新機能についてはホワイト・ペーパー等で詳しく紹介されていますので、ここでは割愛します。12c 以前のGoldenGate をInstallする場合zip ファイルを解凍するだけでしたが、12c からはUniversal Installer を使用するようになっています。最後に、GoldenGate 12c Install の画面ショットを紹介します。

1) Install Package の選択
Package を展開し、fbo_ggs_Linux_x64_shiphome/Disk1 ディレクトリ下に移動し、Universal Installer を起動します。Oracle 12c 用, Oracle 11g 用どちらのPackage をInstall するか聞かれるので適宜選択します。 (今回はOracle 11g 用を選択しました。)




2) GoldenGate インストール場所を指定 GoldenGate のInstall 先を聞かれるので、適切な場所を指定します。初期状態では、Software Location, Database Location 両方の入力フィールドにORACLE_HOME の値が入っています。Software Location に、GolenGate のInstall ディレクトリを指定します。「Start Manager」チェックボックスをチェックしておくと、Install 完了した後にManager が自動起動されます。



3) Install 内容の確認
Install のサマリが表示されますので、内容を確認し問題が無いようであればInstall を開始します。




4) Install が完了するまで待機
Install が開始されるので、完了するまで待機します。




5) Universal Installer の終了
Install が完了したら、Universal Installer を終了します。




6) 環境の確認


環境を確認するとサブディレクトリが作成され、指定したポート番号でManager が起動されている事が確認できます。Manager プロセスのパラメータ・ファイルにはポート番号のみ指定されていますので、必要に応じて編集します。


4. 参考情報

以下に本書を執筆するにあたって参考にした情報を記載します。

製品概要 (OTN Japan)
http://www.oracle.com/technetwork/jp/middleware/goldengate/overview/index.html

その他製品詳細 (OTN Japan)
http://www.oracle.com/technetwork/jp/middleware/goldengate/learnmore/index.html

Support Database (11.1 まで)
http://www.oracle.com/technetwork/middleware/goldengate/
ogg-technologies-matrix-131895.xls

Manual (OTN Japan)
http://www.oracle.com/technetwork/jp/middleware/goldengate/documentation/
goldengate-098310-ja.html

統合キャプチャによるデータ取得 (英文)
http://www.oracle.com/technetwork/database/availability/
8398-goldengate-integrated-capture-1888658.pdf

Package Download (US OTN/E-Delivery)
http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html
https://edelivery.oracle.com/

Amazon RDS のGoldenGate 対応 (英文)
http://aws.amazon.com/jp/about-aws/whats-new/2014/04/03/
you-can-now-use-oracle-goldengate-with-amazon-rds-for-oracle/

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/
Appendix.OracleGoldenGate.html

参考にしたSupport 情報 (参照するには、サポート契約が必要となります。)
ddl_setup.sql がORA-1031で失敗する問題の対応
https://support.oracle.com/CSP/main/article?
cmd=show&type=NOT&doctype=BULLETIN&id=1576164.1

Public Synonym のalter 操作にsysdba 権限が必要になる。
https://support.oracle.com/CSP/main/article?
cmd=show&type=NOT&doctype=BULLETIN&id=1403026.1

統合キャプチャを使用するためのDB Bundle Patch (DB 11.2.0.3)
https://support.oracle.com/CSP/main/article?
cmd=show&type=NOT&doctype=BULLETIN&id=1411356.1

統合キャプチャの整合性チェックスクリプト
https://support.oracle.com/CSP/main/article?
cmd=show&type=NOT&doctype=BULLETIN&id=1448324.1

データ初期ロードのBest Practice
https://support.oracle.com/CSP/main/article?
cmd=show&type=NOT&doctype=BULLETIN&id=1276058.1

業界トップクラスのデータベースエキスパート集団
アクアシステムズ

データベースに関するすべての課題、トラブル、お悩みを解決します。
高難易度、複雑、他社対応不可案件など、お気軽にご相談ください。