<Insert Picture Here>
Oracle
Direct Seminar
オラクルコンサルタントが語る!GoldenGate活用ポイント
アジェンダ
•
Oracle GoldenGate概要
•
Oracle GoldenGate活用ポイント
•
Trigger、Delete Cascade設定テーブルの競合
•
ASMインスタンスへの接続
•
Bounded Recovery
•
まとめ
•
独自のログ取得/適用機構を採用
•
GoldenGate間での高速なログ転送を実現
•
既存システムへの負荷が尐ない
•
負荷分散や統合など、システム用途に応じた多様な組み合わせが可能
Oracle GoldenGate 製品概要
特徴
GoldenGateを活用したデータ連携
DBの移行/Upgrade
•
「移行したいけどシステムを止められない」
•
「停止時間を最小限に抑えて、機会損失を減らしたい」
DBの統合/並行稼働
DBの負荷軽減
DBの複製
•
「散在したDBを、最新のプラットフォームへ統合したい」
•
「データベースを統合しても、元の方はしばらく並行稼働させたい」
•
「新システムを構築したくても、既存DBにこれ以上負荷をかけたくない」
•
「単純に現在利用しているデータベースの負荷を軽減させたい」
•
「複製先が多くて、夜間で終わらない」
•
「毎日Export/Importだと停止時間が長すぎる」
•
「差分複製で効率化できないの?」
Oracle GoldenGate アーキテクチャ
Extract(Capture):
REDOログ・ファイルから変更情報を取得し、
Trailファイルに書き込む
Trail files:
変更情報を溜めておく中間ファイル
Replicat:
変更情報をSQL文に
変換して、DBに適用
Extract(Data Pump):
Trailファイルを読み、変更情報をリモートのTrailファイルに
転送。転送時の圧縮 / 暗号化が可能
Trail
Trail
Extract
(Capture)
Extract
(Data Pump)
Replicat
ターゲットDB
ソースDB
Network
(TCP/IP)
Collector
Manager
REDOログ・ファイル
Manager
Manager: GoldenGate全体を管理
プロセスの起動/停止、監視/管理
Collector:
Data Pumpから送信されたデータを
受信しTrailファイルに出力
GoldenGateによるデータ同期開始まで
•
初期データの移行
•
データ追い付き処理開始
•
データ同期開始
初期データ移行
データ追い付き処理
開始
データ同期開始
初期データの移行
•
初期ロードは大きく2つの方法
•
データベースの機能を使用
•
GoldenGateの機能を使用
•
データベースの機能を使用する場合
exp/imp, Data Pump, トランスポータブル表領域、Backup/Restoreなど
•
GoldenGateの機能を使用する場合
GoldenGateの機能
Extract の出力
ロードの方法
File to Replicat
Trail (GoldenGate形式)
Replicat (SQL実行)
File to Database Utility
テキスト・ファイル
Database utility
Direct load
Replicat に直接送信
Replicat (SQL実行)
データ追い付き処理
データ追い付き処理の対象データ
初期データ移行開始時点から初期データ移行完了後までのソース側
更新データ
データ追い付き処理時間の依存要素
•
初期データ移行期間
•
ソース側DBの更新データ量
追い付き処理時間はシステム次第
5倍~10倍
の実績あり
データ同期開始
•
データ同期開始後の作業
適用時間(lag)の確認
•
更新量が尐ない時間帯は数秒
•
更新量が多い時間帯は一時的に遅延する可能性
⇒
通常運用時と比べて遅延する
ことがないか監視
データ整合性の確認
•
運用設計で策定したルールに従って確認
•
確認対象データを絞って確認
⇒
想定外の更新による不整合が発生
していないか監視
アジェンダ
•
Oracle GoldenGate概要
•
Oracle GoldenGate活用ポイント
•
Trigger、Delete Cascade設定テーブルの競合
•
ASMインスタンスへの接続
•
Bounded Recovery
•
まとめ
Oracle GoldenGate データ連携イメージ
Oracle
instance
Capture
Replicat
DataPump
Collector
trailファイル
trailファイル
Oracle
instance
1本のOracle接
続からSQLで更
新する
Oracleクライアント
SQL
REDOログ
ファイル
SQL
SELECT 1
SELECT 2
DML 1
DML 2
COMMIT
SQL
SELECT 1
SELECT 2
DML 1
DML 2
COMMIT
ターゲット側
ソース側
DML 1
DML 2
DML 1
DML 2
COMMIT
•
データ更新を反映
•
ソースDBのトラン
ザクション順序を保
証
COMMIT
チェックポイント・
ファイル
チェックポイント・
ファイル
Manager
チェックポイント・
ファイル
Manager
DML 1
DML 2
COMMIT
COMMIT
された更
新を抽出
DML 1
DML 2
COMMIT
Bounded
Recoveryファイル
Oracle GoldenGate活用ポイント(ソース編)
Oracle
instance
Data Pump
Trailファイル
Oracleクライアント
ターゲット側
ソース側
Manager
Capture
SQL
SQL
・プロセス監視
OGGログ
OSログ
・Trailファイル運用
・未コミット・トランザクション
・ASM上のRedoログ
・アーカイブログの運用
チェックポイント
ファイル
・OSログへの出力
REDOログ
アーカイブログ
チェックポイント
ファイル
Bounded Recovery
ファイル
・ネットワーク負荷
・DDL伝播
・主キー更新
・主キーの無いテーブル
Oracle GoldenGate活用ポイント(ターゲット編)
Replicat
Trailファイル
Oracle
instance
Oracleクライアント
ターゲット側
ソース側
・Mviewの伝播
・大量更新(バッチ)処理の伝播
Manager
Collector
・プロセス監視
SQL
OGGログ
OSログ
・ネットワーク負荷
・Trailファイル運用
・追い付き処理の
パフォーマンス
SQL
SQL
・Triggerの競合
・Delete Cascadeの競合
・OSログへの出力
アジェンダ
•
Oracle GoldenGate概要
•
Oracle GoldenGate活用ポイント
• Trigger、Delete Cascade設定テーブルの競合
•
ASMインスタンスへの接続
•
Bounded Recovery
•
まとめ
Triggerの競合
•
Trigger設定テーブル(表①)に対し、GoldenGate伝播を設定
•
Triggerにより更新されるテーブル(表②)に対しても、GoldenGate伝播を設定
•
上記設定の場合、ターゲット側の表②に対する
処理が重複
。GoldenGate 10.4で重複
を回避するためには、ターゲット側のTriggerを無効化する必要がある
表①
表②
update
表①
表②
ソース側Trigger
によるInsert
ソース側
ターゲット側
Trigger
による
Insert
ターゲット側
Triggerによ る
Insert
GoldenGate 11gによるTrigger競合回避
•
DBOPTIONS SUPPRESSTRIGGERSパラメータ(Oracle 10.2.0.5/11.2.0.2)
ターゲット側のTriggerによる表②への更新をGoldenGateにより反映させない
①
アプリからソース側表①への更新が実行される
②
Triggerによりソース側表②のデータに更新が実行される
③
GoldenGateによりターゲット側表①へ更新が実行される
④
GoldenGateによりTriggerのターゲット側表②への更新を反映させない
⑤
GoldenGateによりターゲット側表②へ更新が実行される
※上記パラメータを利用する場合、ターゲット側のGoldenGate用DBユーザに、
Streams
の管理者権限を付与
する必要があります。
ソース側
ターゲット側
表①
表②
①
update
表①
表②
②
insert
(Trigger)
③
update
④
insert
(Trigger)
⑤
insert
Delete Cascade設定テーブルの競合
•
ソース、ターゲット両方でDelete Cascade 制約を設定
•
ソース側の親表、子表はいずれもGoldenGate 伝播を設定
•
上記設定の場合、ターゲット側子表に対する
処理が重複
。GoldenGate 10.4で重複を
回避するためには、ターゲット側のcascade制約を外す必要がある
親表
子表
delete
親表
子表
ソース側Cascade制
約 によるdelete
ソース側
ターゲット側
Cascade制
約による
delete
delete
ターゲット側
Cascade制約に
よ るdelete
GoldenGate 11gによるDelete Cascade競合回避
•
DBOPTIONS DEFERREFCONSTパラメータ(Oracle 9.2.0.7以上)
ターゲット側の参照整合性制約による子表へのDeleteチェックを遅延させる。
①
アプリからソース側親表へのDeleteが実行される
②
参照整合性制約によりソース側子表へDeleteが実行される
③
GoldenGateによりターゲット側親表へDeleteが実行される
④
GoldenGateによりターゲット側子表への参照整合性制約はCommitされるまでチェックを
遅延させる
⑤
GoldenGateによりターゲット側子表へDeleteが実行される
親表
子表
①
delete
親表
子表
ソース側
ターゲット側
②
delete
(cascade)
③
delete
④
delete
(cascade)
⑤
delete
アジェンダ
•
Oracle GoldenGate概要
•
Oracle GoldenGate活用ポイント
•
Trigger、Delete Cascade設定テーブルの競合
•
ASMインスタンスへの接続
•
Bounded Recovery
•
まとめ
GoldenGateによるインスタンスへの接続
ソース・データベースがASM上に構成されている場合、
CaptureプロセスはASMインスタンスに接続してREDOログへ
アクセスする必要がある。
•
ソース・データベースのOracleインスタンスへのアクセス
•
GoldenGate用Oracleユーザでのbequath接続
•
GoldenGate用Oracleユーザによるリスナー・プロセス経由の接続
•
ソース・データベースへのASMインスタンスへのアクセス
•
SYSユーザによるOracleリスナー・プロセス経由の接続
•
TRANLOGOPTIONSパラメータのDBLOGREADERオプションを利用
Oracleインスタンスへの接続方法
•
Captureプロセス用パラメータの設定
•
GoldenGate用Oracleユーザでのbequeath接続 (10g/11g)
•
GoldenGate用Oracleユーザでのリスナー・プロセス経由の接続
(10g/11g)
※リスナー・プロセス経由の接続の場合、Captureプロセスが稼働するサーバ
のtnsname.oraファイルにOracle*Netサービス名の設定が必要
USERID <GoldenGate用DBユーザ名> , PASSWORD <password>
USERID <GoldenGate用DBユーザ名>@<Oracle*Netサービス名> ,
PASSWORD <password>
ASMインスタンスへの接続方法
•
Captureプロセス用パラメータの設定
•
SYSユーザでのリスナー・プロセス経由の接続 (10g/11g)
※上記接続の為に以下の対応が必要です。
•
ASMインスタンスのパスワード・ファイルの構成
•
ASMインスタンスのREMOTE_LOGIN_PASSWORDの設定
REMOTE_LOGIN_PASSWORD=<EXCLUSIVE | SHARED>
•
ASMインスタンス接続用tnsnames.oraの設定
•
TRANLOGOPTIONSパラメータのDBLOGREADERオプションを利
用(11gのみ)
※上記接続の為には、GoldenGate用OracleユーザへASMインスタンス接続権限を付
与する必要があります。
TRANLOGOPTIONS ASMUSER sys@<Oracle*Netサービス名> ,
ASMPASSWORD <password>
アジェンダ
•
Oracle GoldenGate概要
•
Oracle GoldenGate活用ポイント
•
Trigger、Delete Cascade設定テーブルの競合
•
ASMインスタンスへの接続
• Bounded Recovery
•
まとめ
GoldenGateとオープントランザクション
Begin, TX 1 Insert, TX 1 Begin, TX 2 Update, TX 1 Insert, TX 2 Commit, TX 2 Begin, TX 3 Insert, TX 3 Begin, TX 4 Commit, TX 3 Delete, TX 4 Begin, TX 2 Insert, TX 2 Commit, TX 2 Begin, TX 3 Insert, TX 3 Commit, TX 3アーカイブ
ログ #1
アーカイブ
ログ #2
Online
Redoログ
Begin, TX 1 Update, TX 1Cache Memory
Capture
一番古いトランザクションの場所
(この場所のアーカイブログがない場合、
プロセスはリカバリ出来ない)
オープン・トランザクションのデータは
Captureのメモリ上に保持される
Begin, TX 4 Insert, TX 1 Delete, TX 4データを読み込み
•
Captureプロセス再起動時に最も古いオープントランザクション
の開始点が含まれるアーカイブログから読み込みを開始する。
−
Captureプロセスはv$transactionからオープントランザクションの情報を取得する。
−
障害時に最も古いアーカイブログを保持しておくための運用を検討しなくてはいけない。
Trail
ファイル
Bounded Recovery 機能概要
•
一定の期間を過ぎたトランザクション情報をファイルに書き
出す機能
−
古いオープントランザクションの情報をファイルで保持し、リカバリ時に使用する。
−
本機能によりGoldenGate導入によって現行のアーカイブログ運用を強く意識する必
要がなくなった。
Begin, TX 1 Insert, TX 1 Begin, TX 2 Update, TX 1 Insert, TX 2 Commit, TX 2 Begin, TX 3 Insert, TX 3 Begin, TX 4 Commit, TX 3 Delete, TX 4 Begin, TX 2 Insert, TX 2 Commit, TX 2 Begin, TX 3 Insert, TX 3 Commit, TX 3アーカイブ
Redoログ
#1
アーカイブ
Redoログ
#2
Online
Redoログ
Begin, TX 1 Update, TX 1Cache Memory
Capture
一番古いトランザクションの場所
だがCaptureのキャッシュ・ファイ
ルを読むため、読み込まない
一定の境界時間より古いオープントラ
ンザクションはPersisted Objectとして
ファイルに保存される
Begin, TX 4 Insert, TX 1 Delete, TX 4Persisted Object
BR Checkpoint
Begin, TX 1 Insert, TX 1 Update, TX 1