Oracle GoldenGate
Oracle GoldenGate 包括的ガイド
1. はじめに
1.1 Oracle GoldenGate とは
Oracle GoldenGate(以下OGG)は、異種混合のIT環境においてリアルタイムのデータ統合・レプリケーションを実現するソフトウェア製品である。Oracle社が提供するこのミドルウェアは、トランザクションログベースの変更データキャプチャ(CDC: Change Data Capture)技術を核として、ソースデータベースのトランザクションログからデータ変更を抽出し、ターゲットシステムにほぼリアルタイムで適用する。
OGGの最大の特徴は、ソースデータベースへの影響を最小限に抑えながら、高速かつ信頼性の高いデータレプリケーションを実現できる点にある。従来のトリガーベースやスナップショットベースのレプリケーション方式と比較して、トランザクションログベースのアプローチは以下の点で優れている。
- 低オーバーヘッド: ソースデータベースに追加のトリガーやテーブルを作成する必要がなく、本番環境への影響が極めて小さい
- リアルタイム性: トランザクションがコミットされた直後に変更データをキャプチャし、ターゲットに伝播できる
- データ整合性: トランザクション単位でのレプリケーションを保証し、ソースとターゲット間のデータ一貫性を維持する
- 異種環境対応: Oracle Database だけでなく、SQL Server、MySQL、PostgreSQL、DB2、Teradata、Amazon RDS、BigQuery など多様なデータベースプラットフォームをサポートする
1.2 主なユースケース
Oracle GoldenGate は以下のような多様なユースケースに対応する。
データレプリケーションと高可用性(HA)
プライマリデータベースからスタンバイデータベースへのリアルタイムレプリケーションにより、災害復旧(DR)環境を構築する。Oracle Data Guard と異なり、異種データベース間でもレプリケーションが可能であり、より柔軟なHA/DR構成を実現できる。
ゼロダウンタイムマイグレーション
データベースのバージョンアップグレードやプラットフォーム移行(例:オンプレミスからクラウドへの移行)時に、OGGを使用してソースとターゲットを同期させながら、計画的なカットオーバーによりダウンタイムを最小化する。
リアルタイムデータウェアハウス・ETL
OLTPシステムからデータウェアハウスやデータレイクへのリアルタイムデータフィードを実現する。従来のバッチETLと異なり、ほぼリアルタイムでの分析が可能になる。
双方向レプリケーション(Active-Active)
複数のデータセンターで同一データを更新可能なActive-Active構成を実現する。地理的に分散したアプリケーションにおいて、各拠点でローカルな読み書きを可能にする。
データ配信とイベント駆動アーキテクチャ
データベースの変更イベントを Apache Kafka、JMS、Amazon Kinesis などのメッセージングシステムに配信し、マイクロサービスアーキテクチャにおけるイベント駆動型のデータパイプラインを構築する。
1.3 Oracle GoldenGate のバージョンと歴史
Oracle GoldenGate は元々 GoldenGate Software 社が開発した製品であり、2009年にOracle社が買収した。以下に主要なバージョンの変遷を示す。
| バージョン | リリース年 | 主な特徴 |
|---|---|---|
| GoldenGate 9.x | ~2009年 | Oracle買収前のバージョン |
| Oracle GoldenGate 11g | 2010年 | Oracle製品としての初のメジャーリリース |
| Oracle GoldenGate 12c (12.1/12.2/12.3) | 2013-2017年 | マルチテナント対応、統合Replicat、Coordinated Replicat |
| Oracle GoldenGate 18c | 2018年 | Microservices Architecture (MA) の導入 |
| Oracle GoldenGate 19c | 2019年 | 長期サポート版、パフォーマンス改善 |
| Oracle GoldenGate 21c | 2021年 | REST API強化、AutoCDR |
| Oracle GoldenGate 23ai | 2024年 | AI機能統合、Oracle Database 23ai対応 |
現在のOGGには大きく分けて2つのアーキテクチャが存在する。
- Classic Architecture(クラシックアーキテクチャ): 従来型のコマンドライン(GGSCI)ベースの管理方式
- Microservices Architecture(マイクロサービスアーキテクチャ): REST APIとWebベースの管理コンソールを提供するモダンな管理方式
2. コアコンセプトと用語
2.1 変更データキャプチャ(CDC)の基本原理
Oracle GoldenGate の根幹をなす技術は、変更データキャプチャ(CDC)である。CDCとは、データベースに対する変更(INSERT、UPDATE、DELETE)を検出し、その変更データを下流のシステムに伝播させる技術の総称である。
OGGが採用するログベースCDCの動作原理は以下の通りである。
- トランザクションログの読み取り: データベースのトランザクションログ(Oracle の場合は Redo Log / Archive Log)を直接読み取る
- 変更レコードの解析: ログエントリから、対象テーブルに対するDML操作(INSERT/UPDATE/DELETE)を識別し、変更前後のデータ値を抽出する
- トランザクション再構築: 個々のログエントリを元のトランザクション単位に再構築する。コミットされたトランザクションのみがターゲットに伝播される
- データ変換(オプション): 必要に応じてカラムマッピング、フィルタリング、データ変換を適用する
- ターゲットへの適用: 変更データをターゲットデータベースに対してSQL文として適用する
2.2 主要コンポーネント
Oracle GoldenGate は以下の主要コンポーネントで構成される。
Manager プロセス
OGG環境全体を管理する常駐プロセスである。各ノード(ソース側・ターゲット側)で1つのManagerが動作し、以下の役割を担う。
- Extract、Replicat、Data Pump などの子プロセスの起動・停止・監視
- Trail ファイルのディスク管理(ローテーション、パージ)
- ネットワーク通信用ポートの動的割り当て
- レポートファイルの管理
Extract プロセス
ソースデータベースのトランザクションログからデータ変更を抽出するプロセスである。以下の2種類が存在する。
- Primary Extract(プライマリExtract): データベースのトランザクションログから直接変更データを読み取り、ローカルTrailファイルに書き出す
- Initial Load Extract: 既存データの初期ロードを行うための特殊なExtract。テーブルの全データをソースから読み取ってターゲットに送る
Data Pump プロセス
ローカルTrailファイルからデータを読み取り、リモートのターゲットシステムへネットワーク経由で送信するプロセスである。Data Pumpはオプションのコンポーネントであるが、以下の理由から本番環境では使用が強く推奨される。
- ネットワーク障害時のバッファリング(ストア&フォワード)
- Primary Extractからネットワーク送信処理を分離することによるパフォーマンス向上
- データフィルタリングや変換の実行ポイントとしての活用
Replicat プロセス
ターゲット側でTrailファイルからデータ変更を読み取り、ターゲットデータベースに適用するプロセスである。以下の種類がある。
- Classic Replicat: 単一スレッドで順次的にトランザクションを適用する。最もシンプルだが、大量トランザクション環境ではボトルネックになりうる
- Coordinated Replicat: 複数のスレッドで並列にトランザクションを適用する。スレッド間の依存関係を自動的に管理し、データ整合性を維持しながら高スループットを実現する
- Integrated Replicat(Oracle Database専用): Oracle Databaseの内部APIを使用してデータを適用する。DDLレプリケーションの自動処理やパラレル適用を自然にサポートする
- Parallel Replicat: OGG 21c以降で導入された高性能Replicat。大規模トランザクションの並列処理を最適化する
Trail ファイル
Extract プロセスが書き出す変更データの中間ファイルである。OGG独自のバイナリ形式で、変更レコードを効率的に格納する。
- Local Trail(ローカルTrail): ソース側に作成されるTrailファイル。通常、2文字のプレフィックス(例:
lt)で識別される - Remote Trail(リモートTrail): ターゲット側に作成されるTrailファイル。通常、2文字のプレフィックス(例:
rt)で識別される
Trail ファイルはシーケンス番号付きで管理され(例:lt000001、lt000002...)、一定サイズに達すると新しいファイルにローテーションされる。
Checkpoint
各プロセスの処理位置を記録する仕組みである。チェックポイントにより、プロセスの再起動時に中断した位置から処理を再開できる。チェックポイント情報はチェックポイントテーブル(データベース内)またはチェックポイントファイル(ファイルシステム上)に保存される。
2.3 データフロー概要
OGGにおけるデータフローの典型的な流れを以下に示す。
[ソースDB] → [Redo/Archive Log]
↓
[Extract プロセス]
↓
[Local Trail ファイル]
↓
[Data Pump プロセス]
↓ (TCP/IP ネットワーク)
[Remote Trail ファイル]
↓
[Replicat プロセス]
↓
[ターゲットDB]
この多段階のアーキテクチャにより、各コンポーネントが独立して動作し、障害時のリカバリや性能のチューニングを柔軟に行うことができる。
3. アーキテクチャ詳細
3.1 Classic Architecture(クラシックアーキテクチャ)
Classic Architecture は Oracle GoldenGate の伝統的な構成であり、コマンドラインインタフェース GGSCI(GoldenGate Software Command Interface)を通じてすべての操作を行う。
ディレクトリ構成
Classic Architecture のインストール後の標準的なディレクトリ構造は以下の通りである。
$OGG_HOME/
├── ggsci # GGSCIコマンドラインツール
├── extract # Extractプロセスバイナリ
├── replicat # Replicatプロセスバイナリ
├── mgr # Managerプロセスバイナリ
├── defgen # 定義ファイル生成ツール
├── dirdat/ # Trailファイル格納ディレクトリ
├── dirdef/ # テーブル定義ファイル格納ディレクトリ
├── dirrpt/ # レポートファイル格納ディレクトリ
├── dirchk/ # チェックポイントファイル格納ディレクトリ
├── dirpcs/ # プロセスステータスファイル格納ディレクトリ
├── dirprm/ # パラメータファイル格納ディレクトリ
│ ├── mgr.prm # Managerパラメータ
│ ├── ext1.prm # Extractパラメータ
│ ├── pump1.prm # Data Pumpパラメータ
│ └── rep1.prm # Replicatパラメータ
├── dirtmp/ # 一時ファイル格納ディレクトリ
└── dirsql/ # SQLスクリプト格納ディレクトリ
GGSCI の基本操作
GGSCIは対話型のコマンドラインシェルであり、以下の基本コマンドで操作する。
-- GGSCIの起動
$ cd $OGG_HOME
$ ./ggsci
-- プロセス状態の確認
GGSCI> INFO ALL
-- 特定プロセスの詳細情報
GGSCI> INFO EXTRACT ext1, DETAIL
GGSCI> INFO REPLICAT rep1, DETAIL
-- プロセスの起動・停止
GGSCI> START MANAGER
GGSCI> START EXTRACT ext1
GGSCI> START REPLICAT rep1
GGSCI> STOP EXTRACT ext1
GGSCI> STOP REPLICAT rep1
-- パラメータファイルの編集
GGSCI> EDIT PARAMS ext1
GGSCI> EDIT PARAMS rep1
-- プロセスの追加・削除
GGSCI> ADD EXTRACT ext1, TRANLOG, BEGIN NOW
GGSCI> ADD EXTTRAIL ./dirdat/lt, EXTRACT ext1, MEGABYTES 200
GGSCI> DELETE EXTRACT ext1
-- ラグ(遅延)の確認
GGSCI> LAG EXTRACT ext1
GGSCI> LAG REPLICAT rep1
-- 統計情報の表示
GGSCI> STATS EXTRACT ext1, TOTAL
GGSCI> STATS REPLICAT rep1, TOTAL
3.2 Microservices Architecture(MA)
Oracle GoldenGate 18c 以降で導入された Microservices Architecture(MA)は、RESTful APIとWebベースの管理インタフェースを提供する。
MA のコンポーネント構成
MAは以下の独立したサービスで構成される。
| サービス | デフォルトポート | 説明 |
|---|---|---|
| Service Manager | 任意(例:9100) | 全サービスのライフサイクル管理 |
| Administration Server | 自動割当 | Extract/Replicat の設定・管理 |
| Distribution Server | 自動割当 | リモートTrailへのデータ送信(Data Pump相当) |
| Receiver Server | 自動割当 | リモートからのデータ受信 |
| Performance Metrics Server | 自動割当 | パフォーマンスメトリクスの収集・提供 |
MAの利点
- Web管理コンソール: ブラウザベースのGUIでOGG環境の一元管理が可能
- REST API: CI/CDパイプラインとの統合、自動化スクリプトの作成が容易
- セキュリティ強化: TLS/SSL通信の標準サポート、認証・認可の統合管理
- デプロイメント(OGG Free): Oracle GoldenGate Free 版ではMAが標準
- Kubernetes対応: コンテナ環境へのデプロイメントを正式サポート
MAのデプロイメント構成例
[Service Manager (Port 9100)]
│
├── [Administration Server (Port 9101)]
│ ├── Extract ext1
│ └── Replicat rep1
│
├── [Distribution Server (Port 9102)]
│ └── Distribution Path path1
│
├── [Receiver Server (Port 9103)]
│ └── Receiver path
│
└── [Performance Metrics Server (Port 9104)]
└── メトリクスダッシュボード
REST API の使用例
# デプロイメントの状態確認
curl -u oggadmin:password -X GET \
https://ogg-host:9100/services/v2/deployments \
-H "Content-Type: application/json"
# Extract の作成
curl -u oggadmin:password -X POST \
https://ogg-host:9101/services/v2/extracts/ext1 \
-H "Content-Type: application/json" \
-d '{
"description": "Primary Extract",
"config": [
"EXTRACT ext1",
"USERIDALIAS ogg_src DOMAIN OracleGoldenGate",
"EXTTRAIL lt",
"TABLE hr.*;"
],
"source": {
"tranlogs": "integrated"
},
"registration": {
"containers": ["pdb1"]
},
"begin": "now"
}'
# Replicat の状態確認
curl -u oggadmin:password -X GET \
https://ogg-host:9101/services/v2/replicats/rep1/info \
-H "Content-Type: application/json"
3.3 Extract プロセスの詳細アーキテクチャ
Classic Extract vs Integrated Extract
Oracle Database をソースとする場合、2種類のExtractモードがある。
Classic Extract(Classic Capture)
- OGGプロセスが直接 Redo Log ファイルを読み取り、解析する
- Oracle Database のバージョンやプラットフォームに依存しにくい
- 非Oracle データベースでは唯一の選択肢
Integrated Extract(Integrated Capture)
- Oracle Database の Logmining Server API を使用してログを読み取る
- Oracle Database 11.2.0.3 以降でサポート
- マルチテナント(CDB/PDB)環境に対応
- Oracle の内部APIを使用するため、Oracle のログフォーマット変更に自動的に追従する
- 推奨される方式
Integrated Extract の内部動作は以下の通りである。
[Oracle Database Instance]
│
├── [Redo Log Writer (LGWR)]
│ └── Redo Log Files
│
├── [Logmining Server] ← Oracle内部コンポーネント
│ ├── Redo Log の読み取り
│ ├── Logical Change Records (LCR) の生成
│ └── LCR を Extract に送信
│
└── [Integrated Extract プロセス]
├── LCR の受信
├── フィルタリング・変換
└── Trail ファイルへの書き出し
Integrated Extract の登録コマンド例:
-- GGSCIでの登録
GGSCI> DBLOGIN USERIDALIAS ogg_src
GGSCI> REGISTER EXTRACT ext1 DATABASE CONTAINER (pdb1)
-- Extractの追加
GGSCI> ADD EXTRACT ext1, INTEGRATED TRANLOG, BEGIN NOW
GGSCI> ADD EXTTRAIL ./dirdat/lt, EXTRACT ext1, MEGABYTES 200
Extract パラメータファイルの詳細例
-- ext1.prm (Integrated Extract パラメータ)
EXTRACT ext1
-- データベース接続
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
-- Integrated Capture モード
TRANLOGOPTIONS INTEGRATEDPARAMS (MAX_SGA_SIZE 256)
-- Extract のパフォーマンスチューニング
FETCHOPTIONS FETCHPKUPDATECOLS
CACHEMGR CACHESIZE 2G, CACHEDIRECTORY /tmp/ogg_cache 10G
-- Trail ファイル設定
EXTTRAIL ./dirdat/lt
-- Trail ファイルサイズ(MB)
-- MEGABYTES 500 はADD EXTTRAILで指定済み
-- DDL レプリケーション
DDL INCLUDE MAPPED
-- テーブルマッピング
TABLE pdb1.hr.employees;
TABLE pdb1.hr.departments;
TABLE pdb1.hr.job_history;
TABLE pdb1.sales.*;
-- 特定テーブルの除外
TABLEEXCLUDE pdb1.sales.temp_*;
-- 大きなトランザクションの処理設定
EOFDELAY 1
WARNLONGTRANS 2H, CHECKINTERVAL 30M
3.4 Replicat プロセスの詳細アーキテクチャ
Replicat モードの比較
| 特徴 | Classic Replicat | Coordinated Replicat | Integrated Replicat | Parallel Replicat |
|---|---|---|---|---|
| 並列処理 | なし(単一スレッド) | あり(マルチスレッド) | あり(DB内部並列) | あり(高度な並列) |
| 適用方式 | 直接SQL実行 | 直接SQL実行 | Database Inbound Server | 直接SQL実行 |
| DDL対応 | 手動設定必要 | 手動設定必要 | 自動 | 手動設定必要 |
| 依存関係管理 | N/A | OGGが管理 | DBが管理 | OGGが管理 |
| パフォーマンス | 低〜中 | 高 | 高 | 非常に高 |
| 対応DB | 全DB | 全DB | Oracle のみ | 全DB |
Replicat パラメータファイルの詳細例
-- rep1.prm (Parallel Replicat パラメータ)
REPLICAT rep1
-- データベース接続
USERIDALIAS ogg_tgt DOMAIN OracleGoldenGate
-- Parallel Replicat 設定
-- MAP_PARALLELISM: 並列適用スレッド数
-- MIN_APPLY_PARALLELISM: 最小並列度
-- MAX_APPLY_PARALLELISM: 最大並列度
MAP_PARALLELISM 4
MIN_APPLY_PARALLELISM 2
MAX_APPLY_PARALLELISM 8
-- トランザクション整合性の維持
-- SPLIT_TRANS_RECS: 大きなトランザクションの分割閾値
SPLIT_TRANS_RECS 1000
-- エラーハンドリング
REPERROR (DEFAULT, ABEND)
REPERROR (1403, DISCARD) -- ORA-01403: no data found
REPERROR (1, DISCARD) -- ORA-00001: unique constraint violated
-- Discard ファイル(エラーレコード記録)
DISCARDFILE ./dirrpt/rep1_discard.dsc, PURGE, MEGABYTES 100
-- DDL レプリケーション
DDL INCLUDE MAPPED
-- チェックポイントテーブル
-- (ADD CHECKPOINTTABLE で事前に作成済み)
-- テーブルマッピング
MAP pdb1.hr.employees, TARGET hr.employees;
MAP pdb1.hr.departments, TARGET hr.departments;
MAP pdb1.hr.job_history, TARGET hr.job_history;
-- カラムマッピングの例
MAP pdb1.sales.orders, TARGET analytics.fact_orders, &
COLMAP (USEDEFAULTS, &
order_date_key = @COMPUTE (order_date - DATE (2000,1,1)), &
load_timestamp = @DATENOW());
-- フィルタ条件の例(特定条件のレコードのみ適用)
MAP pdb1.sales.transactions, TARGET sales.transactions, &
FILTER (@STREQ (status, 'COMPLETED'));
4. Manager プロセスとネットワーク構成
4.1 Manager パラメータの詳細
Manager プロセスは OGG 環境全体のオーケストレーターであり、そのパラメータファイル(mgr.prm)はすべてのOGGノードで必須である。
-- mgr.prm (Manager パラメータファイル)
-- Manager の通信ポート
PORT 7809
-- 動的ポート範囲(Data Pump/Collector 用)
DYNAMICPORTLIST 7810-7820
-- Trail ファイルの自動パージ設定
-- 使用済みTrailファイルを7日後に自動削除
PURGEOLDEXTRACTS ./dirdat/lt*, USECHECKPOINTS, MINKEEPDAYS 7
PURGEOLDEXTRACTS ./dirdat/rt*, USECHECKPOINTS, MINKEEPDAYS 7
-- レポートファイルの自動ローテーション
-- REPORTROLLOVER TIME_REPORT_ROTATION
AUTOSTART EXTRACT *
AUTOSTART REPLICAT *
-- プロセス異常終了時の自動再起動
AUTORESTART EXTRACT *, RETRIES 3, WAITMINUTES 5, RESETMINUTES 60
AUTORESTART REPLICAT *, RETRIES 3, WAITMINUTES 5, RESETMINUTES 60
-- セキュリティ設定
-- ACCESSRULE により接続を許可するIPアドレスを制限
ACCESSRULE, PROG *, IPADDR 192.168.1.*, ALLOW
ACCESSRULE, PROG *, IPADDR 10.0.0.*, ALLOW
ACCESSRULE, PROG *, IPADDR *, DENY
-- ラグ閾値(アラート用)
LAGREPORTHOURS 1
LAGINFOMINUTES 0
LAGCRITICALMINUTES 10
4.2 ネットワーク構成とファイアウォール設定
OGG環境のネットワーク設計では、以下のポートと通信要件を考慮する必要がある。
必要なネットワークポート
| 通信方向 | ポート | プロトコル | 用途 |
|---|---|---|---|
| ソース→ターゲット | 7809(Manager) | TCP | Managerプロセス通信 |
| ソース→ターゲット | 7810-7820(動的) | TCP | Data Pump → Collector通信 |
| クライアント→MA | 9100-9104 | HTTPS | Microservices Architecture WebUI/API |
| OGG→Database | 1521(Oracle) | TCP | データベース接続 |
ネットワークレイテンシの影響
OGGのレプリケーションパフォーマンスはネットワークレイテンシに大きく影響される。以下のガイドラインが推奨される。
- 同一データセンター内(< 1ms): 最高のパフォーマンス。Data Pump の TCPBUFSIZE はデフォルトで十分
- 地域間(1-50ms): Data Pump の TCPBUFSIZE を増加させ、COMPRESS(圧縮)を有効にする
- 大陸間(50-200ms): 圧縮必須、TCPBUFSIZE の最大化、複数Data Pumpによる並列送信を検討
-- Data Pump パラメータでのネットワーク最適化例
EXTRACT pump1
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
RMTHOST target-ogg-host, MGRPORT 7809, COMPRESS, COMPRESSTHRESHOLD 1000
RMTTRAIL ./dirdat/rt
PASSTHRU
TABLE pdb1.hr.*;
TABLE pdb1.sales.*;
4.3 認証とクレデンシャル管理
OGGでのデータベース認証には、クレデンシャルストアの使用が推奨される。
-- クレデンシャルストアの作成
GGSCI> ADD CREDENTIALSTORE
-- ソースDB用クレデンシャルの追加
GGSCI> ALTER CREDENTIALSTORE ADD USER ogg_admin@orcl_src PASSWORD ******* ALIAS ogg_src DOMAIN OracleGoldenGate
-- ターゲットDB用クレデンシャルの追加
GGSCI> ALTER CREDENTIALSTORE ADD USER ogg_admin@orcl_tgt PASSWORD ******* ALIAS ogg_tgt DOMAIN OracleGoldenGate
-- クレデンシャル一覧の確認
GGSCI> INFO CREDENTIALSTORE
-- パラメータファイルでの使用
-- USERID ogg_admin@orcl_src, PASSWORD ******* の代わりに
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
5. Trail ファイルの仕組み
5.1 Trail ファイルの構造
Trail ファイルは OGG 独自のバイナリ形式で、以下の情報を格納する。
Trail レコードの構成要素
各 Trail レコードには以下の情報が含まれる。
- ヘッダ情報: レコードタイプ(INSERT/UPDATE/DELETE)、タイムスタンプ、トランザクション情報
- テーブル識別子: スキーマ名、テーブル名
- カラムデータ: 変更されたカラムの値(変更前/変更後)
- キー情報: プライマリキーまたはユニークキーの値
- トランザクション境界: BEGIN/COMMIT マーカー
Trail ファイルの命名規則
dirdat/lt000001 -- ローカルTrail、シーケンス1
dirdat/lt000002 -- ローカルTrail、シーケンス2
dirdat/rt000001 -- リモートTrail、シーケンス1
プレフィックス(lt、rtなど)は2文字で指定し、6桁のシーケンス番号が自動的に付与される。シーケンス番号は 000000 ~ 999999 の範囲でローテーションする。
5.2 Trail ファイルの管理
サイズ管理
-- Trail ファイルの最大サイズを500MBに設定
GGSCI> ADD EXTTRAIL ./dirdat/lt, EXTRACT ext1, MEGABYTES 500
-- パラメータファイルでの設定
EXTTRAIL ./dirdat/lt, MEGABYTES 500
自動パージ
Manager パラメータで自動パージを設定する。
-- チェックポイントに基づく安全なパージ
PURGEOLDEXTRACTS ./dirdat/lt*, USECHECKPOINTS, MINKEEPDAYS 3
PURGEOLDEXTRACTS ./dirdat/rt*, USECHECKPOINTS, MINKEEPDAYS 3
-- 時間ベースのパージ(チェックポイント無視 - 非推奨)
-- PURGEOLDEXTRACTS ./dirdat/lt*, MINKEEPHOURS 24
Trail の暗号化
セキュリティ要件が高い環境では、Trail ファイルを暗号化できる。
-- Extract パラメータでの暗号化設定
ENCRYPTTRAIL AES256
-- 暗号化キーの管理
ENCRYPT DATA USING AES256 KEYNAME mykey1
5.3 Logdump ユーティリティ
logdump は Trail ファイルの内容を人間が読める形式で表示するデバッグツールである。
-- logdump の起動
$ cd $OGG_HOME
$ ./logdump
-- Trail ファイルを開く
Logdump> OPEN ./dirdat/lt000001
-- 表示設定
Logdump> GHDR ON -- ヘッダ情報の表示
Logdump> DETAIL ON -- 詳細データの表示
Logdump> DETAIL DATA -- カラムデータの16進数表示
Logdump> USERTOKEN ON -- ユーザートークンの表示
-- レコードの閲覧
Logdump> NEXT -- 次のレコードを表示
Logdump> COUNT -- レコード数のカウント
Logdump> SCANFOREND -- ファイル末尾までスキャン
-- 特定テーブルのレコードを検索
Logdump> FILTER INCLUDE FILENAME hr.employees
Logdump> NEXT
-- 出力例
___________________________________________________________________
Hdr-Ind : E (x45) Partition : . (x04)
UndoFlag : . (x00) BeforeAfter: A (x41)
RecLength : 82 (x0052) IO Time : 2024/03/15 10:30:45.123
IOType : 5 (x05) OrigNode : 255 (xFF)
TransInd : . (x03) FormatType : R (x52)
SyskeyLen : 0 (x00) Incomplete : . (x00)
AuditRBA : 1234 AuditPos : 56789012
Continued : N (x00) RecCount : 1 (x01)
2024/03/15 10:30:45.123 Insert Len 82 RBA 1234
Name: HR.EMPLOYEES (TDR Index: 1)
After Image: Partition x04 G b
0000 0005 0000 0003 3130 3100 0100 0000 | ........101.....
0008 4b69 6e67 0002 0000 0009 4144 5f50 | ..King......AD_P
...
Column 0 (x0000), Len 4 (x0004) EMPLOYEE_ID = 101
Column 1 (x0001), Len 5 (x0005) LAST_NAME = King
...
6. レプリケーショントポロジー
Oracle GoldenGate は、様々なレプリケーショントポロジーをサポートする。
6.1 単方向(Unidirectional)レプリケーション
最もシンプルな構成で、ソースからターゲットへの一方向のデータ伝播を行う。
[ソースDB] ──Extract──> [Trail] ──Replicat──> [ターゲットDB]
ユースケース: DR構成、レポーティング用レプリカ、データウェアハウスへのフィード
6.2 双方向(Bidirectional)レプリケーション
2つのデータベース間で相互にデータを同期する Active-Active 構成。
[サイトA DB] ──Extract A──> [Trail] ──Replicat A'──> [サイトB DB]
↑ │
└──Replicat B'──< [Trail] <──Extract B──────────────────┘
重要な考慮点: ループ防止(レプリケートされたデータを再度キャプチャしない仕組み)と、コンフリクト検出・解決(CDR: Conflict Detection and Resolution)の設定が必須。
ループ防止の設定例
-- サイトA の Extract パラメータ
EXTRACT extA
USERIDALIAS ogg_siteA DOMAIN OracleGoldenGate
TRANLOGOPTIONS EXCLUDETAG 00
EXTTRAIL ./dirdat/la
TABLE hr.*;
-- サイトA の Replicat パラメータ(サイトBからのデータ適用時にタグを設定)
REPLICAT repA
USERIDALIAS ogg_siteA DOMAIN OracleGoldenGate
DBOPTIONS SETTAG 00
MAP hr.*, TARGET hr.*;
TRANLOGOPTIONS EXCLUDETAG と DBOPTIONS SETTAG の組み合わせにより、Replicatが適用したトランザクションにタグを付与し、Extractがそのタグ付きトランザクションをスキップする。
6.3 ファンアウト(Fan-out / Broadcast)
1つのソースから複数のターゲットにデータを配信する構成。
┌──Replicat 1──> [ターゲットDB 1]
[ソースDB] ──Extract──>──┤
├──Replicat 2──> [ターゲットDB 2]
│
└──Replicat 3──> [ターゲットDB 3]
-- Data Pump 1 (ターゲット1向け)
EXTRACT pump1
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
RMTHOST target1-host, MGRPORT 7809
RMTTRAIL ./dirdat/r1
PASSTHRU
TABLE hr.*;
-- Data Pump 2 (ターゲット2向け)
EXTRACT pump2
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
RMTHOST target2-host, MGRPORT 7809
RMTTRAIL ./dirdat/r2
PASSTHRU
TABLE hr.*;
6.4 統合(Consolidation / Fan-in)
複数のソースから1つのターゲットにデータを集約する構成。
[ソースDB 1] ──Extract 1──>──┐
├──> [ターゲットDB]
[ソースDB 2] ──Extract 2──>──┤
│
[ソースDB 3] ──Extract 3──>──┘
注意点: 各ソースのデータが競合しないようスキーマ設計やフィルタリングが必要。
6.5 カスケード(Cascading)
中間ノードを経由する多段レプリケーション。
[ソースDB] ──> [中間DB] ──> [最終ターゲットDB]
地理的に分散した環境や、ネットワーク制約がある場合に有用。
6.6 ピアツーピア(Peer-to-Peer)
3つ以上のノードが相互にレプリケーションする構成。双方向レプリケーションの拡張版。
[サイトA] ←──→ [サイトB]
↑ ╲ ╱ ↑
│ ╲ ╱ │
↓ ╲╱ ↓
[サイトC]
この構成では、各サイトのExtractとReplicatのペアが必要であり、コンフリクト解決の設定が非常に重要になる。
7. 設定の具体例
7.1 基本的な単方向レプリケーションの構成手順
以下に、Oracle Database 19c から Oracle Database 19c への単方向レプリケーションの完全な構成手順を示す。
Step 1: ソースデータベースの準備
-- ソースDB: supplemental logging の有効化
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE FORCE LOGGING;
-- スキーマレベルの supplemental logging
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
-- または、テーブルレベルで個別に設定
ALTER TABLE hr.employees ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER TABLE hr.departments ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
-- OGG管理ユーザーの作成
CREATE USER ogg_admin IDENTIFIED BY "SecurePass123#";
GRANT CREATE SESSION, ALTER SESSION TO ogg_admin;
GRANT RESOURCE TO ogg_admin;
GRANT SELECT ANY DICTIONARY TO ogg_admin;
GRANT FLASHBACK ANY TABLE TO ogg_admin;
GRANT SELECT ANY TABLE TO ogg_admin;
GRANT INSERT, UPDATE, DELETE ON hr.employees TO ogg_admin;
GRANT INSERT, UPDATE, DELETE ON hr.departments TO ogg_admin;
-- GoldenGate Replication 用の権限
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('ogg_admin');
-- アーカイブログモードの確認
ARCHIVE LOG LIST;
Step 2: ターゲットデータベースの準備
-- ターゲットDB: OGG管理ユーザーの作成
CREATE USER ogg_admin IDENTIFIED BY "SecurePass123#";
GRANT CREATE SESSION, ALTER SESSION TO ogg_admin;
GRANT RESOURCE TO ogg_admin;
GRANT SELECT ANY DICTIONARY TO ogg_admin;
GRANT INSERT, UPDATE, DELETE ON hr.employees TO ogg_admin;
GRANT INSERT, UPDATE, DELETE ON hr.departments TO ogg_admin;
-- チェックポイントテーブル用の権限
GRANT CREATE TABLE TO ogg_admin;
ALTER USER ogg_admin QUOTA UNLIMITED ON USERS;
Step 3: ソース側 OGG の設定
-- GGSCI でソース側を設定
$ cd $OGG_HOME
$ ./ggsci
-- クレデンシャルストアの設定
GGSCI> ADD CREDENTIALSTORE
GGSCI> ALTER CREDENTIALSTORE ADD USER ogg_admin@orcl_src ALIAS ogg_src DOMAIN OracleGoldenGate
-- DB接続テスト
GGSCI> DBLOGIN USERIDALIAS ogg_src
-- チェックポイントテーブルの作成
GGSCI> ADD CHECKPOINTTABLE ogg_admin.gg_checkpoint
-- Supplemental Log の確認
GGSCI> ADD SCHEMATRANDATA hr ALLCOLS
-- Manager パラメータ設定
GGSCI> EDIT PARAMS mgr
-- mgr.prm
PORT 7809
DYNAMICPORTLIST 7810-7830
PURGEOLDEXTRACTS ./dirdat/lt*, USECHECKPOINTS, MINKEEPDAYS 7
AUTORESTART EXTRACT *, RETRIES 3, WAITMINUTES 5
LAGREPORTHOURS 1
LAGCRITICALMINUTES 10
-- Extract プロセスの追加
GGSCI> ADD EXTRACT ext1, INTEGRATED TRANLOG, BEGIN NOW
GGSCI> REGISTER EXTRACT ext1 DATABASE
-- Extract Trail の追加
GGSCI> ADD EXTTRAIL ./dirdat/lt, EXTRACT ext1, MEGABYTES 200
-- Extract パラメータ設定
GGSCI> EDIT PARAMS ext1
-- ext1.prm
EXTRACT ext1
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
EXTTRAIL ./dirdat/lt
-- パフォーマンス設定
FETCHOPTIONS FETCHPKUPDATECOLS
TRANLOGOPTIONS INTEGRATEDPARAMS (MAX_SGA_SIZE 256)
-- テーブル指定
TABLE hr.employees;
TABLE hr.departments;
TABLE hr.job_history;
TABLE hr.locations;
TABLE hr.countries;
TABLE hr.regions;
-- Data Pump の追加
GGSCI> ADD EXTRACT pump1, EXTTRAILSOURCE ./dirdat/lt
GGSCI> ADD RMTTRAIL ./dirdat/rt, EXTRACT pump1, MEGABYTES 200
-- Data Pump パラメータ設定
GGSCI> EDIT PARAMS pump1
-- pump1.prm
EXTRACT pump1
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
RMTHOST target-ogg-host, MGRPORT 7809, COMPRESS
RMTTRAIL ./dirdat/rt
PASSTHRU
TABLE hr.*;
Step 4: ターゲット側 OGG の設定
$ cd $OGG_HOME
$ ./ggsci
-- クレデンシャルストアの設定
GGSCI> ADD CREDENTIALSTORE
GGSCI> ALTER CREDENTIALSTORE ADD USER ogg_admin@orcl_tgt ALIAS ogg_tgt DOMAIN OracleGoldenGate
-- DB接続テスト
GGSCI> DBLOGIN USERIDALIAS ogg_tgt
-- チェックポイントテーブルの作成
GGSCI> ADD CHECKPOINTTABLE ogg_admin.gg_checkpoint
-- Manager パラメータ設定
GGSCI> EDIT PARAMS mgr
-- mgr.prm (ターゲット側)
PORT 7809
DYNAMICPORTLIST 7810-7830
PURGEOLDEXTRACTS ./dirdat/rt*, USECHECKPOINTS, MINKEEPDAYS 7
AUTORESTART REPLICAT *, RETRIES 3, WAITMINUTES 5
LAGREPORTHOURS 1
LAGCRITICALMINUTES 10
-- Replicat の追加
GGSCI> ADD REPLICAT rep1, PARALLEL, EXTTRAIL ./dirdat/rt, CHECKPOINTTABLE ogg_admin.gg_checkpoint
-- Replicat パラメータ設定
GGSCI> EDIT PARAMS rep1
-- rep1.prm
REPLICAT rep1
USERIDALIAS ogg_tgt DOMAIN OracleGoldenGate
-- Parallel Replicat 設定
MAP_PARALLELISM 4
MIN_APPLY_PARALLELISM 2
MAX_APPLY_PARALLELISM 8
-- エラーハンドリング
REPERROR (DEFAULT, ABEND)
DISCARDFILE ./dirrpt/rep1_discard.dsc, PURGE, MEGABYTES 100
-- テーブルマッピング
MAP hr.employees, TARGET hr.employees;
MAP hr.departments, TARGET hr.departments;
MAP hr.job_history, TARGET hr.job_history;
MAP hr.locations, TARGET hr.locations;
MAP hr.countries, TARGET hr.countries;
MAP hr.regions, TARGET hr.regions;
Step 5: 初期データロードとプロセス起動
-- ソース側
GGSCI> START MANAGER
GGSCI> START EXTRACT ext1
GGSCI> START EXTRACT pump1
-- ターゲット側
GGSCI> START MANAGER
GGSCI> START REPLICAT rep1
-- 状態確認
GGSCI> INFO ALL
GGSCI> INFO EXTRACT ext1, DETAIL
GGSCI> INFO REPLICAT rep1, DETAIL
-- ラグ確認
GGSCI> LAG EXTRACT ext1
GGSCI> LAG REPLICAT rep1
7.2 Oracle から Kafka へのデータ配信
OGG for Big Data を使用して、Oracle Database の変更データを Apache Kafka に配信する設定例。
Extract 側(通常の設定と同様)
-- ext_kafka.prm
EXTRACT ext_kafka
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
EXTTRAIL ./dirdat/lk
TABLE hr.employees;
TABLE hr.departments;
Replicat 側(OGG for Big Data / Kafka Handler)
-- rep_kafka.prm
REPLICAT rep_kafka
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props
REPORTCOUNT EVERY 60 SECONDS, RATE
GROUPTRANSOPS 1000
MAP hr.employees, TARGET hr.employees;
MAP hr.departments, TARGET hr.departments;
# kafka.props (Kafka Handler プロパティ)
gg.handlerlist=kafkahandler
gg.handler.kafkahandler.type=kafka
gg.handler.kafkahandler.KafkaProducerConfigFile=dirprm/kafka-producer.properties
gg.handler.kafkahandler.topicMappingTemplate=${schemaName}_${tableName}
gg.handler.kafkahandler.keyMappingTemplate=${primaryKeys}
gg.handler.kafkahandler.format=json
gg.handler.kafkahandler.format.metaColumnsTemplate=${optype},${timestamp}
gg.handler.kafkahandler.SchemaTopicName=oggschema
gg.handler.kafkahandler.BlockingSend=true
gg.handler.kafkahandler.includeTokens=false
# JSON フォーマッタ設定
gg.handler.kafkahandler.format.insertOpKey=I
gg.handler.kafkahandler.format.updateOpKey=U
gg.handler.kafkahandler.format.deleteOpKey=D
gg.handler.kafkahandler.format.treatAllColumnsAsStrings=false
gg.handler.kafkahandler.format.iso8601Format=true
gg.handler.kafkahandler.format.pkUpdateHandling=delete-insert
# kafka-producer.properties
bootstrap.servers=kafka-broker1:9092,kafka-broker2:9092,kafka-broker3:9092
acks=all
retries=3
retry.backoff.ms=1000
key.serializer=org.apache.kafka.common.serialization.StringSerializer
value.serializer=org.apache.kafka.common.serialization.StringSerializer
compression.type=snappy
linger.ms=100
batch.size=65536
buffer.memory=67108864
# セキュリティ設定(必要に応じて)
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="kafka_user" password="kafka_password";
ssl.truststore.location=/etc/kafka/ssl/truststore.jks
ssl.truststore.password=changeit
Kafka に出力される JSON メッセージの例:
{
"table": "HR.EMPLOYEES",
"op_type": "U",
"op_ts": "2024-03-15 10:30:45.123456",
"current_ts": "2024-03-15 10:30:46.789012",
"pos": "00000000000001234567",
"before": {
"EMPLOYEE_ID": 101,
"LAST_NAME": "King",
"SALARY": 24000
},
"after": {
"EMPLOYEE_ID": 101,
"LAST_NAME": "King",
"SALARY": 25000
}
}
8. DDL レプリケーション
8.1 DDL レプリケーションの概要
Oracle GoldenGate は DML(INSERT/UPDATE/DELETE)だけでなく、DDL(Data Definition Language)操作のレプリケーションもサポートする。DDLレプリケーションにより、ソースデータベースのスキーマ変更をターゲットに自動的に伝播できる。
サポートされるDDL操作
- CREATE / ALTER / DROP TABLE
- CREATE / ALTER / DROP INDEX
- CREATE / ALTER / DROP SEQUENCE
- CREATE / ALTER / DROP VIEW
- CREATE / ALTER / DROP PROCEDURE / FUNCTION / PACKAGE
- CREATE / ALTER / DROP TRIGGER
- CREATE / ALTER / DROP TYPE
- TRUNCATE TABLE
- ALTER TABLE ADD / MODIFY / DROP COLUMN
- ALTER TABLE ADD / DROP CONSTRAINT
- GRANT / REVOKE
8.2 DDL レプリケーションの設定
Integrated Mode での DDL レプリケーション
Integrated Extract + Integrated Replicat の構成では、DDLレプリケーションが最もシームレスに動作する。
-- Extract パラメータ(DDL有効化)
EXTRACT ext1
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
EXTTRAIL ./dirdat/lt
-- DDL レプリケーションの有効化
DDL INCLUDE MAPPED
-- DDL のフィルタリング
-- 特定のスキーマのDDLのみキャプチャ
DDL INCLUDE OBJNAME hr.*
DDL EXCLUDE OBJNAME hr.temp_*
TABLE hr.*;
-- Replicat パラメータ(DDL有効化)
REPLICAT rep1
USERIDALIAS ogg_tgt DOMAIN OracleGoldenGate
DDL INCLUDE MAPPED
DDLERROR DEFAULT DISCARD RETRYOP MAXRETRIES 3
MAP hr.*, TARGET hr.*;
8.3 Classic Mode での DDL レプリケーション
Classic Architecture では、DDLレプリケーション用のトリガーとメタデータテーブルのインストールが必要。
-- ソースDBでのDDLサポートオブジェクトのインストール
-- marker_setup.sql はOGG_HOMEに含まれる
@marker_setup.sql
@ddl_setup.sql
@role_setup.sql
GRANT GGS_GGSUSER_ROLE TO ogg_admin;
@ddl_enable.sql
-- インストール確認
@ddl_status.sql
8.4 DDL レプリケーションの注意点
- テーブルスペース: ターゲットに同名のテーブルスペースが存在しない場合、DDLは失敗する。
DDLSUBSTパラメータで置換可能 - ストレージ句: ソース固有のストレージパラメータは
DDL REMOVECOMMENTSで除去可能 - 権限: DDLを実行するOGGユーザーに適切な権限が必要
- パフォーマンス: 大量のDDL操作はレプリケーションのラグを増大させる可能性がある
-- DDLサブスティテューションの例
DDLSUBST 'TABLESPACE users' WITH 'TABLESPACE users_tgt'
DDLSUBST 'STORAGE (INITIAL' WITH '/* STORAGE (INITIAL'
DDLSUBST 'FREELISTS' WITH 'FREELISTS */ /*'
9. コンフリクト検出と解決(CDR)
9.1 コンフリクトの種類
双方向レプリケーションやマルチマスター環境では、同一レコードが複数のサイトで同時に変更される可能性がある。主なコンフリクトの種類は以下の通りである。
1. Update コンフリクト(更新競合)
同一レコードが2つのサイトで異なる値に更新された場合に発生する。
サイトA: UPDATE employees SET salary = 50000 WHERE employee_id = 101;
サイトB: UPDATE employees SET salary = 55000 WHERE employee_id = 101;
2. Insert コンフリクト(挿入競合)
同一のプライマリキー値を持つレコードが2つのサイトで同時に挿入された場合に発生する。
サイトA: INSERT INTO employees (employee_id, ...) VALUES (999, ...);
サイトB: INSERT INTO employees (employee_id, ...) VALUES (999, ...);
3. Delete コンフリクト(削除競合)
あるサイトでレコードが削除された後、別のサイトでそのレコードに対する更新が到着した場合に発生する。
サイトA: DELETE FROM employees WHERE employee_id = 101;
サイトB: UPDATE employees SET salary = 50000 WHERE employee_id = 101; -- 到着時に対象レコードが存在しない
9.2 CDR(Conflict Detection and Resolution)の設定
OGGでは、Replicat パラメータ内でコンフリクト検出と解決のルールを定義する。
コンフリクト検出の設定
-- rep_bidir.prm
REPLICAT rep_bidir
USERIDALIAS ogg_siteA DOMAIN OracleGoldenGate
-- コンフリクト検出と解決の設定
MAP hr.employees, TARGET hr.employees, &
COMPARECOLS (ON UPDATE ALL, ON DELETE ALL), &
RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, USEMAX (last_modified_date))), &
RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, USEMAX (last_modified_date))), &
RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, OVERWRITE)), &
RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, DISCARD)), &
RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, DISCARD));
解決ストラテジーの種類
| ストラテジー | 説明 |
|---|---|
USEMAX(column) | 指定カラムの値が大きい方を採用(タイムスタンプベースの解決に最適) |
USEMIN(column) | 指定カラムの値が小さい方を採用 |
OVERWRITE | ソース(到着データ)で無条件に上書き |
DISCARD | 到着データを破棄(ターゲット側のデータを維持) |
USEDELTA | 数値カラムの差分を加算(在庫カウンタなどに有用) |
9.3 AutoCDR(OGG 21c以降)
Oracle GoldenGate 21c では AutoCDR(Automatic Conflict Detection and Resolution)が導入された。AutoCDR は、データベース側に組み込まれたCDR機能であり、OGG レベルでの設定を大幅に簡素化する。
-- AutoCDR の有効化(Oracle Database 側)
BEGIN
DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR(
schema_name => 'HR',
table_name => 'EMPLOYEES',
conflict_handler => DBMS_GOLDENGATE_ADM.LATEST_TIMESTAMP,
timestamp_column => 'LAST_MODIFIED_DATE'
);
END;
/
-- AutoCDR の状態確認
SELECT * FROM DBA_GOLDENGATE_AUTO_CDR;
10. パフォーマンスチューニング
10.1 Extract のチューニング
トランザクションログ読み取りの最適化
-- ext1.prm のパフォーマンスチューニング
-- Integrated Extract の SGA 使用量
TRANLOGOPTIONS INTEGRATEDPARAMS (MAX_SGA_SIZE 512)
-- キャッシュマネージャの設定
-- 大量のUPDATE操作がある場合、キャッシュを増やす
CACHEMGR CACHESIZE 4G
CACHEMGR CACHEDIRECTORY /u01/ogg_cache 20G
-- フェッチの最適化
-- UPDATE時にプライマリキー以外のカラムもフェッチ
FETCHOPTIONS FETCHPKUPDATECOLS
-- フェッチ失敗時の動作
FETCHOPTIONS MISSINGCOLS (REPORT)
-- バッチ処理の最適化
GROUPTRANSOPS 10000
-- I/O最適化
EOFDELAY 1
EOFDELAYCSECS 100
-- 大きなトランザクションの管理
WARNLONGTRANS 2H, CHECKINTERVAL 30M
不要なテーブルの除外
-- 一時テーブルや監査テーブルを除外してExtract負荷を軽減
TABLE hr.*;
TABLEEXCLUDE hr.temp_*;
TABLEEXCLUDE hr.audit_log;
TABLEEXCLUDE hr.session_data;
10.2 Data Pump のチューニング
-- pump1.prm のパフォーマンスチューニング
EXTRACT pump1
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
-- ネットワーク転送の最適化
RMTHOST target-host, MGRPORT 7809, COMPRESS, COMPRESSTHRESHOLD 500
-- TCP バッファサイズの調整(バイト単位)
-- TCPBUFSIZE 262144
-- リモートTrail
RMTTRAIL ./dirdat/rt
-- パススルーモード(変換なしの高速転送)
PASSTHRU
-- 複数Data Pumpによる並列送信
-- テーブル範囲で分割する例
TABLE hr.employees;
TABLE hr.departments;
複数の Data Pump を使用する場合のテーブル分割例:
-- pump_hr.prm(HRスキーマ用)
EXTRACT pump_hr
RMTHOST target-host, MGRPORT 7809, COMPRESS
RMTTRAIL ./dirdat/rh
PASSTHRU
TABLE hr.*;
-- pump_sales.prm(SALESスキーマ用)
EXTRACT pump_sales
RMTHOST target-host, MGRPORT 7809, COMPRESS
RMTTRAIL ./dirdat/rs
PASSTHRU
TABLE sales.*;
10.3 Replicat のチューニング
Parallel Replicat の最適化
-- rep1.prm のパフォーマンスチューニング
REPLICAT rep1
USERIDALIAS ogg_tgt DOMAIN OracleGoldenGate
-- 並列度の設定
MAP_PARALLELISM 6
MIN_APPLY_PARALLELISM 4
MAX_APPLY_PARALLELISM 12
-- 大きなトランザクションの分割
SPLIT_TRANS_RECS 5000
-- バッチ適用の最適化
GROUPTRANSOPS 5000
-- 配列バインドによるバッチINSERT
BATCHSQL BATCHTRANSOPS 5000, OPSPERBATCH 2000
-- SQL キャッシュの最適化
SQLEXEC_CACHE_SIZE 4096
BATCHSQL の詳細設定
BATCHSQL は、複数の同一SQL文をバッチ実行することでReplicatのパフォーマンスを大幅に向上させる機能である。
-- BATCHSQL の詳細設定例
BATCHSQL &
BATCHTRANSOPS 5000, & -- バッチあたりのトランザクション操作数
OPSPERBATCH 2000, & -- バッチあたりの操作数
BYTESPERARRAY 524288, & -- 配列バインドの最大バイト数
OPSPERARRAY 500 -- 配列バインドの最大操作数
10.4 パフォーマンスモニタリング指標
主要なモニタリング指標
| 指標 | 確認方法 | 推奨値 |
|---|---|---|
| Extract ラグ | LAG EXTRACT ext1 | < 5秒 |
| Replicat ラグ | LAG REPLICAT rep1 | < 10秒 |
| Trail ファイルバックログ | INFO EXTRACT ext1, DETAIL | 1-2ファイル以下 |
| Extract スループット | STATS EXTRACT ext1, TOTAL | 環境依存 |
| Replicat スループット | STATS REPLICAT rep1, TOTAL | 環境依存 |
| チェックポイント遅延 | INFO EXTRACT ext1, SHOWCH | 最小限 |
統計情報の詳細表示
-- Extract の統計(テーブル別)
GGSCI> STATS EXTRACT ext1, TABLE hr.employees
-- 期間指定の統計
GGSCI> STATS EXTRACT ext1, HOURLY
GGSCI> STATS EXTRACT ext1, DAILY
GGSCI> STATS EXTRACT ext1, TOTAL, REPORTRATE HR
-- Replicat の統計(操作タイプ別)
GGSCI> STATS REPLICAT rep1, TOTAL, TABLE hr.employees, REPORTDETAIL
11. Microservices Architecture の運用
11.1 デプロイメントの作成
MA環境のセットアップには oggca.sh(Oracle GoldenGate Configuration Assistant)を使用する。
# デプロイメントの作成(対話型)
$ cd $OGG_HOME
$ ./bin/oggca.sh
# サイレントモードでの作成
$ ./bin/oggca.sh \
-silent \
-responseFile /path/to/response.rsp
レスポンスファイルの例:
# oggca_response.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_oggca_response_schema_v21_1_0
CONFIGURATION_OPTION=ADD
DEPLOYMENT_NAME=oggdeploy1
ADMINISTRATOR_USER=oggadmin
ADMINISTRATOR_PASSWORD=SecurePass123#
SERVICEMANAGER_PORT=9100
OGG_SOFTWARE_HOME=/u01/app/ogg
OGG_DEPLOYMENT_HOME=/u01/ogg/deployments/oggdeploy1
HOST_NAME=ogg-host.example.com
CREATE_NEW_SERVICEMANAGER=true
REGISTER_SERVICEMANAGER_AS_A_SERVICE=true
INTEGRATE_METRICS_SERVER=true
OGG_SCHEMA=ogg_admin
11.2 Distribution Path の設定
MA では Data Pump の代わりに Distribution Server 上で Distribution Path を設定する。
# Distribution Path の作成(REST API)
curl -u oggadmin:password -X POST \
https://ogg-host:9102/services/v2/sources \
-H "Content-Type: application/json" \
-d '{
"name": "distpath1",
"source": {
"trailName": "lt",
"trailSubDirectoryMapping": {
"name": "oggdeploy1"
}
},
"target": {
"uri": "wss://target-ogg-host:9103/services/v2/targets?trail=rt",
"authMode": "oauth"
},
"status": "running"
}'
11.3 Performance Metrics Server の活用
Performance Metrics Server は Prometheus 互換のメトリクスエンドポイントを提供する。
# メトリクスの取得
curl -u oggadmin:password \
https://ogg-host:9104/services/v2/metrics
# Prometheus の scrape_config 設定例
scrape_configs:
- job_name: 'oracle-goldengate'
scheme: https
basic_auth:
username: oggadmin
password: SecurePass123#
tls_config:
insecure_skip_verify: true
static_configs:
- targets: ['ogg-host:9104']
主要なメトリクス:
| メトリクス | 説明 |
|---|---|
ogg_extract_lag_seconds | Extract のレプリケーションラグ(秒) |
ogg_replicat_lag_seconds | Replicat のレプリケーションラグ(秒) |
ogg_extract_bytes_processed | Extract の処理バイト数 |
ogg_replicat_operations_applied | Replicat の適用操作数 |
ogg_trail_bytes_written | Trail ファイルの書き込みバイト数 |
12. モニタリングと管理
12.1 GGSCI による日常運用
日次チェック項目
-- 1. 全プロセスの状態確認
GGSCI> INFO ALL
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXT1 00:00:02 00:00:01
EXTRACT RUNNING PUMP1 00:00:03 00:00:01
REPLICAT RUNNING REP1 00:00:05 00:00:02
-- 2. ラグの確認
GGSCI> LAG EXTRACT ext1
GGSCI> LAG REPLICAT rep1
-- 3. エラーの確認
GGSCI> VIEW REPORT ext1
GGSCI> VIEW REPORT rep1
-- 4. 統計情報の確認
GGSCI> STATS EXTRACT ext1, TOTAL, REPORTRATE HR
GGSCI> STATS REPLICAT rep1, TOTAL, REPORTRATE HR
-- 5. Trail ファイルのディスク使用量確認
GGSCI> INFO EXTTRAIL ./dirdat/lt, DETAIL
GGSCI> INFO EXTTRAIL ./dirdat/rt, DETAIL
トラブルシューティングコマンド
-- プロセスの詳細情報(チェックポイント含む)
GGSCI> INFO EXTRACT ext1, DETAIL
GGSCI> INFO EXTRACT ext1, SHOWCH
-- プロセスの現在位置
GGSCI> STATUS EXTRACT ext1
GGSCI> STATUS REPLICAT rep1
-- レポートファイルの表示(エラーログ含む)
GGSCI> VIEW REPORT ext1
GGSCI> VIEW REPORT rep1
-- 最新のN行を表示
GGSCI> VIEW REPORT rep1, LAST 100
12.2 アラートとモニタリング
OGG のログファイル構成
$OGG_HOME/
├── ggserr.log # 全体エラーログ(全プロセスの重要メッセージ)
├── dirrpt/
│ ├── EXT1_info.log # Extractプロセスのレポート
│ ├── PUMP1_info.log # Data Pumpのレポート
│ ├── REP1_info.log # Replicatのレポート
│ └── MGR_info.log # Managerのレポート
└── dirpcs/ # プロセスステータスファイル
外部監視スクリプトの例
#!/bin/bash
# ogg_monitor.sh - OGG モニタリングスクリプト
OGG_HOME=/u01/app/ogg
LAG_THRESHOLD_SEC=60
EMAIL_TO="dba-team@example.com"
# プロセス状態チェック
check_process_status() {
local status=$($OGG_HOME/ggsci << EOF
INFO ALL
EXIT
EOF
)
# ABENDEDまたはSTOPPEDプロセスの検出
echo "$status" | grep -E "ABENDED|STOPPED" | while read line; do
local process=$(echo "$line" | awk '{print $3}')
send_alert "OGG Process $process is not running: $line"
done
}
# ラグチェック
check_lag() {
local lag_output=$($OGG_HOME/ggsci << EOF
LAG EXTRACT ext1
LAG REPLICAT rep1
EXIT
EOF
)
echo "$lag_output" | grep -oP 'Lag: \K[0-9:]+' | while read lag; do
local hours=$(echo "$lag" | cut -d: -f1)
local minutes=$(echo "$lag" | cut -d: -f2)
local seconds=$(echo "$lag" | cut -d: -f3)
local total_seconds=$((hours*3600 + minutes*60 + seconds))
if [ $total_seconds -gt $LAG_THRESHOLD_SEC ]; then
send_alert "OGG lag exceeds threshold: ${lag} (threshold: ${LAG_THRESHOLD_SEC}s)"
fi
done
}
send_alert() {
local message="$1"
echo "$message" | mail -s "OGG Alert: $(hostname)" $EMAIL_TO
logger -t ogg_monitor "$message"
}
# メインループ
check_process_status
check_lag
13. セキュリティ
13.1 認証と認可
データベースレベルのセキュリティ
OGG用のデータベースユーザーには、最小権限の原則に基づいて必要な権限のみを付与する。
-- ソース側(Extract用)の最小権限セット
CREATE USER ogg_extract IDENTIFIED BY "StrongPassword1#";
-- 基本権限
GRANT CREATE SESSION TO ogg_extract;
GRANT ALTER SESSION TO ogg_extract;
GRANT SELECT ANY DICTIONARY TO ogg_extract;
GRANT SELECT ANY TABLE TO ogg_extract;
GRANT FLASHBACK ANY TABLE TO ogg_extract;
-- Integrated Extract 用の権限
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('ogg_extract', 'CAPTURE');
-- ターゲット側(Replicat用)の最小権限セット
CREATE USER ogg_replicat IDENTIFIED BY "StrongPassword2#";
GRANT CREATE SESSION TO ogg_replicat;
GRANT ALTER SESSION TO ogg_replicat;
GRANT SELECT ANY DICTIONARY TO ogg_replicat;
-- 対象テーブルへのDML権限(個別に付与が推奨)
GRANT INSERT, UPDATE, DELETE ON hr.employees TO ogg_replicat;
GRANT INSERT, UPDATE, DELETE ON hr.departments TO ogg_replicat;
-- Integrated Replicat 用の権限
EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('ogg_replicat', 'APPLY');
クレデンシャルストア
パスワードをパラメータファイルに平文で記述することを避けるため、クレデンシャルストアを使用する。
-- クレデンシャルストアの作成(AES-256暗号化)
GGSCI> ADD CREDENTIALSTORE
-- エントリの追加
GGSCI> ALTER CREDENTIALSTORE ADD USER ogg_extract@orcl_src &
PASSWORD StrongPassword1# ALIAS ogg_src DOMAIN OracleGoldenGate
-- エントリの更新(パスワードローテーション時)
GGSCI> ALTER CREDENTIALSTORE ALTER USER ogg_extract@orcl_src &
PASSWORD NewStrongPassword3# ALIAS ogg_src
-- エントリの削除
GGSCI> ALTER CREDENTIALSTORE DELETE USER ogg_extract@orcl_src ALIAS ogg_src
13.2 通信の暗号化
ネットワーク暗号化
OGG プロセス間の通信を暗号化する。
-- Data Pump パラメータでの暗号化設定
EXTRACT pump1
RMTHOST target-host, MGRPORT 7809, ENCRYPT AES256
-- OGGNetパラメータファイル(ogg.net)での設定
INCLUDE /u01/app/ogg/dirogg/ogg.net
-- ogg.net の内容
-- OGGNet::TLS::Required=TRUE
-- OGGNet::TLS::CertificateFile=/u01/app/ogg/ssl/ogg_cert.pem
-- OGGNet::TLS::PrivateKeyFile=/u01/app/ogg/ssl/ogg_key.pem
-- OGGNet::TLS::CAFile=/u01/app/ogg/ssl/ca_cert.pem
MA のTLS設定
Microservices Architecture では、全通信がHTTPS/WSSで暗号化される。
# 自己署名証明書の作成(テスト環境用)
$ keytool -genkey -alias oggma -keyalg RSA -keysize 2048 \
-keystore $OGG_HOME/ssl/keystore.jks \
-storepass changeit -keypass changeit \
-dname "CN=ogg-host.example.com,OU=DBA,O=Company,L=Tokyo,ST=Tokyo,C=JP" \
-validity 365
# 信頼ストアへの証明書インポート
$ keytool -export -alias oggma \
-keystore $OGG_HOME/ssl/keystore.jks \
-storepass changeit \
-file $OGG_HOME/ssl/ogg_cert.cer
$ keytool -import -alias oggma_target \
-keystore $OGG_HOME/ssl/truststore.jks \
-storepass changeit \
-file /path/to/target_ogg_cert.cer \
-noprompt
Trail ファイルの暗号化
-- Extract パラメータでTrail暗号化を有効化
EXTRACT ext1
ENCRYPTTRAIL AES256
EXTTRAIL ./dirdat/lt
TABLE hr.*;
-- Replicat側では自動的に復号される(同一のマスターキーが必要)
-- マスターキーの作成
GGSCI> CREATE MASTERKEY
GGSCI> INFO MASTERKEY
13.3 データマスキングとフィルタリング
セキュリティ要件に基づき、特定のカラムデータをマスキングしてレプリケーションすることができる。
-- Replicat パラメータでのデータマスキング例
MAP hr.employees, TARGET hr.employees, &
COLMAP (USEDEFAULTS, &
-- SSN(社会保障番号)をマスキング
ssn = @STREXT(ssn, 1, 3) || '-XX-XXXX', &
-- メールアドレスをマスキング
email = @STRCAT('user', @NUMSTR(employee_id), '@masked.com'), &
-- 給与を非表示(固定値で置換)
salary = 0);
-- 特定のカラムをレプリケーション対象から除外
MAP hr.employees, TARGET hr.employees, &
COLSEXCEPT (ssn, credit_card_number, bank_account);
14. トラブルシューティング
14.1 よくある問題と解決策
1. Extract が ABENDED(異常終了)する
症状: Extract プロセスが起動後すぐ、または稼働中に ABENDED 状態になる。
診断手順:
-- レポートファイルでエラー内容を確認
GGSCI> VIEW REPORT ext1
-- ggserr.log でエラー詳細を確認
$ tail -200 $OGG_HOME/ggserr.log
-- プロセスの詳細情報
GGSCI> INFO EXTRACT ext1, DETAIL
よくある原因と対処:
| エラー | 原因 | 対処 |
|---|---|---|
| OGG-00868: Archived log not found | アーカイブログが削除された | Extract のチェックポイントを前進させるか、RMANのアーカイブログ保持期間を延長 |
| OGG-01028: Insufficient privileges | 権限不足 | DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE を実行 |
| OGG-00664: OCI Error | Oracle クライアントの問題 | ORACLE_HOME、LD_LIBRARY_PATH を確認 |
| OGG-02091: Cannot find table definition | テーブル定義が見つからない | DEFGEN でテーブル定義ファイルを再生成 |
2. Replicat の適用遅延(ラグ増大)
診断手順:
-- ラグの確認
GGSCI> LAG REPLICAT rep1
-- 統計情報でボトルネックを特定
GGSCI> STATS REPLICAT rep1, TABLE *, REPORTDETAIL
-- チェックポイント情報
GGSCI> INFO REPLICAT rep1, SHOWCH
対処法:
- Parallel/Coordinated Replicat への移行
GROUPTRANSOPS、BATCHSQLパラメータの調整- 並列度(
MAP_PARALLELISM)の増加 - ターゲットDBのインデックス最適化(プライマリキーの確認)
- 大きなトランザクションの
SPLIT_TRANS_RECS設定
3. ネットワーク障害後のリカバリ
-- Data Pump の状態確認
GGSCI> INFO EXTRACT pump1, DETAIL
-- 接続が切れた場合、Data Pump は自動的にリトライする
-- Manager の AUTORESTART 設定を確認
GGSCI> VIEW PARAMS mgr
-- 手動でのリカバリが必要な場合
GGSCI> STOP EXTRACT pump1
GGSCI> START EXTRACT pump1
4. チェックポイントの問題
-- チェックポイント位置の確認
GGSCI> INFO EXTRACT ext1, SHOWCH
-- チェックポイントの手動変更(注意: データ損失・重複の可能性)
GGSCI> ALTER EXTRACT ext1, BEGIN 2024-03-15 10:00:00
GGSCI> ALTER REPLICAT rep1, EXTSEQNO 1, EXTRBA 0
-- 特定のTrailファイル位置からの再開
GGSCI> ALTER REPLICAT rep1, EXTSEQNO 5, EXTRBA 1234567
14.2 テーブル定義ファイル(DEF ファイル)
異種データベース間やスキーマが異なる環境では、テーブル定義ファイルが必要。
# DEF ファイルの生成
$ cd $OGG_HOME
$ ./defgen PARAMFILE dirprm/defgen_src.prm
-- defgen_src.prm
DEFSFILE ./dirdef/source_defs.def PURGE
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
TABLE hr.employees;
TABLE hr.departments;
TABLE hr.job_history;
-- Replicat パラメータでのDEFファイル指定
REPLICAT rep1
USERIDALIAS ogg_tgt DOMAIN OracleGoldenGate
SOURCEDEFS ./dirdef/source_defs.def
MAP hr.employees, TARGET hr.employees;
14.3 データ整合性の検証
OGG には veridata というデータ比較ツールが提供されている(別途ライセンス)。簡易的な検証には以下のアプローチを使用する。
-- ソース側のレコード数確認
SELECT table_name, num_rows
FROM all_tables
WHERE owner = 'HR'
ORDER BY table_name;
-- ターゲット側と比較
-- チェックサムベースの比較
SELECT ORA_HASH(
DBMS_UTILITY.GET_HASH_VALUE(
employee_id || last_name || salary, 0, 1073741824
)
) AS checksum
FROM hr.employees;
15. ベストプラクティスと運用ガイドライン
15.1 設計・構築フェーズ
テーブル設計の推奨事項
-
プライマリキーの設定: すべてのレプリケーション対象テーブルにプライマリキーまたはユニーク制約を設定する。キーがないテーブルでは全カラム比較が必要になり、パフォーマンスが大幅に低下する
-
Supplemental Logging: 必要最小限の supplemental logging を設定する
-- テーブルレベルで必要なカラムのみ
ALTER TABLE hr.employees ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
ALTER TABLE hr.employees ADD SUPPLEMENTAL LOG DATA (UNIQUE INDEX) COLUMNS;
-- または、全カラム(シンプルだがログ量が増大)
ALTER TABLE hr.employees ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
-
LOB カラム: Large Object(LOB)カラムのレプリケーションはパフォーマンスに影響する。可能であれば LOB の使用を最小化するか、別テーブルに分離する
-
トリガーの管理: ターゲット側のトリガーは、Replicat による適用時に意図しない副作用を引き起こす可能性がある
-- Replicat パラメータでトリガー無効化
DBOPTIONS SUPPRESSTRIGGERS
ネットワーク設計
- 専用ネットワーク: 可能であれば、OGGレプリケーション用の専用ネットワーク回線を確保する
- 帯域幅の見積もり: ピーク時のトランザクション量から必要な帯域幅を算出する
- 目安: 1GB/時間のRedo生成量に対し、約10-20 Mbpsの帯域幅が必要
- 圧縮の活用: WAN環境では必ず
COMPRESSオプションを使用する
15.2 運用フェーズ
監視項目と推奨閾値
| 監視項目 | 警告閾値 | 重大閾値 | 確認頻度 |
|---|---|---|---|
| Extract ラグ | 30秒 | 60秒 | 1分間隔 |
| Replicat ラグ | 60秒 | 300秒 | 1分間隔 |
| Trail ファイルバックログ | 5ファイル | 10ファイル | 5分間隔 |
| ディスク使用率(dirdat) | 70% | 85% | 5分間隔 |
| プロセス状態 | STOPPED | ABENDED | 1分間隔 |
| ggserr.log エラー | WARNING | ERROR/CRITICAL | リアルタイム |
バックアップとリカバリ
-
OGG環境のバックアップ対象:
- パラメータファイル(
dirprm/*.prm) - クレデンシャルストア(
dircrd/) - チェックポイントファイル(
dirchk/) - テーブル定義ファイル(
dirdef/) - マスターキーウォレット
- パラメータファイル(
-
Trail ファイル: バックアップ不要(再生成可能、ただし保持期間に注意)
-
リカバリ手順のテスト: 定期的にリカバリ手順をテストし、手順書を最新に保つ
パッチ適用とアップグレード
-
ローリングアップグレード: OGG はローリングアップグレードをサポートする。以下の順序で適用する:
- ターゲット側 OGG のアップグレード(Replicat を停止→アップグレード→再開)
- ソース側 OGG のアップグレード(Extract/Pump を停止→アップグレード→再開)
-
互換性マトリクス: アップグレード前に Oracle のサポートマトリクスを確認し、OGG バージョンとデータベースバージョンの互換性を確認する
15.3 クラウド環境でのOGG
Oracle Cloud Infrastructure(OCI)での利用
Oracle GoldenGate は OCI 上でマネージドサービスとして提供されている(OCI GoldenGate)。
OCI GoldenGate の特徴:
- フルマネージド型サービス(インフラ管理不要)
- 自動パッチ適用とバックアップ
- Oracle Autonomous Database、Exadata との統合
- REST APIによる完全自動化
- 従量課金モデル
OCI GoldenGate の構成例:
[オンプレミス Oracle DB]
└── OGG Extract (オンプレミス)
└── ネットワーク(VPN/FastConnect)
└── [OCI GoldenGate Service]
└── Replicat
└── [Autonomous Database]
ハイブリッドクラウド構成
-- オンプレミス → クラウド のマイグレーション構成
[オンプレミス] [OCI]
Oracle DB 19c ──Extract──> OCI GoldenGate
│ │
Data Pump ──────────> Receiver Server
│
Replicat
│
Autonomous DB
15.4 OGG のライセンスと製品エディション
| エディション | 特徴 |
|---|---|
| Oracle GoldenGate | フル機能版。Oracle Database Enterprise Edition に含まれるオプション |
| OGG for Non-Oracle | 非Oracle データベースとの連携用 |
| OGG for Big Data | Kafka、HDFS、Spark 等のBigData プラットフォーム向け |
| OGG Free | 無償版。機能制限あり(最大20GB/日のデータ処理) |
| OCI GoldenGate | Oracle Cloud 上のマネージドサービス |
16. データ変換とマッピング機能
16.1 カラムマッピング(COLMAP)
OGGは柔軟なデータ変換機能を提供する。
-- 基本的なカラムマッピング
MAP src.orders, TARGET tgt.fact_orders, &
COLMAP (USEDEFAULTS, &
-- カラム名の変更
order_key = order_id, &
-- 定数値の設定
source_system = 'PROD_DB', &
-- 日付変換
order_date_key = @DATE('YYYY-MM-DD', 'YYYYMMDD', order_date), &
-- 数式
total_with_tax = @COMPUTE(total_amount * 1.10), &
-- 文字列操作
full_name = @STRCAT(first_name, ' ', last_name), &
-- 条件分岐
region_name = @IF(@STREQ(region_code, 'JP'), 'Japan', &
@IF(@STREQ(region_code, 'US'), 'United States', 'Other')), &
-- 現在のタイムスタンプ
etl_load_time = @DATENOW());
16.2 組み込み関数
OGGには豊富な組み込み関数がある。
文字列関数
| 関数 | 説明 | 例 |
|---|---|---|
@STRCAT(s1, s2, ...) | 文字列結合 | @STRCAT(first, ' ', last) |
@STREXT(s, start, end) | 部分文字列抽出 | @STREXT(phone, 1, 3) |
@STRLEN(s) | 文字列長 | @STRLEN(name) |
@STRUP(s) | 大文字変換 | @STRUP(name) |
@STRLOW(s) | 小文字変換 | @STRLOW(email) |
@STREQ(s1, s2) | 文字列比較 | @STREQ(status, 'A') |
@STRTRIM(s) | 前後の空白除去 | @STRTRIM(name) |
@STRFIND(s, sub) | 部分文字列検索 | @STRFIND(url, 'https') |
日付関数
| 関数 | 説明 | 例 |
|---|---|---|
@DATE(fmt1, fmt2, val) | 日付フォーマット変換 | @DATE('YYYY-MM-DD','YYYYMMDD',dt) |
@DATENOW() | 現在日時 | @DATENOW() |
@DATEDIFF(unit, d1, d2) | 日付差 | @DATEDIFF('DD', start, end) |
@DATEADD(unit, amt, dt) | 日付加算 | @DATEADD('HH', 9, utc_time) |
数値・制御関数
| 関数 | 説明 | 例 |
|---|---|---|
@COMPUTE(expr) | 数式計算 | @COMPUTE(qty * price) |
@IF(cond, t, f) | 条件分岐 | @IF(amt>0,'CR','DR') |
@COLTEST(col, test) | NULL判定等 | @COLTEST(col, MISSING) |
@GETENV(info) | 環境情報取得 | @GETENV('TRANSACTION','CSN') |
@NUMSTR(n) | 数値→文字列 | @NUMSTR(employee_id) |
@STRNUM(s) | 文字列→数値 | @STRNUM(amount_str) |
@TOKEN(name) | ユーザートークン取得 | @TOKEN('TKN-HOST') |
16.3 フィルタリング
-- WHERE句によるフィルタリング
MAP hr.employees, TARGET hr.employees, &
WHERE (department_id = 90);
-- FILTER関数によるフィルタリング(より高度)
MAP hr.employees, TARGET hr.employees, &
FILTER (@STREQ(status, 'ACTIVE') AND @COMPUTE(salary > 50000));
-- 操作タイプによるフィルタリング
-- INSERT のみレプリケーション
MAP audit.events, TARGET audit.events, &
FILTER (@GETENV('GGHEADER', 'OPTYPE') = 'INSERT');
17. 高度な構成パターン
17.1 初期データロード
既存データの初期同期には以下の方法がある。
OGG Initial Load(OGG自身による初期ロード)
-- ソース側: Initial Load Extract の設定
GGSCI> ADD EXTRACT initext, SOURCEISTABLE
-- パラメータファイル
-- initext.prm
EXTRACT initext
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
RMTHOST target-host, MGRPORT 7809
RMTFILE ./dirdat/ri
TABLE hr.employees;
TABLE hr.departments;
-- ターゲット側: Initial Load Replicat の設定
GGSCI> ADD REPLICAT initrep, SPECIALRUN
-- パラメータファイル
-- initrep.prm
REPLICAT initrep
USERIDALIAS ogg_tgt DOMAIN OracleGoldenGate
SOURCEDEFS ./dirdef/source_defs.def
DISCARDFILE ./dirrpt/initrep.dsc, PURGE
MAP hr.employees, TARGET hr.employees;
MAP hr.departments, TARGET hr.departments;
Oracle Data Pump + OGG の併用(推奨)
大量データの初期ロードでは、Oracle Data Pump(expdp/impdp)とOGGを組み合わせる方法が最も効率的。
手順:
1. Extract を起動してRedo変更のキャプチャを開始(Replicat はまだ起動しない)
2. ソースDBでData Pump Export(SCN指定)を実行
3. ターゲットDBでData Pump Import を実行
4. Import完了後、Replicat をExport時のSCNから起動
-- Step 1: Extract 起動前に現在のSCNを記録
SELECT CURRENT_SCN FROM V$DATABASE; -- 例: 1234567
-- Step 2: Extract を起動
GGSCI> START EXTRACT ext1
-- Step 3: Data Pump Export(SCN指定)
$ expdp ogg_admin/password@orcl_src \
SCHEMAS=hr \
DIRECTORY=dp_dir \
DUMPFILE=hr_export.dmp \
FLASHBACK_SCN=1234567
-- Step 4: Data Pump Import
$ impdp ogg_admin/password@orcl_tgt \
SCHEMAS=hr \
DIRECTORY=dp_dir \
DUMPFILE=hr_export.dmp \
TABLE_EXISTS_ACTION=REPLACE
-- Step 5: Replicat を SCN 1234567 以降から起動
GGSCI> ADD REPLICAT rep1, PARALLEL, EXTTRAIL ./dirdat/rt, BEGIN 2024-03-15 10:00:00
-- または SCN ベースで
GGSCI> START REPLICAT rep1, AFTERCSN 1234567
17.2 LOB データのレプリケーション
Large Object(CLOB、BLOB、NCLOB)のレプリケーションには追加の設定が必要。
-- Extract パラメータ
EXTRACT ext1
USERIDALIAS ogg_src DOMAIN OracleGoldenGate
-- LOBの取得設定
FETCHOPTIONS FETCHPKUPDATECOLS
-- インラインLOBの閾値(バイト)
-- これより小さいLOBはTrailに直接格納
DBOPTIONS ALLOWLOBDATATRUNCATE
EXTTRAIL ./dirdat/lt
TABLE hr.employees;
TABLE hr.documents; -- BLOB/CLOBカラムを含むテーブル
17.3 Integrated Diagnostics Pack(IDP)
OGG には組み込みの診断ツールが含まれる。
# 診断バンドルの生成
$ cd $OGG_HOME
$ ./diag/ogg_diag_collector.sh
# 生成される診断情報:
# - 全プロセスのパラメータファイル
# - レポートファイル
# - ggserr.log
# - チェックポイント情報
# - Trail ファイルのヘッダ情報
# - OS レベルの情報(CPU、メモリ、ディスク)
18. まとめ
Oracle GoldenGate は、リアルタイムデータレプリケーションのための業界をリードするソリューションである。本ガイドで解説した内容を以下にまとめる。
アーキテクチャの要点
- ログベースCDC: トランザクションログからの変更データキャプチャにより、ソースDBへの影響を最小化
- モジュラー設計: Extract → Trail → Data Pump → Trail → Replicat の多段構成により、障害耐性と柔軟性を確保
- Classic/MA の選択: 新規構築では Microservices Architecture を推奨。REST API、WebUI、セキュリティ機能が充実
- 多様なReplicatモード: ワークロードに応じて Classic、Coordinated、Integrated、Parallel Replicat を選択
運用のポイント
- プライマリキー必須: レプリケーション対象テーブルには必ずプライマリキーを設定
- ラグ監視: Extract/Replicat のラグを常時監視し、閾値を設定してアラート
- クレデンシャルストア: パスワードの平文保存を避け、暗号化されたクレデンシャルストアを使用
- BATCHSQL/Parallel Replicat: 大量トランザクション環境では適用パフォーマンスの最適化が重要
ユースケース別推奨構成
| ユースケース | 推奨構成 |
|---|---|
| DR/HA | 単方向 + Integrated Extract/Replicat |
| マイグレーション | Data Pump初期ロード + OGG差分同期 |
| Active-Active | 双方向 + AutoCDR/CDR |
| リアルタイムDWH | 単方向 + BATCHSQL + Parallel Replicat |
| イベント配信 | OGG for Big Data + Kafka Handler |
| クラウド移行 | OCI GoldenGate マネージドサービス |
Oracle GoldenGate の適切な設計・構築・運用により、企業のデータ統合基盤を信頼性高く実現できる。