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

update:

第1回「Oracle GoldenGate のアーキテクチャとセットアップ」

著者:吉田 宗弘

1. Introduction

1.1 はじめに

弊社でデータベースのお仕事をする際に、Oracle GoldenGate (以下 GoldenGate)を利用することが多くなっています。
GoldenGate についてはOracle 社自身も非常に力を入れており、2月に日本オラクルで行われたExadata新機能の半日研修に参加したところ、その中の1コマはGoldenGate とOracle Data Integrator を使用した高速データ連携に関するセッションでした。
GoldenGate は非常にシンプルですが、使い方次第で様々なシーンで利用できる可能性を持った製品だとあらためて感じました。
そこで、「GoldenGate とはどんな製品なのか?」「GoldenGate でどんな事ができるのか?」「具体的な使い方は?」といった内容について、数回に分けて解説していきたいと思います。


本連載が初めてGoldenGate を使用する方の一助になればと考えています。
今回は第1回として、GoldenGate のアーキテクチャとセットアップについて解説します。また、本連載の最後に記載するOTN Japan 等のサイトでは、ホワイト・ペーパー等でGoldenGate のチューニングや新機能詳細等、本連載では触れていない情報も多数公開されていますので、そちらも併せてご確認下さい。

1.2 GoldenGate とは?

GoldenGateは元々GoldenGate社が開発していたデータ・レプリケーション製品で2009年にOracle 社が買収しました。
Oracle 社もAdvanced Replication やDataGuard と言ったレプリケーションに関する製品を持っていますが、データベースと緊密に連携しているため以下のような問題があります。

  • 同期レプリケーションの場合、更新性能の劣化が避けられない。
  • 非同期レプリケーションの場合、データ同期のタイムラグが発生する。
  • 連携するデータベース に様々な条件がある。 (Version, OS, 文字コード…)
  • Sourceデータベース とTargetデータベースでテーブルの構成を一致させる必要がある。
  • SQL Server, DB2, MySQL といったデータベースとは連携できない。

GoldenGate はこれらの問題を解決するために利用できる製品で、以下のような特徴があります。

  • Online Redo Log からコミット済みの変更のみを取得するため、データベースに与える負荷が非常に低く、ほぼリアルタイムにTargetDB へのデータ伝播が可能。
  • Source DB に対する変更内容を、一般ファイルに変換してTarget に転送する事
  • によりデータベースのVersion, 文字コード, OS, エンディアン等が異なってもレプ リケート可能。更にOracle Database 以外にも、SQL Server, DB2, MySQL 等の データベースとも連携可能。
  • データベース全体ではなく、表, 列等の必要な部分のみの柔軟な連携が可能。
  • 片方向, 双方向, マルチ・マスタ等の構成を、容易に実現可能。
  • レプリケートの際にデータ変換が可能なため、Source DB と異なる構成のテーブル に対してもレプリケート可能。
  • データ連携のために、Source DB に対しての変更が非常に少ない。 Supplemental Logging の有効化とGoldenGate が使用するユーザの作成のみ。そのため、既存の環境に後から容易に追加する事が可能。
  • DML だけでなく、DDL も伝播可能。
  • 一旦exp/imp, expdp/impdp, SQL*Loader 等でデータ同期を行った状態から、 GoldenGate によるデータ同期を開始するのが基本だが、全てをGoldenGate だけで行わせる事も可能。

1.3 GoldenGate のアーキテクチャ

それでは、GoldenGate のアーキテクチャを見ていきます。

GoldenGate の基本アーキテクチャ

GoldenGateは、以下の5つのプロセスから構成される非常にシンプルな製品です。

  • 抽出プロセス:差分ログ (Oracle の場合はOnline Redo Log) からデータベースに対する更新を抽出し、トレイル・ファイルと言う汎用的なフォーマットに変換する。
  • 転送プロセス:生成されたトレイル・ファイルをTarget となるマシンに転送する。
  • 受信プロセス:転送プロセスによって送信されるトレイル・ファイルを受信する。
  • 適用プロセス:受信したトレイル・ファイルをTarget DB に適用する。
  • 管理プロセス:上記のプロセスを管理する。

上記構成の他に、データベースサーバ以外のサーバにGoldenGateを切出して配置する事も可能。

非常にシンプルな製品ですが、目的に応じて以下のように多様な環境を構築できます。

GoldenGate でサポートされる構成

GoldenGate の基本動作

GoldenGateは上図が示すように、データ連携を行うプロセスがデフォルト1秒間隔で動作するように設計されているため、非常に高速にデータをTarget DB に伝播させる事が可能となっています。また、Online Redo Log からデータベースに対する変更内容を取得するため、既存環境に与える負荷は非常に低く抑える事ができます。更に常に最新データを小さな処理単位で反映させるため、急激に負荷が上昇する事もありません。

2.環境構築

2.1 GoldenGate 動作環境

今回はデータベースのVersion Upを想定して、VMware上に以下の環境を準備しました。

準備した環境

 

Source DB

Target DB

OS

Cent OS 5.9 x86-64

メモリ

2GB

マシン名

sample01

sample02

Database Version

Oracle 10.2.0.4

Oracle 11.2.0.4

ORACLE_SID

olddb

newdb

Log Mode

Archive Log mode

文字コード

AL32UTF8

サンプルDB

rdbms/admin/utlsampl.sql
で作成

Source DB のscott スキーマをexp/imp で移行

2.2 GoldenGate のInstall

それでは実際にGoldenGate をInstall してみましょう。
先ず、Oracle のE-Delivery (https://edelivery.oracle.com/) から該当環境用のGoldenGate をダウンロードします。
注意:Oracle Database 9i のDB に接続する場合には、以下のパッケージをダウンロードして下さい。

・Oracle GoldenGate on Oracle v11.1.1.1.0 Media Pack
本パッケージ内に、Oracle 9i 用, Oracle 10g 用, Oracle 11g 用のGoldenGate がそれぞれ同梱されています。

今回はOracle 10g とOracle 11g の間でデータ連携を行うので、以下のGoldenGateをダウンロードしました。
・Oracle GoldenGate on Oracle v11.2.1 Media Pack for Linux x86-64
本パッケージ内に、Oracle 10g 用, Oracle 11g 用のGoldenGate が同梱されています。

ダウンロードした以下のファイルを、FTP 等でそれぞれの環境に転送します。
Source DB 用 : V32400-01.zip
Target DB 用 : V34339-01.zip


転送したパッケージをOracle 所有者で解凍します。

Source DB 側



Target DB 側

パッケージの解凍が済んだら、GoldenGate が使用する作業用ディレクトリを作成します。GoldenGateでは、全ての操作をGGSCI (Oracle GoldenGate Software Command Interface) を通して実行します。
GoldenGate を解凍したディレクトリに移動して、GGSCI からCreate subdirs コマンドを実行します。

両方の環境で実施

GoldenGate のInstall は以上で完了です。
最後にCreate subdirsコマンドで作成されたディレクトリについて説明します。

ディレクトリ名

概要

dirprm

Oracle GoldenGate のプロセスのグループまたはユーティリティのランタイム・パラメータを保存するために Oracle GoldenGate によって作成される、Oracle GoldenGate パラメータ・ファイルのデフォルトの場所。 外部 ASCII 形式で書き込まれます。

dirrpt

処理実行に関連する統計情報をレポートするために Extract、Replicat および Manager の各プロセスによって作成されるプロセス・レポート・ファイルのデフォルトの場所です。外部 ASCII 形式で書き込まれます。

dirchk

Extract プロセスおよび Replicat プロセスによって作成されるチェックポイント・ファイルを格納します。これらのファイルには、データの正確さとフォールト・トレランスを確保するために現在の読み書き位置が保存されます。 Oracle GoldenGate の内部フォーマットで書き込まれます。

dirpcs

ステータス・ファイルのデフォルトの場所です。ファイル名の形式は、group.extension です。group はグループの名前で、extensionは、pce  (Extract)、pcr  (Replicat) または pcm  (Manager) のいずれかです。

dirsql

Oracle GoldenGate をサポートするトレーニング・スクリプトおよびユーザが作成した SQL スクリプトの格納

dirdef

異機種間の同期化環境で使用されるソース・データおよびターゲット・データの定義を保存するために DEFGEN ユーティリティによって作成されるデータ定義ファイルのデフォルトの場所です。外部 ASCII で書き込まれます。ファイル名の形式は、DEFGEN パラメータ・ファイルで指定されるユーザ定義の名前です。

dirdat

Extractプロセスによって作成される Oracle GoldenGate の証跡ファイルと抽出ファイルのデフォルトの場所。抽出されたデータをReplicat プロセスや他のアプリケーション、ユーティリティでさらに処理するために格納します。 Oracle GoldenGate の内部フォーマットで書き込まれます。

dirtmp

一時ファイルの配置場所。割当てメモリサイズを超えるトランザクション実行時に一時的に作成されるファイルが配置される。

dirout

このディレクトリは利用されていません。


2.3 GoldenGate 用ユーザの作成

GoldenGate の各プロセスが接続するためのユーザを作成します。
ここでは操作を簡略化するために、DBA ロールを付与していますが、実際に必要となる権限については、GoldenGate インストレーションおよびセットアップガイドの4.6 「Oracle GoldenGate のデータベース・ユーザーの割当て」を参照して下さい。

両方の環境で実施



2.4 最小Supplemental Logging の有効化

両方の環境でSQL*Plus からDB に接続して、最小Supplemental Logging を有効化します。

両方の環境で実施



2.5 表レベルSupplemental Logging の有効化

最小Supplemental Logging を有効化したら、データ連携を行う表レベルでSupplemental Logging を有効化します。
今回は、scott スキーマの全オブジェクトをデータ連携の対象としてSupplemental Logging を有効化します。

両方の環境で実施

bonus 表, salgrade 表にはPrimary Keyが無いため警告が発生しますが、全ての表に対してSupplemental Logging が有効化されました。
※ Primary Key が存在しないテーブルは、重複レコードが存在する可能性があるため、Target DB へのデータ伝播が期待通りに行われない可能性があるので注意して下さい。

これで、GoldenGate を使用してデータ連携を行うための、データベース設定が完了しました。

第2回では、実際にGoldenGate を使用してレプリケーションを行う手順について具体的に解説します。