GoldenGate布教活動①　～GoldenGateの基本のキ～

このエントリは <a href="https://qiita.com/ch0c0bana0/items/0567de420c2a40128e94">Oracle Database or GoldenGate Advent Calendar 2018 Day 4</a> の記事です！

JPOUGのOracle Database or GoldenGate Advent Calendar 2018 4日目担当 ch0c0bana0です

気づけば担当の日になっていました

朝起きてふとJPOUGってなんや、と思いましたけどJaPan Oracle User Groupの略かなんかですかね？

昨日はitedgeblogさんの『<a href="http://itedge.stars.ne.jp/tips_my-oracle-support/">[Oracle] My Oracle Supportのナレッジ記事がWeb検索可能になった話</a>』でした

My Oracle SupportがWebから検索なるようになったのめっちゃ便利ですよねー

みんなでバシバシ検索してMOSのDocumentが検索上位に来るようになったらさらに便利になるかも

さて、本エントリではGoldenGateユーザーを増やすため、基本的なところから解説していきたいとおもいます
ちなみにQiita内を『GoldenGate』で検索したら17件しかヒットしませんでした
このAdvent Calendar期間中に30件くらいになればいいなあ

では本題

##本エントリの前置き
１．GoldenGate超初心者向けの記事を意識して書いています
２．なるべく責任を持って書きますが、この発言は個人の見解であり、所属する組織の公式見解ではありません
３．指摘事項があればどんどんおよせください
４．個人ブログで書いても良かったのですが、なるべく人目について方が布教活動になると思ってQiitaにしました

#GoldenGate布教活動① ～GoldenGateの基本のキ～

『<a href="https://docs.oracle.com/cd/E92689_01/gg-winux/GGCON/introduction-oracle-goldengate.htm#GUID-EF513E68-4237-4CB3-98B3-2E203A68CBD4">Oracle® Fusion Middleware Oracle GoldenGateの理解 12c (12.3.0.1)</a>』を参照しながらOracle GoldenGateとはなにか、GoldenGateを使用する上での基本のキについて軽く記載したいと思います

##GoldenGateとは
GoldenGateとはデータベース間でのデータを移行する場合に使用するデータレプリケーション製品です
Oracle Database間のデータレプリケーションだけではなく、異種データベース間でのデータレプリケーションも行うことができます
また最近ではGoldenGate for Bigdataと組み合わせることで、MongoDBやKafkaといったBigDataで使用されるようなターゲットにもデータをレプリケーションすることが可能になっています

##なぜGoldenGateを使うか
例えば異種データベースが混在するシステムにおいて運用コスト低減のためDatabaseをOracleに統一する場合や、新しいバージョンのOracle Database構築のためにデータ移行が必要な場合があります
このような場合にGoldenGateを使用することで、データ移行に伴うシステムの停止時間を極小化が可能になり、移行データの変換やフィルタリングを効率的に行うことができます
また近年ではオンプレミス環境からクラウド環境への移行や、ビックデータ活用のためのデータ集約に使用されるなど、データレプリケーション製品としてかなり幅広く活用されるようになってきました

##GoldenGateのキーワードと主なプロセス
####ソースデータベース
移行元のデータベース
OracleだったりOracleじゃなかったり

####ターゲットデータベース
移行先のデータベース
こちらもOracleだったりOracleじゃなかったり
最近ではKafkaとかMongoの場合も

####GGSCI
GoldenGate独自のコマンドラインインターフェイス
GoldenGate Homeのggsciコマンドを実行することで起動可能
ここからプロセスの起動停止を行ったり、各プロセスのパラメータファイルを編集したりする

####Trail（証跡）ファイル
ソースから読み取ったDMLとかDDLの内容が記載されているGoldenGate独自のファイル
ソースデータベースから作成したこのファイルを、移行元と移行先でやり取りしてDMLやDDLをターゲットデータベースに適用する

####Managerプロセス
GoldenGateの親玉（？）プロセス
GGSCIを使う場合や、GoldenGateが作成する諸々のファイルをメンテナンスする役割などを担う
また後述のGoldenGateの中核処理を担うプロセスを管理・監視する

####Captureプロセス
ソースデータベースからDMLやDDLを読み取って、Trail（証跡）ファイルという独自のファイルに書き出すプロセス
Integrated（統合）モードとClassic（非統合）モードがある
データのフィルタリングやマッピングデータ変換ができるし、Trailファイルの暗号化とかもできる
専用のパラメータファイルが必要になる

####Datapumpプロセス
Captureプロセスが出力したTrailファイルをターゲットのサーバーに転送するプロセス
Trailファイル内のデータをフィルタリングやマッピング、データ変換しながら転送するモードと、何もせず単純転送するパススルー・モードがある
Datapumpプロセスを構成せずにTrailファイルをNFSとかに書き出してターゲット側に連携する方法もあるが、ほとんどのシステムにおいて構成を推奨されているプロセス
ネットワーク転送の役割をDatapumpに切り出すことで、運用とか障害時の切り分けも容易になる
餅は餅屋だということ
専用のパラメータファイルが必要になる

####Collectorプロセス
Datapumpが送ってきたTrailファイルを受け取る（実際には受け取りと/書き込みを行う）プロセス
GoldenGateのプロセスで唯一明示的にパラメータファイルを作成したり起動したりしないプロセス
Managerから自動起動されるし、障害時も自動復旧する
専用のパラメータファイルが不要

####Replicatプロセス
ソースから送られてきたTrailファイルを受け取り、読み込んだあとにターゲットデータベースに適用を行うプロセス
パラレル処理が可能なIntegrated（統合）モードとシリアル処理OnlyなClassc（非統合）モードがある
データのフィルタリングやマッピング、データ変換ができる

##はやいけどまとめ
ざっとしか書いていないけど
１．ソースデータベースの更新をCaptureプロセスが読み取る
２．CaptureプロセスがTrailファイルを書き出す
３．DatapumpプロセスがTrailファイルをソースに送る
４．CollectorプロセスがTrailファイルを受け取る
５．ReplicatがTrailファイルを読み込んでターゲットデータベースに適用する

上の動作を頭に入れておけば、本当にざっくりしたGoldenGateのアーキテクチャがイメージできます

より具体的な図としては『<a href="https://www.oracle.com/technetwork/jp/middleware/goldengate/ogg-lob-architecture-2511125-ja.pdf">Oracle GoldenGate アーキテクチャと基本機能</a>』のスライド７が参考になるので参照してください！

次のエントリでは実際にGoldenGateをインストールして、プロセス作成、データ伝播までやっていきたいと思います＾＾

5日目以降もよろしくおねがいします！