DBA & Developer Day 2016...

57
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. 知ってる人は始めている! Oracle GoldenGateフル活用! 具体的に説明します! 日本オラクル株式会社 クラウド・テクノロジー事業統括 Cloud/Big Data/DISプロダクト本部 Master Principal Sales Consultant 後藤 陽介

Transcript of DBA & Developer Day 2016...

Copyright © 2016, Oracle and/or its affiliates. All rights reserved.

知ってる人は始めている!Oracle GoldenGateフル活用!具体的に説明します!

日本オラクル株式会社クラウド・テクノロジー事業統括Cloud/Big Data/DISプロダクト本部Master Principal Sales Consultant 後藤 陽介

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

2

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

本日の内容

GoldenGate 概要(おさらい)

データ活用のためのTips

その他Tips

1

2

3

3

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

本日の内容

GoldenGate 概要(おさらい)

データ活用のためのTips

その他Tips

1

2

3

4

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 5

Oracle GoldenGate - アーキテクチャー概要

GoldenGate

更新ログ

抽出プロセス

(Capture)

転送プロセス

(DataPump)

OSTrailファイル

GoldenGate受信

プロセス(Collector)

適用プロセス

(Replicat)

OSTrailファイル

SQL を生成してトランザクションを適用(標準方式)

論理変更レコードをDBに直接転送

(Oracle DBのみ)

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 6

停止時間を極小化したデータベース移行GoldenGate のよくある使い方

1) システム移行前 2) システム切替当日 3) システム移行後

GoldenGate GoldenGate GoldenGate

切り戻しに活用

現行DB 新環境DB 現行DB 新環境DB 現行DB 新環境DB

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

GoldenGate のよくある使い方

7

クエリー・オフロード / データ活用

GoldenGate

現行DB 新環境DB

新規サービス開発・テスト

必要な表だけレプリケーション

検索処理をオフロード

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Cloudにも対応

8

GoldenGate Cloud Service (GGCS)

他社クラウドサービス

オンプレミス・環境

Database

Database

Oracle Cloud 環境 Oracle Cloud 環境

DBCS GGCS GGCS

GGCS

GGCS DBCS

DBCS

GoldenGate

GoldenGate

単方向 or 双方向

単方向 or 双方向

単方向 or 双方向3rd PartyCloud

DBCS : Database Cloud ServiceExaCS : Exadata Cloud ServiceBDCS : Big Data Cloud Service

*1 : オンプレミス環境用に通常のOracle GoldenGate のライセンス/導入が必要です。*2 : クラウド環境用にBYOL(Bring Your Own License)でのライセンス/構築が必要です。

DBCS

【注意】ExaCS/BDCSへの接続は今後提供予定

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Network

Oracle GoldenGate

GoldenGate Cloud Service

9

GoldenGate Cloud Service アーキテクチャー抽出プロセス(Capture)

転送プロセス(DataPump)

受信プロセス(Collector)

適用プロセス(Replicat)

抽出プロセス(Capture)

転送プロセス(DataPump)

受信プロセス(Collector)

適用プロセス(Replicat)

GoldenGate Cloud ServiceDBCS DBCS

Operating System GoldenGate Cloud Service DBCS

■ DBCS - DBCS 間の場合

■ オンプレミスDB - DBCS 間の場合

Trailファイル

抽出プロセス(Capture)

転送プロセス(DataPump)

受信プロセス(Collector)

適用プロセス(Replicat)

抽出プロセス(Capture)

転送プロセス(DataPump)

受信プロセス(Collector)

適用プロセス(Replicat)

※Socks5 Proxyの設定 or VPNの導入

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 10

ルールベースの競合解決機能「Conflict Detection and Resolution (略称:CDR)」双方向同期における競合データ解決に対応

OGG

CDRによる競合解決ソース側でのキャプチャ時に、Before Image(変更前イメージ)とAfter Image(変更後イメージ)をTrailに格納し、Replicatでターゲット側に適用する際に競合を解決

Insert処理時の競合(一意制約違反)を検知Update処理時にBefore Imageとの違いを検知Update処理時に対象が存在しないことを検知Delete処理時にBefore Imageとの違いを検知Delete処理時に対象が存在しないことを検知

両方で同じ行/列のデータを更新する場合、データ連携時に競合が発生してしまう。

更新処理競合の例

CDRでの解決

事前にルールを設定しておくことで、上書きやスキップ等の処理を自動化可能

Before Image

After ImageReplicat ターゲット

データ

ルール

OVERWRITE(上書き)IGNORE(スキップ)DISCARD(スキップ)USEMAX[EQ](値比較)USEMIN[EQ] (値比較)

検知ルール 解決ルール

1)検知と解決のルールを組み合わせて定義設定

2)Trailデータの取り込み 3)ターゲットデータの状態確認

4)競合検知後のルール確認5)ルールに基づいた適用

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Web公開しているGoldenGate技術情報• ここにまとめています

– http://www.oracle.com/technetwork/jp/middleware/goldengate/learnmore/index.html– 「Oracle GoldenGate お役立ち情報」で検索

• 例えばこんな情報– アーキテクチャと基本機能

• http://www.slideshare.net/oracle4engineer/oracle-goldengate-55184702– 導入するときのポイント・注意事項

• http://www.slideshare.net/oracle4engineer/oracle-goldengate-55184702– 障害発生時にサポートサービスに提供すべき情報の取得方法

• http://www.slideshare.net/oracle4engineer/oracle-goldengate-55184799– オラクルコンサル直伝のノウハウ

• https://blogs.oracle.com/oracle4engineer/entry/material_goldengate_ocs• http://www.slideshare.net/oracle4engineer/goldengate4oracle-goldengate2016511

11

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

本日の内容

GoldenGate 概要(おさらい)

データ活用のためのTips

その他Tips

1

2

3

12

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

GoldenGate の柔軟性• 異機種間のレプリケーション

– 旧バージョンのOracle DBから 12c にデータ移行– 商用UNIXのデータをLinuxに切り出す

• 異なる表間のレプリケーション– 表名が異なる– 列構成が異なる– (変換処理により)データが異なる

13

本日掘り下げる部分

移行・クエリーオフロードで実績豊富

参考マニュアルhttp://docs.oracle.com/cd/E74358_01/gg-winux/GWUAD/wu_datainteg.htm GoldenGate

• GoldenGateが使いやすい形でデータを供給

• 開発・データ加工のコストを削減

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• やりたいこと– 複数DBの表データを統合して参照

可能にする

14

複数のDBの表データを統合

Tokyo_DB

Osaka_DB

Consolidated_DB

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• 導入方法– 2つのレプリケーションを構成

• Tokyo to Consolidated• Osaka to Consolidated

– 2つのReplicatは同一のターゲット表に対してそのままデータ伝搬する• キー列値が重複しない前提

15

パターン1:そのまま統合

Key Col1 Col2

Tokyo_DB

Osaka_DB

Consolidated_DB

Capture

Trail

Pump

Trail

Replicat

Capture

Trail

Pump

Trail

Replicat

Key Col1 Col2

Key Col1 Col2

101 AA1 Cool102 AA2 Hot

203 BB3 Hot

101 AA1 Cool

102 AA2 Hot203 BB3 Hot

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

設定パラメータ

16

extract ext1auserid ggs, password ggsexttrail ./dirdat/1atable test.t_tab1;

extract ext1buserid ggs, password ggsexttrail ./dirdat/1btable test.o_tab1;

Tokyo側 Capture

Osaka側 Capture

extract pump1armthost <XX>, mgrport <XX>passthrurmttrail ./dirdat/1atable test.t_tab1;

extract pump1brmthost <XX>, mgrport <XX> passthrurmttrail ./dirdat/1btable test.o_tab1;

Tokyo側 Pump

Osaka側 Pump

replicat rep1auserid ggs, password ggsmap test.t_tab1, target test.c_tab_01;

replicat rep1buserid ggs, password ggsmap test.o_tab1, target test.c_tab_01;

Tokyo側 Replicat

Osaka側 Replicat

※ データ連携に必要な最低限のパラメータを記載

伝搬対象のテーブルを指定

ソース/ターゲットのマッピングを記載(test.o_tab1 としてキャプチャしたデータをtest.c_tab_01 に伝搬)

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• 実現したいこと– ターゲット表からデータの生成元を

確認できる– キー列値が重複しても制約違反にならない

• 導入方法– 2つのレプリケーションを構成

• Tokyo to Consolidated• Osaka to Consolidated

– Replicatパラメータに列マッピングを記述し、Loc列に固定値を挿入する

17

パターン2:ターゲット表に列を追加

Consolidated_DB

Capture

Trail

Pump

Trail

Replicat

Capture

Trail

Pump

Trail

Replicat

Loc Key Col1 Col2

Key Col1 Col2

Tokyo_DB

Osaka_DB

Key Col1 Col2

101 AA1 Cool102 AA2 Hot

203 BB3 Hot

T 101 AA1 Cool

T 102 AA2 HotO 203 BB3 Hot

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

設定パラメータ

18

extract ext2auserid ggs, password ggsexttrail ./dirdat/2atable test.t_tab1;

extract ext2buserid ggs, password ggsexttrail ./dirdat/2btable test.o_tab1;

Tokyo側 Capture

Osaka側 Capture

extract pump2armthost <XX>, mgrport <XX>passthrurmttrail ./dirdat/2atable test.t_tab1;

extract pump2brmthost <XX>, mgrport <XX> passthrurmttrail ./dirdat/2btable test.o_tab1;

Tokyo側 Pump

Osaka側 Pump

※ データ連携に必要な最低限のパラメータを記載

replicat rep2auserid ggs, password ggsmap test.t_tab1, target test.c_tab_02,colmap ( usedefaults,LOC = 'T' );

replicat rep2buserid ggs, password ggsmap test.t_tab1, target test.c_tab_02,colmap ( usedefaults,LOC = ‘O' );

Tokyo側 Replicat

Osaka側 Replicat

Colmap句でソースとターゲットの列の関連を記載。Usedefaultは同一の列をそのままマッピングする指定。LOC列には定数の’O’をマッピング

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• GoldenGate 12.1以前– ソースDBから定義ファイルを抽出し、Replicat

がsourcedefsパラメータで読み込む必要がある• “同一の構成”と判断される条件

– 同一DB(Oracle と Oracle など)– 同一キャラクタ・セットとロケール– 列数・列名・データ型・列長が同一– 列長さセマンティクス(バイトか文字か)が同じ– すべての列が同じ順序で定義されている

• GoldenGate 12.2– Trail ファイルに定義情報が自動的に格納される

ため、定義ファイルの作成は不要

19

参考:構成の異なる(同一ではない)表間のレプリケーション

Capture

Trail

Pump

Trail

Replicat

defgen Metadata

Capture

Trail

Pump

Trail

Replicat

Metadata Metadata

GoldenGate 12.1 まで:定義ファイルを作れば、後はGoldenGateがデータマッピングしてくれる。

GoldenGate 12.2では、定義ファイルの扱いも不要に!

※ 本資料のサンプルは GoldenGate 12.2を想定

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• 実現したいこと– データ統合に合わせて新しいコード体系を

導入– キー列値が重複しても制約違反にならない

• 導入方法– 2つのレプリケーションを構成

• Tokyo to Consolidated• Osaka to Consolidated

– ターゲットDBにコード変換用のルックアップ表を作成

– Replicatにルックアップ表を使用した変換処理を記載

20

パターン3:コード体系の変更

Consolidated_DB

Capture

Trail

Pump

Trail

Replicat

Capture

Trail

Pump

Trail

Replicat

C_K Key Col1 Col2Lookup

Key Col1 Col2

Tokyo_DB

Osaka_DB

Key Col1 Col2

101 AA1 Cool102 AA2 Hot

203 BB3 Hot

C_K KeyT01 101O03 203T02 102

T01 101 AA1 Cool

T02 102 AA2 HotO03 203 BB3 Hot

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

設定パラメータ

21

extract ext3auserid ggs, password ggsexttrail ./dirdat/3atable test.t_tab1;

extract ext3buserid ggs, password ggsexttrail ./dirdat/3btable test.o_tab1;

Tokyo側 Capture

Osaka側 Capture

extract pump3armthost <XX>, mgrport <XX>passthrurmttrail ./dirdat/3atable test.t_tab1;

extract pump3brmthost <XX>, mgrport <XX> passthrurmttrail ./dirdat/3btable test.o_tab1;

Tokyo側 Pump

Osaka側 Pump

※ データ連携に必要な最低限のパラメータを記載

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

設定パラメータ -cont

22

※ データ連携に必要な最低限のパラメータを記載

replicat rep3auserid ggs, password ggsmap test.t_tab1, target test.c_tab_03,SQLEXEC (ID LOOKUP,QUERY "SELECT C_K FROM TEST.LOOKUP WHERE KEY = :CODE_IN_PARAM“, PARAMS (CODE_IN_PARAM = KEY )), colmap (usedefaults,C_K = @GETVAL(LOOKUP.C_K) );

replicat rep3buserid ggs, password ggsmap test.t_tab1, target test.c_tab_03,SQLEXEC (ID LOOKUP,QUERY "SELECT C_K FROM TEST.LOOKUP WHERE KEY = :CODE_IN_PARAM“, PARAMS (CODE_IN_PARAM = KEY )), colmap (usedefaults,C_K = @GETVAL(LOOKUP.C_K) );

Tokyo側 Replicat Osaka側 Replicat

SQLEXEC句でReplicatが実行するSQLについて記載QUERY:実行するSQL文PARAMS:SQL内の変数に埋め込むソース表の列値 Colmap句でLookup表から取得した値をC_K列に

マッピングしている

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• 実現したいこと– ソースDBでの処理確定時間を伝搬– ターゲット側で時間軸での絞り込みが可能

• 例:2016年第1四半期のデータから集計

• 導入方法– 2つのレプリケーションを構成

• Tokyo to Consolidated• Osaka to Consolidated

– Replicatパラメータに列マッピングを記載し、commit timestamp情報を Time列にマップする

23

パターン4:処理時間情報を付与

Consolidated_DB

Capture

Trail

Pump

Trail

Replicat

Capture

Trail

Pump

Trail

Replicat

Key Col1 Col2 Time

Key Col1 Col2

Tokyo_DB

Osaka_DB

Key Col1 Col2

101 AA1 Cool102 AA2 Hot

203 BB3 Hot

101 AA1 Cool Ts

102 AA2 Hot Ts203 BB3 Hot Ts

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

設定パラメータ

24

extract ext4auserid ggs, password ggsexttrail ./dirdat/2atable test.t_tab1;

extract ext4buserid ggs, password ggsexttrail ./dirdat/2btable test.o_tab1;

Tokyo側 Capture

Osaka側 Capture

extract pump4armthost <XX>, mgrport <XX>passthrurmttrail ./dirdat/4atable test.t_tab1;

extract pump4brmthost <XX>, mgrport <XX> passthrurmttrail ./dirdat/4btable test.o_tab1;

Tokyo側 Pump

Osaka側 Pump

※ データ連携に必要な最低限のパラメータを記載

replicat rep4auserid ggs, password ggsmap test.t_tab1, target test.c_tab_04,colmap (usedefaults,TIME = @GETENV ('GGHEADER', 'COMMITTIMESTAMP') );

replicat rep4buserid ggs, password ggsmap test.t_tab1, target test.c_tab_04,colmap (usedefaults,TIME = @GETENV ('GGHEADER', 'COMMITTIMESTAMP') );

Tokyo側 Replicat

Osaka側 Replicat

GETENV関数でTrailファイルに格納されたcommit timestamp取得し、TIME列にマップ

Trailファイルには表データ以外に関連する様々な属性(scn,commit時間, 処理の種類など)が格納される

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

参考:タイムゾーンを調整• ソースDBが海外にあり、時刻列に Timestamp with Timezoneを使っていない場合など

25

..map test.t_tab1, target test.c_tab_04,colmap ( usedefaults,time = @DATE ('YYYY-MM-DD HH:MI:SS', 'JTS', @COMPUTE(@DATE ('JTS', 'YYYY-MM-DD HH:MI:SS', source_col) + 18000000000 )));

(1) DATE関数でース表の時刻列をJTS(ユリウスタイムスタンプ)に変換

Trailファイル内の timestampを時差調整する場合

(3) DATE関数で(2)の結果をフォーマット変換し、ターゲット表のtime列にマップ

time = @DATE ('YYYY-MM-DD HH:MI:SS', 'JTS', @COMPUTE(@DATE ('JTS', 'YYYY-MM-DD HH:MI:SS', @GETENV ('GGHEADER', 'COMMITTIMESTAMP') ) +

18000000000 ))

(2) COMPUTE関数で(1)に対する加算(or 減算)で時差を調整

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

テスト・開発用データは機密情報をマスクしたい

26

ID Name Address Card No

Capture

TrailPumpTrail

Replicat

ID Name Address Card No

業務APCard No参照可

テスト・開発Card No参照不可

機密情報をテスト・サーバーに送信しないよう、ローカルTrailファイル書き込み時点でマスク

101 Taro Tokyo… 123-123102 Jiro Osaka… 123-456103 Goro Nagoya… 123-789

101 Taro Tokyo… XXX-XXX102 Jiro Osaka… XXX-XXX103 Goro Nagoya… XXX-XXX

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

設定パラメータ

27

extract ext5auserid ggs, password ggsexttrail ./dirdat/5atable test.cust target test.cust_test,colmap ( usedefaults,card_no = 'XXX-XXX' );

Captureextract pump5armthost <XX>, mgrport <XX>passthrurmttrail ./dirdat/5atable test.cust_test;

Pump

※ データ連携に必要な最低限のパラメータを記載

replicat rep5auserid ggs, password ggsmap test.cust, target test.cust_test;

Replicat

※本ケースでのマスキングは値を置き換えるだけの簡易的なものですカーディナリティの考慮等、より汎用的なマスキングが必要な場合はOracle Data Masking and Subsetting をご使用ください

Card_no列に定数’XXX-XXX’をマップしてTrailファイルに格納、以降のプロセスはCard_no列の元と値を確認できない

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

データを貯める

28

パターン1:削除処理を伝搬しない設定

Order No Cust Prod Date

… … … …

① 新規オーダー追加② 2015年の注文情報を削除

Capture

TrailPumpTrail Replicat

①新規オーダー、②過去の注文情報も参照可能

Order No Cust Prod Date00024 CustA Prod Y 2015-XX-XX00025 CustB Prod Z 2015-XX-XX00032 Cust Prod R 2015-XX-XX

… … … …

レプリケーション対象表へのDELETEを伝搬

しない設定

Insertによる新規レコード追加がメインのテーブルのデータ蓄積に有効

(注文表など)

00024 CustA Prod Y 2015-XX-XX00025 CustB Prod Z 2015-XX-XX00032 Cust Prod R 2015-XX-XX

00112 Cust D Prod Z 2016-XX-XX 00112 Cust D Prod Z 2016-XX-XX

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

設定パラメータ

29

extract ext6auserid ggs, password ggsexttrail ./dirdat/6aignoredeletestable test.orders;

Captureextract pump6armthost <XX>, mgrport <XX>passthrurmttrail ./dirdat/6atable test.orders;

Pump

※ データ連携に必要な最低限のパラメータを記載

replicat rep6auserid ggs, password ggsmap test.orders, target test.orders_hist;

Replicat

Delete文により処理はTrailファイルに格納しない

※過去データをdrop partition/truncate partition等で削除している場合は、ソース表へのDDLレプリケーション(ALTER TABLE)を対象外にする

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

データを貯める

30

パターン2:処理履歴を蓄積ID Balance Grade

ID Balance Grade123 400 Gold345 50 Silver678 210 Gold

③ID=123列を削除②ID=345列を更新

①ID=981列を追加

ID Bal Grade Timestamp Op

Capture

Trail

Pump

Trail

Replicat

Updateによるデータ更新がメインとなるテーブルのデータ蓄積に有効(口座、契約、在庫、その他マスタ表など)監査ログとしても活用可能

981 0 Black

450 Gold

123 400 Gold 2014-10-07 19:17:32 I345 50 Silver 2014-10-07 19:21:00 I678 210 Gold 2014-10-07 19:25:32 I981 0 Black 2014-10-08 1:30:19 I345 450 Gold 2014-10-08 1:33:05 U123 400 Gold 2014-10-08 1:36:57 D

123 400 Gold345 50 Silver678 210 Gold

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

設定パラメータ

31

extract ext7auserid ggs, password ggsexttrail ./dirdat/7atable test.credit;

Captureextract pump7armthost <XX>, mgrport <XX>passthrurmttrail ./dirdat/7atable test.orders;

Pump

※ データ連携に必要な最低限のパラメータを記載

replicat rep7auserid ggs, password ggsinsertallrecordsmap test.credit, target test.credit_hist,colmap ( usedefaulsts,timestamp = @GETENV ('GGHEADER', 'COMMITTIMESTAMP‘)operation = @GETENV ('GGHEADER', 'OPTYPE') ) ;

Replicat

ソース表は全列サプリメンタルロギング対象する必要がある

全ての処理レコードをINSERTでターゲット表に反映する

Timestamp列にTrailファイルに格納されたcommit timestamp値をマップOperation列にTrailファイルに格納された処理の種類(Insert/Update/Delete)をマップ

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

データを貯める

32

処理履歴を蓄積しつつ、データ同期もする

Trail

Replicat

•同じトランザクション情報を格納したTrailファイルから2表にデータ適用。

•1つは、処理履歴を蓄積•1つは、レプリカ

ID Balance Grade

Capture Pump

Trail

ID Bal Grade Timestamp Op123 400 Gold 2014-10-07 19:17:32 I345 50 Silver 2014-10-07 19:21:00 I678 210 Gold 2014-10-07 19:25:32 I981 0 Black 2014-10-08 1:30:19 I345 450 Gold 2014-10-08 1:33:05 U123 400 Gold 2014-10-08 1:36:57 D

123 400 Gold345 50 Silver678 210 Gold981 0 Black

450 GoldID Balance Grade123 400 Gold345 50 Silver678 210 Gold981 0 Black

450 Gold

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

設定パラメータ

33

extract ext8auserid ggs, password ggsexttrail ./dirdat/8atable test.credit;

Captureextract pump8armthost <XX>, mgrport <XX>passthrurmttrail ./dirdat/8atable test.orders;

Pump

※ データ連携に必要な最低限のパラメータを記載

replicat rep8auserid ggs, password ggsinsertallrecordsmap test.credit, target test.credit_hist,colmap ( usedefaulsts,timestamp = @GETENV ('GGHEADER', 'COMMITTIMESTAMP‘)operation = @GETENV ('GGHEADER', 'OPTYPE') ) ;map test.credit, target test.credit;

Replicat

データ同期用のMAPを一つ追加するだけ

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

データ蓄積に適した基盤にも対応

34

Oracle GoldenGate for Big Data = Hadoop用データ投入モジュール

①トランザクション抽出

②転送

③適用

③適用(処理履歴)

抽出・転送まではRDB to RDBと全く同じ仕組み

Trail

Replicat

Capture Pump

Trail

RDB

RDB

HadoopReplicat

ここだけGoldenGate for Big Data

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

設定パラメータ

35

※ データ連携に必要な最低限のパラメータを記載

REPLICAT rep_bdTARGETDB LIBFILE ./libggjava.so SET property= ./dirprm/hive.propsDDL INCLUDE ALL MAP test.credit, TARGET demo.credit_hist;

Replicat

ターゲット環境に会わせてプロパティファイルを指定

Hadoopに対するDDL伝搬も可能

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

参考:HDFS Handler(For Hive)の例

36

gg.handlerlist=hivegg.handler. hive.type=hdfsgg.handler.hive.mode=txgg.handler.hive.includeTokens=falsegg.handler.hive.maxFileSize=1g gg.handler.hive.rootFilePath=/ogg 21/txtgg.handler.hive.fileRollInterval=0 gg.handler.hive.inactivityRollInterval=0gg.handler.hive.fileSuffix=.txt gg.handler.hive.partitionByTable=true gg.handler.hive.rollOnMetadataChange=true gg.handler.hive.authType=none gg.handler.hive.format=delimitedtextgg.handler.hdfs.format.encoding=UTF-8gg.handler.hdfs.format.fieldDelimiter=|

goldengate.userexit.timestamp=utcgoldengate.userexit.writers=javawriterjavawriter.stats.display=TRUEjavawriter.stats.full=TRUEgg.log=log4jgg.log.level=INFOgg.report.time=30secgg.checkpoint=java

gg.classpath=/etc/hadoop:/etc/hadoop/conf:/usr/lib/hadoop/client/*:/usr/lib/hadoop/*:/usr/lib/hadoop/lib/*:/usr/lib/hadoop-hdfs/*:/usr/lib/hadoop-hdfs/lib/*:/etc/hadoop/conf/core-site.xml:/etc/hadoop/conf/hdfs-site.xml:./ggjava/*:./ggjava/resources/lib/*javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar※ 製品同梱のテンプレートを編集して作成

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

GoldenGate for Big Data

37

様々なテクノロジに対応• ターゲット・テクノロジ

– HDFS– Hive– HBASE– Flume– Kafka– MongoDB(*)– Elastic Search(*)

* 2016/10/27時点 java.netでの公開モジュールのみ(サポートサービス提供なし)

• データフォーマット– JSON– AVRO– XML– デリミタ区切り

Big Data Lite – GoldenGate for Big Dataを含むOracle DB / Hadoop環境のVM環境を無償で公開しています。http://www.oracle.com/technetwork/database/bigdata-appliance/oracle-bigdatalite-2104726.html(「Oracle Big Data Lite」で検索)

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

GoldenGate for Big Data

38

Hive Table に蓄積した処理履歴から最新状態のみを表示

ID Bal Grade Timestamp Op123 400 Gold 2014-10-07 19:17:32 I345 50 Silver 2014-10-07 19:21:00 I678 210 Gold 2014-06-08 19:17:32 I981 0 Black 2014-10-08 1:30:19 I345 450 Gold 2014-10-08 1:33:05 U123 400 Gold 2014-10-08 1:36:57 D

Replicat

GoldenGate for Big Data

Hive TableCREATE VIEW credit_latest

ASSELECT t1.*FROM credit t1

JOIN (SELECT id,Max(timestamp) max_modified

FROM creditGROUP BY id) s

ON t1.id = s.idAND t1.timestamp = s.max_modified

WHERE t1.op_type != ‘D';

Trail

Hive View作成 IDごとの最新レコードを抽出

削除されたレコードは除外

ID Balance Grade345 450 Gold678 210 Gold981 0 Black

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

本日の内容

GoldenGate 概要(おさらい)

データ活用のためのTips

その他Tips

1

2

3

39

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• DBに発生したイベントに応じて、GoldenGateプロセスが任意の処理を起動

• イベントとは「特定の表に特定のデータが入る」など、GoldenGateのパラメータ内で指定可能なもの– Flag更新のイメージ– Capture/Pump/Replicat

で設定可能

• ユースケース– 日時処理のShellをキック– Replicatの停止

• ターゲットを静止断面にする– SQL実行

• Event表に挿入されたSQL文をそのまま実行することが可能

• INSSERT SELECT等を高速に伝播できる– Mviewのリフレッシュを実行

• 参考マニュアル– http://docs.oracle.com/cd/E74358_01/gg-

winux/GWUAD/wu_customcode.htm#i1047744– http://docs.oracle.com/cd/E74358_01/gg-

winux/GWURF/gg_parameters168.htm#i2016744

40

イベント・マーカー

Capture

Trail

Pump

Trail

Replicat

Event表にデータ追加

Event表のデータを認識したら、

ジョブを起動

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• やりたいこと– ソース側は処理A、処理Bを順に実行– ターゲット側は処理Aの伝搬が完了したら、

バッチ処理を流し、その後処理Bを伝搬• 処理A終了時の静止断面で日次処理の実行が必要

等の要件を想定

• 実現方法– ソース側で処理AとBの間にイベントテー

ブルを更新処理を入れる– Replicatを2つ構成

• レプリケーション用とバッチ処理起動用

41

イベント・マーカー活用例

Capture

Trail

Pump

Trail

Replicat1

(1)処理A(2)イベント更新

(3)処理B

•処理Aの伝搬•イベント更新のレコードを受け取ったら停止•再起動後 処理Bを伝搬

Replicat2

•イベント更新レコードを受け取ったらシェル実行•シェルの中でバッチ処理を実行•バッチ処理完了後にReplicat2を起動

• 処理Aを伝搬• イベント更新を伝搬• 処理Bを伝搬

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

設定パラメータ

42

extract ext9auserid ggs, password ggsexttrail ./dirdat/9atable test.*;table ggs.event;

Capture

extract pump9armthost <XX>, mgrport <XX>passthrurmttrail ./dirdat/9atable test.*;table ggs.event;

Pump

replicat rep9auserid ggs, password ggsmap test.*, target test.*;insertallrecordsmap ggs.event, target ggs.event,where (flag = ‘STOP’), EVENTACTIONS (STOP);

replicat rep9buserid ggs, password ggsmap ggs.event, target ggs.event,where (flag = ‘STOP’), EVENTACTIONS (SHELL “./batch.sh” );

Replicat1

Replicat2

※ データ連携に必要な最低限のパラメータを記載

イベントテーブルにSTOPフラグを受け取ったらバッチシェルを実行

イベントテーブルにSTOPフラグを受け取ったらReplicat停止

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

バッチシェルのサンプル

43

#!/bin/sh#変数の設定OGG_HOME=<GoldenGateインストールディレクトリ>INTERVAL=<Replicat停止確認の間隔>REP_MONITOR=<バッチ実行用Replicatの名前>REP_NAME=<レプリケーション用Replicatの名前>

# ABENDしているReplicatがいる場合は、ログを出力して処理終了echo "info all"|$OGG_HOME/ggsci|grep REPLICAT|grep -v $REP_MONITOR|awk '{print $2}'>rep_temp.outgrep -q "ABENDED" rep_temp.outif [ "$?" == 0 ]; thenecho "SUSPENDING BATCH RUN AS ONE OR MORE REPLICATS ARE IN ABENDED STATE">rep_status.outexit 1

# バッチ実行用Replicat以外のReplicatがすべて終了していることを確認elser_counter=`echo "info all"|$OGG_HOME/ggsci|grep "RUNNING"|grep "REPLICAT"|grep -v $REP_MONITOR|awk '{print $2}'|wc -l`

while [ "$r_counter" != 0 ]; dosleep $INTERVALr_counter=`echo "info all"|$OGG_HOME/ggsci|grep "RUNNING"|grep "REPLICAT"|grep -v $REP_MONITOR|awk '{print $2}'|wc -l`

# 再度ABENDしているReplicatがいるかを確認echo "info all"|$OGG_HOME/ggsci|grep REPLICAT|grep -v $REP_MONITOR|awk '{print $2}'>rep_temp.outgrep -q "ABENDED" rep_temp.outif [ "$?" == 0 ]; thenrep_state=1breakfidone

# バッチ処理を実行if [ "$rep_state" != 1 ]; thenecho "RUNNING BATCH JOB...." >> rep_temp.out################### ここにバッチ処理を記述。本サンプルはダミーecho "BATCH processing completed !!!" > result.out

# バッチ完了後、レプリケーション用のReplicatを再度起動echo "start $REP_NAME"|$OGG_HOME/ggsci###################

exit 0elseecho "SUSPENDING BATCH RUN AS ONE OR MORE REPLICATS ARE IN ABENDED STATE" >rep_status.outexit 1fi

fi

※サンプルはサポート外です。環境に合わせて適宜編集ください

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

• やりたいこと– ソース側は処理A、処理Bを順に実行– ターゲット側は処理Aの伝搬し、処理Bは

ターゲット側で実行する• 処理Bはラージトランザクションなどを想定

• 実現方法– ソース側で処理Bの前後にイベントテーブ

ルを更新処理を入れる– Replicatを2つ構成

• レプリケーション用とバッチ処理起動用– My Oracle Supportにサンプルを掲載

• Oracle GoldenGate Best Practices: Dual Apply for GoldenGate (ドキュメントID 1451675.1)

44

イベント・マーカー活用例 – dual apply -

Capture

Trail

Pump

Trail

Replicat1

(1)処理A(2)イベント更新

(3)処理B(4)イベント更新

•処理A伝搬•イベント更新のレコードを受け取ったら停止•Replicat2より起動される

Replicat2

•イベント更新のレコードを受け取ったらシェル実行•シェルの中でバッチ処理を実行•シェル完了後、イベント更新のレコードを受け取ったらReplicat1を起動

• 処理Aを伝搬• イベント更新を伝搬• 処理Bは伝搬しない• イベント更新を伝搬

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

GoldenGate 12.1.2.1以降の Globalization機能• Column Level Character Set Support

– 列レベルで異なるキャラクタセットを認識してデータ変換・レプリケーションを実施可能

– ReplicatのMAPパラメータのオプション• CHARSET : 表レベル、COLCHARSET : 列レベル

• Character Mapping Override– キャラクタセット間のマッピングを上書き

• マップ先が無い文字に代替のマップ先を設定• 標準では未対応のマッピングを編集• Unicodeで複数のコードポイントを持つ文字のマッ

ピングを編集• 機種依存文字、ユーザー定義文字などを任意にマッ

ピング

45

Source database: WE8ISO8859P1Table1: JA16EUCTable2, Col1: WE8MSWIN1252Table2, Col2: UTF8

Target database: AL32UTF8例:

全てAL32UTF8に変換

MAP SOURCE.Table1, TARGET TARGET.Table1, CHARSET( JA16EUC );MAP SOURCE.Table2, TARGET TARGET.Table2,

COLCHARSET( Col1, WE8MSWIN1252 ),COLCHARSET( Col2, UTF8 );

ReplicatのパラメータSOURCECHARSET al32utf8TARGETCHARSET ja16euc¥xef¥xbd¥x9e ¥xa1¥xc1 -- 1 to 1 mapping¥x61 - ¥x7a ¥x41 - ¥x5a -- range mapping¥x80 - ¥xff ¥x20 -- range to 1 mapping

マップファイル

Replicat のパラメータCHARMAP ./dirprm/eucjp.map

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

Appendix

46

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

柔軟なレプリケーションで可用性の課題にも対応

47

業務AP(現)

Load Balancer

参照処理

GoldenGate

業務AP(現)

Load BalancerAPアップデート(テーブル変更等)・動作確認

GoldenGate

業務AP(現)

Load Balancer

業務AP(新)

Load Balancer

業務AP(新)

(テーブル変更後)参照処理

GoldenGate

1. 通常稼働時 2. AP改修

3. 切り替え 4. 逆同期※任意で再度切り替えを実施可能※切り替え作業中のみ

サービス停止

※開発・検証環境での作業後、本番データを使用した動作確認が可能

2,4 で異なる表構成間、データ変換を伴うレプリケーション

が発生

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

定期的に実施されるシステムメンテナンスでサービス停止を極小化したい

48

業務開始ポイント

AS-I

STo

Be

事前作業 事後作業

通常の業務サービス

AP プロビジョニングと改修

業務停止ポイント

新サービス開始

AP 改修(ローリングのため性能縮退) DB 構成変更データパッチ

結合テスト(AP/DB)

DBのリストアAP リリース

A面B面

DB 構成変更データパッチ

結合テスト(AP/DB)

DBリストア

切り戻し対策

デー

タ静

止断

LB 切替とラグ解消時間のみ

十数時間に及び、工数も増大サービス停止の極小化を実現

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |

SQL文

49

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 50

-- ソース表(TOKYO_DB) CREATE TABLE T_TAB1 (KEY NUMBER NOT NULL

, COL1 VARCHAR2(20) , COL2 VARCHAR2(20) , CONSTRAINT T_TAB1_PK PRIMARY KEY ( KEY ) ENABLE );

-- ソース表(OSAKA_DB)CREATE TABLE O_TAB1 (KEY NUMBER NOT NULL

, COL1 VARCHAR2(20) , COL2 VARCHAR2(20) , CONSTRAINT O_TAB1_PK PRIMARY KEY ( KEY ) ENABLE );

-- ターゲット表(そのまま統合)CREATE TABLE C_TAB_01(KEY NUMBER NOT NULL

, COL1 VARCHAR2(20) , COL2 VARCHAR2(20) , CONSTRAINT C_TAB_01_PK PRIMARY KEY ( KEY ) ENABLE);

-- ソース表へのDML(そのまま統合)insert into t_tab1 values (101,'AA1','Cool');commit;insert into o_tab1 values (203,'BB3','Hot');commit;insert into t_tab1 values (102,'AA2','Hot');Commit;

-- ターゲット表で伝搬を確認(そのまま統合)SQL> select * from c_tab_01;

-- ターゲット表(ターゲット表に列を追加)CREATE TABLE C_TAB_02 (LOC VARCHAR2(20) NOT NULL

, KEY NUMBER NOT NULL , COL1 VARCHAR2(20) , COL2 VARCHAR2(20) , CONSTRAINT C_TAB_02_PK PRIMARY KEY ( LOC , KEY ) ENABLE );

-- ターゲット表で伝搬を確認(ターゲット表に列を追加)SQL> select * from c_tab_02;

-- ターゲット表(コード体系の変更)CREATE TABLE C_TAB_03(C_K VARCHAR2(20) NOT NULL

, KEY NUMBER NOT NULL , COL1 VARCHAR2(20) , COL2 VARCHAR2(20) , CONSTRAINT TABLE1_PK PRIMARY KEY ( C_K , KEY ) ENABLE );

-- ルックアップ表(コード体系の変更)CREATE TABLE LOOKUP (C_K VARCHAR2(20)

, KEY NUMBER );-- ターゲット表で伝搬を確認(コード体系の変更) SQL> select * from lookup;

-- ターゲット表(処理時間情報を付与)CREATE TABLE C_TAB_04 (KEY NUMBER NOT NULL

, COL1 VARCHAR2(20) , COL2 VARCHAR2(20) , TIME TIMESTAMP , CONSTRAINT C_TAB_04_PK PRIMARY KEY ( KEY ) ENABLE );

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 51

-- ソース表(機密情報をマスク)CREATE TABLE CUST (ID NUMBER NOT NULL

, NAME VARCHAR2(20) , ADDRESS VARCHAR2(20) , CARD_NO VARCHAR2(20) , CONSTRAINT CUST_PK PRIMARY KEY ( ID ) ENABLE );

-- ターゲット表(機密情報をマスク)CREATE TABLE CUST_TEST (ID NUMBER NOT NULL

, NAME VARCHAR2(20) , ADDRESS VARCHAR2(20) , CARD_NO VARCHAR2(20) , CONSTRAINT CUST_TEST_PK PRIMARY KEY ( ID ) ENABLE );

-- ソース表へのDML (機密情報をマスク)insert into cust values (101,'Taro','Tokyo','123-123');commit;

insert into cust values (102,'Jiro','Osaka','123-456');Commit;insert into cust values (103,'Goro','Nagoya','123-789');commit;

-- ソース表(データを貯める:削除処理を伝播しない)CREATE TABLE ORDERS (ORDER_NO NUMBER NOT NULL

, CUST VARCHAR2(20) , PROD VARCHAR2(20) , DATA DATE , CONSTRAINT ORDERS_PK PRIMARY KEY ( ORDER_NO ) ENABLE );

-- ターゲット表(データを貯める:削除処理を伝播しない)CREATE TABLE ORDERS_TEST (ORDERS_NO NUMBER NOT NULL

, CUST VARCHAR2(20) , PROD VARCHAR2(20) , DATA DATE , CONSTRAINT ORDERS_TEST_PK PRIMARY KEY ( ORDERS_NO ) ENABLE );

-- ソース表(データを貯める:処理履歴を蓄積)CREATE TABLE CREDIT (ID NUMBER NOT NULL

, BALANCE VARCHAR2(20) , GRADE VARCHAR2(20) , CONSTRAINT CREDIT_PK PRIMARY KEY ( ID ) ENABLE );

-- ターゲット表(データを貯める:処理履歴を蓄積)CREATE TABLE CREDIT_HIST (ID NUMBER

, BALANCE VARCHAR2(20) , GRADE VARCHAR2(20) , TIMESTAMP TIMESTAMP , OPERATION VARCHAR2(20) );

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 52

-- ソース表へのDML(データを貯める:処理履歴を蓄積)insert into credit values (123,'400','Gold');commit;insert into credit values (345,'50','Silver');commit;insert into credit values (678,'210','Gold');commit;insert into credit values (981,'0','Black');commit;update credit set balance='450',grade='Gold' where id=345;commit;delete from credit where id=123;commit;

-- ソース表(イベントマーカー活用例)CREATE TABLE EVENT (KEY NUMBER NOT NULL

, flag VARCHAR2(20) , CONSTRAINT EVENT_PK PRIMARY KEY ( KEY ) ENABLE );

-- ターゲット表(イベントマーカー活用例)CREATE TABLE EVENT_LOG (key NUMBER NOT NULL

, flag VARCHAR2(20) );

-- ターゲット表(イベントマーカー活用例)CREATE TABLE EVENT_TARG(key NUMBER NOT NULL

, flag VARCHAR2(20) );

-- イベント表更新insert into event values (1,'Dummy');commit;update event set flag='STOP';commit;update event set flag='START';commit;

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 53

Oracle Database 12c 対応研修コースのご案内

Oracle Database 12c: SQL 基礎 I (3日間)

Oracle Database 12c: 管理ワークショップ

(5日間)

Oracle Database 12c: SQL チューニングワークショップ

(3日間)

Oracle Database 12c: PL/SQL プログラム

開発 (3日間)

Oracle Database 12c: インストール&アップグレード

(2日間)

Oracle Database 12c: バックアップ・

リカバリ(5日間)

Oracle Database 12c: 新機能(5日間)

Oracle Database 12c: セキュリティ

(5日間)

Oracle Database 12c:Clusterware 管理

(4日間)

Oracle Database 12c:RAC 管理(4日間)

Oracle Database 12c: PL/SQL 基礎

(2日間)

データベース設計(3日間)

Oracle Database 12c: パフォーマンス・

チューニング(5日間)

Bronze

Silver

Platinum

Gold

Oracle Database 12c: SQL 基礎 II

(2日間)

Oracle Database 11g: データ・マイニング

手法(2 日間)

Oracle Database 12c: Database Vault

(2日間)

Oracle ではじめる統計入門(1 日間)

Oracle R Enterprise エッセンシャルズ

(2 日間)

※ Oracle Database 12cR2 対応研修は順次提供予定です。詳しくはオラクルユニバーシティまでお問い合わせください。

Oracle Database 12c: マルチテナント・アーキテクチャ

(2日間)

Oracle Database 12c: ASM 管理(2日間)

Oracle Database 12c: 管理クイック・

スタート(2日間)

Oracle Database 12c: 管理ネクスト・

ステップ(3日間)

Adva

nced

Ana

lytic

s O

ptio

n 対

応コ

ース

基礎から上級スキルまで。Oracle Database 12c の製品機能を学習できる多彩な研修コースでスキルアップを

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 54

Oracle Digitalは、オラクル製品の導入をご検討いただく際の総合窓口。電話とインターネットによるダイレクトなコニュニケーションで、どんなお問い合わせにもすばやく対応します。

もちろん、無償。どんなことでも、ご相談ください。

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 55

Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 56