ExadataでのOracle GoldenGate: Oracle 11gR2からOracle 11gR2へのレプリケーション

概要

    目的

    このOracle By Example(OBE)チュートリアルでは、Oracle GoldenGate(OGG)を使用して、2つの異種データベース間(ここではLinux Oracle 11gR2データベースからExadata 11gR2データベース)で同期を維持する方法について説明します。

    このチュートリアルで学習する内容は、次のとおりです。

    • Oracle GoldenGateプロセスの構成に合わせた環境の準備
    • データベース操作の変更取得の構成および開始
    • データベース操作の変更配信の構成および開始

    所要時間

    約2時間

    はじめに

    ExadataでのOracle GoldenGate: Oracle 11gR2からOracle 11gR2へのレプリケーション

    Oracle GoldenGateでは、トランザクション・ログを読み取り、1つまたは複数のターゲット・データベースに変更を書き込むことで、異種データベースのレプリケーションを非常に高速に実行します。 一般的な環境では、次の5つのプロセスを使用します。

    Manager:
    ソース・ホスト上に1つのManagerが配置され、ターゲット・ホストには別のMangerが配置されます。 Managerはソース・インスタンスとターゲット・インスタンス上でその他のプロセスを開始および停止します。 ExtractまたはReplicatがいったん実行中になると、Managerがトラフィックを送信する必要はなくなります。
    Initial Load:
    オプション。 ターゲット表を1回移入するために使用します。 ソース表から直接読み取ることも、ASCIIファイルから読み取ることもできます。 このOBEではInitial Loadは使用しません。 使用法については、その他のOBEを参照してください。
    Extract:
    トランザクション・データを証跡ファイルに取得するためにソース上で実行します。 Extractには、Classic(このOBEで使用)とIntegratedという2つのバージョンがあります。
    Data Pump:
    オプションですが、強くお勧めします。 Data Pumpは、IPネットワーク経由でソース・インスタンスからターゲット・インスタンスに証跡ファイルを送信します。 技術的には、Data PumpはセカンダリのExtractです。
    Replicat:
    ターゲット・データベースにデータを提供します。 通常、Replicatはターゲットで実行されます。 末尾の"e"がないのはスペルミスではありません(長い話です)。

    Linux OracleからExadataへの構成(一方向)

    この図は、プライマリのExtractプロセスを使用して、ターゲットでリモート証跡を作成する構成を示しています。 Replicatプロセスによって、リモート証跡の変更がターゲットのRACデータベースが適用されます。 ソースのhost01はLinuxである必要はなく、64ビットである必要もありません。

    環境の概要は次のとおりです。

    ホスト名 画面の色 OS ハードウェア データベース SID OGGのソース/ターゲット プライマリ・コンソール
    host01 Linux 64ビット 単一CPUのPC Oracle 11gR2 orcl ソース 32ビットおよび64ビット
    qr01db02(Node02) Linux64ビット Exadata DBノード Oracle 11gR2 RAC dbm2 ターゲット GGSCI
    qr01db01(Node01) Linux 64ビット Exadata DBノード Oracle 11gR2 RAC dbm1 ターゲット SQL*Plus

    前提条件

    このOBEの前提条件は次のとおりです。

    • Initial Loadや統計情報の表示などの"通常"のタスクについては、OracleからOracleへのOracle GoldenGateの基本OBEを参照すること。 このOBEでは、Exadataに固有の観点についてのみ説明します。 詳しくは、末尾の関連情報セクションを参照してください。
    • こちらのホワイト・ペーパー、特にMy Oracle Support(MOS、参照にはアカウントが必要)Note 1054431.1のセクションを参照していること。
    • ソース・ホストのOracle 11gR2データベースにサンプル・スキーマがインストールされており、実行中であること。
    • 64ビットLinux向けOracle GoldenGateのzipディストリビューションが、ソースおよびターゲットの/home/user/ディレクトリに配置されていること。 このファイルはOracle Software Delivery Cloudからダウンロードできます。
    • Exadataクラスタ・サービスがインストールされており、実行中であること。

    host01とhost02の2つのホストがあり、各ホストでOS、GGSCI、およびSQLの3つの環境プロンプトを使用します。 入力個所が6つあるため、 どのコマンドをどの場所に入力するのかに、特に注意してください。 誤ったコンテキストでの誤ったコマンドの使用が、もっともよくあるエラーです。

    タスクの概要

    環境の準備

    このOBEを実行するには、ソース・システムとターゲット・システムの両方にGoldenGateアプリケーションをインストールする必要があります。 インストールには、サンプル・データベースと、初期データおよび後続の更新処理を生成するスクリプトが含まれます。 ソース表とターゲット表は初期データと一緒に作成され、ロードされます。 また、GoldenGateのManagerプロセスが起動され、その他のプロセスを構成および開始できるようになります。 最後に、ソース定義が生成され、ターゲット・システムに送信されます。

    変更取得(Extract)の構成

    監査の対象となる表に対してはExtractプロセスが構成され、変更データがTMF監査証跡から直接取得されて、GoldenGateのローカル証跡ファイルと呼ばれるデータ・キューに変更が格納されます。

    変更配信(Replicat)の構成

    表に対するデータの初期ロードが完了し、Extractプロセスがすべての処理を取得し始めたら、Replicatプロセスを構成して、取得した処理をターゲット・データベースに配信します。

    表記規則

    指示と画面のテキストの色とフォントは、次のように解釈します。

    Some_Command
    コマンドまたは値として入力します。 例:
    ./ggsciと入力して、コマンドライン・インタプリタを開始します。
    Some_Prompt
    システムがプロンプトまたは応答としてこれに対応します。 例:
    ウェルカム・スプラッシュ・バナーの後、GGSCI (host01) 1>プロンプトでコマンドを入力できます。
    Some_Button
    画面に表示されるこのボタンをクリックします。 例:
    必要なバージョンを選択したら、「Continue」をクリックしてダウンロードを開始します。
    Some_Variable
    実際の値に置き換える変数。 例:
    プロンプトで、userid/passwordを入力します。
    Some_Filename
    ファイル名、パス、またはフォルダ/ディレクトリ。 例:
    /etcディレクトリのhostsファイルを編集します。
    Some_Code
    キーワードまたはコード要素。 例:
    初期ロードの後で、パラメータHandleCollisionsNoHandleCollisionsに変更します。

    ファイルとプロセスのネーミング規則

    ファイルとプロセスのネーミング規則が役立つことがあります。 次に、このOBEで使用している規則の例を示します。
      pxxxxhh.ext
    ここで、それぞれの変数は次のような意味を持ちます

    p=process=
    e(xtract)、p(ump)、r(eplicat)、i(nitial)、d(efgen)、s(tartup)。
    xxxx=project=
    共通のプロジェクトxxxxに関連するすべてのファイル。たとえば、hr、sales、engr、testなどがあります。
    hh=host-to-host=
    ソースとターゲットのホスト名で示され、a=host01およびb=host02の場合、aa、ab、ba、bb。 後で説明しますが、一部のファイル名には数字を含めることができないため、数字は使用しないことをお勧めします。
    ext=extension=
    prm=parameter(dirprm/に保存)、dsc=discard、rpt=report(dirrpt/に保存)、def=definition(dirdef/に保存)、oby=obey(インストール・ディレクトリに保存)、sql=SQL(dirsql/に保存)。

1. 環境の準備

    目的

    ここでの目的は次のとおりです。

    • オペレーティング・システム(OS)の環境変数を.profileまたは.bash_profileなどに定義する。
    • アプリケーションのVIPアドレスを構成する。
    • 後でsqlplus接続を使用できるようにするため、tnspingのテストを行う。
    • OGG管理ユーザーを作成し、データベース・パラメータを変更することで、Oracle Database 11gR2を準備する。

    ユーザーが入力するコマンドは、青の等幅フォントで示されており、 システムの応答は黒の等幅フォントで示されています。

    1.1 OS環境変数の設定

      ここでは、環境変数用の.profileと、ホスト・エイリアス用の/etc/hostsファイルの構成を行います。 この設定は、3つのホスト(ソース・ノードと2つのターゲット・ノード)すべてで実行します。 既存プロファイルにはすでに行が含まれているかもしれませんが、このステップでは追加する行に焦点を合わせて説明します。

      好みのエディタを使用し、ターゲット・ホスト・ノード1にあるプロファイルの初期状態を確認します。 変数ORACLE_BASE、ORACLE_HOME、OGG_HOMELD_LIBRARY_PATHを追加します。 その他の行はそのままにします。

      Exadata - ノード1(ターゲット)
      [oracle@qr01db01 ~]$ vi .bash_profile 
      
      1   # .bash_profile                                              
      2                                                                
      3   # Get the aliases and functions                              
      4   if [ -f ~/.bashrc ]; then                                    
      5           . ~/.bashrc                                          
      6   fi                                                           
      7                                                                
      8   # User specific environment and startup programs             
      9                                                                
      10  PATH=$PATH:$HOME/bin                                         
      11                                                               
      12  export PATH                                                  
      13  export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1   
      14  export ORACLE_SID=dbm1                                       
      15  ORAENV_ASK=NO;. /usr/local/bin/oraenv > /dev/null 2<&1       
      16  alias gogrid='export ORACLE_HOME=/u01/app/11.2.0/grid;export 
          ORACLE_SID=+ASM1;. /usr/local/bin/oraenv > /dev/null 2<&1;env
          |grep ORA|grep -v BASE'                                      
      17  alias godb='export ORACLE_HOME=/u01/app/oracle/product/11.2.0
          /dbhome_1;export ORACLE_SID=dbm1;. /usr/local/bin/oraenv > /d
          ev/null 2<&1;env|grep ORA|grep -v BASE'                      
      
      [oracle@qr01db01 ~]$ vi .bash_profile  
      
      1   # .bash_profile                                              
      2                                                                
      3   # Get the aliases and functions                              
      4   if [ -f ~/.bashrc ]; then                                    
      5           . ~/.bashrc                                          
      6   fi                                                           
      7                                                                
      8   # User specific environment and startup programs             
      9                                                                
      10  PATH=$PATH:$HOME/bin                                         
      11                                                               
      12  export PATH                                                  
      13  export ORACLE_BASE=/u01/app/oracle                           
      14  export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1      
      15  export OGG_HOME=$ORACLE_BASE/ogg                             
      16  export LD_LIBRARY_PATH=$ORACLE_HOME/lib                      
      17  export ORACLE_SID=dbm1                                       
      18  ORAENV_ASK=NO;. /usr/local/bin/oraenv > /dev/null 2<&1       
      19  alias gogrid='export ORACLE_HOME=/u01/app/11.2.0/grid;export 
          ORACLE_SID=+ASM1;. /usr/local/bin/oraenv > /dev/null 2<&1;env
          |grep ORA|grep -v BASE'                                      
      20  alias godb='export ORACLE_HOME=/u01/app/oracle/product/11.2.0
          /dbhome_1;export ORACLE_SID=dbm1;. /usr/local/bin/oraenv > /d
          ev/null 2<&1;env|grep ORA|grep -v BASE'                      
      
      [oracle@qr01db02 ~]$
                                                                                      
      

      alias gogridalias godbは別のデモのために追加されたものであり、デフォルトのプロファイルには含まれていません。 これらの変数は、Grid InfrastructureとDB環境間の切替えを容易にします。 それぞれのエイリアスは数行にわたっています。 これらの行に余分な改行を挿入しないよう注意してください。

      rootユーザーに切り替え、/etc/hostsファイルを編集してhost01用のエイリアスを追加します。 使用する環境に合ったIPアドレスを使用します。

      Exadata - ノード1(ターゲット)
      [oracle@qr01db02 ~]$ su - root 
      Password: 
      [root@qr01db02 ~]# vi /etc/hosts 
      
         127.0.0.1       localhost.localdomain    localhost          
                                                                     
           (...rest of file not shown, too many possibilities...)    
      
      [root@qr01db02 ~]# tail -1 /etc/hosts 
      192.0.2.16      host01.example.com              host01
      [root@qr01db02 ~]# exit 
      [oracle@qr01db02 ~]$
                                                                                      
      

      tailコマンドは、host01アドレスがファイルの末尾に追加されたことを前提としています。 編集が完了したら、rootを終了します。

      まったく同じ処理を、もう一方のターゲット・ノード2に対して実行します。 行は表示されていませんが、qr01db01およびqr01db02と同じです。

      Exadata - ノード2(ターゲット)
      [oracle@qr01db02 ~]$ vi .bash_profile 
        (REPEAT ON OTHER QR01db02)
      [oracle@qr01db02 ~]$ su - root 
      [root@qr01db02 ~]# vi /etc/hosts 
        (REPEAT ON OTHER QR01db02)
      [root@qr01db02 ~]# exit 
      [oracle@qr01db02 ~]$
                                                                                      
      

      2つのノードのプロファイルが一致し、/etc/hostsファイルはほぼ等しくなりました。

      ソース・ホストに対しても同じ手順を実行します。 インストール・ディレクトリに若干の違いがある場合がありますが、ここでは、ORACLE_BASE、ORACLE_HOME、OGG_HOMELD_LIBRARY_PATHという4つの同じ環境変数を定義します。 /etc/hostsはExadataのアドレスを指しています。

      Host01 - Linux(ソース)
      [oracle@host01 ~]$ vi .bash_profile 
      
         # .bash_profile                                             
                                                                     
         # Get the aliases and functions                             
         if [ -f ~/.bashrc ]; then                                   
                 . ~/.bashrc                                         
         fi                                                          
                                                                     
         # User specific environment and startup programs            
         ORACLE_BASE=/u01/app/oracle                                 
         ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_home1            
         OGG_HOME=$ORACLE_BASE/ogg                                   
         ORACLE_SID=orcl                                             
         PATH=$PATH:$HOME/bin:$ORACLE_HOME:$ORACLE_HOME/bin          
         LD_LIBRARY_PATH=$ORACLE_HOME/lib                            
                                                                     
         export PATH LD_LIBRARY_PATH                                 
         export ORACLE_HOME ORACLE_BASE ORACLE_SID OGG_HOME          
      
      [oracle@host01 ~]$ su - root 
      Password: 
      [root@host01 ~]# vi /etc/hosts 
      
         127.0.0.1       localhost.localdomain    localhost          
                                                                     
           (...rest of file not shown, too many possibilities...)    
      
      [root@host01 ~]# tail -1 /etc/hosts 
      192.0.2.99      qr01-vip.example.com            qr01-vip
      [root@host01 ~]# exit 
      [oracle@host01 ~]$
                                                                                      
      

      今回/etc/hostsへ追加したのは、Exadata上のアプリケーションの"vip"アドレス用です。このアドレスは次のステップで定義します。 ここでは、行の入力のみを行います。

      以上で、OS環境の準備が整いました。

    1.2 アプリケーション仮想IP(VIP)アドレスの構成

      アプリケーションの仮想IP(VIP)は、Oracle Cluster Ready Services(Oracle CRS)に含まれています。 VIPを使用すると、1つのアドレスを新しく定義して、複数のノードで共有することができます。 この目的は、処理を行うターゲット・ノードに関係なく、ソースから1つのターゲット・アドレスを参照できるようにすることです。 これは、Oracle Real Application Clusters(Oracle RAC)のSingle Client Access Name(SCAN)アドレス機能とよく似ていますが、SCANはデータベースからのみ使用できるのに対し、VIPはどのようなアプリケーション(この例ではGoldenGate)からでも使用できます。

      ターゲット・ノード2で、指示に合わせてrootまたはoracleを使用して、次のタスクを実行します。 VIPの作成にはrootを使用しますが、実行にはoracleを使用します。 VIPアドレスには、クラスタ用のパブリック・ネットワークとして構成されているサブネットに含まれる任意の未使用アドレスを使用します。 この例では、192.0.2.99を使用しています。これは、grepでサブネット192.0.2.0が返されたことから、このサブネットでは.99が未使用であるためです。 これは、前のステップで設定したソース上の/etc/hostsファイルと一致している必要があります。

      Exadata - ノード2(ターゲット)
      [oracle@qr01db02 ogg]$ su - root 
      Password: 
      [root@qr01db02 ~]# cd /u01/app/11.2.0/grid/bin 
      [root@qr01db02 bin]# ./crsctl stat res -p | grep -ie .network -ie subnet | grep 
                           -ie name -ie subnet 
      NAME=ora.net1.network
      USR_ORA_SUBNET=192.0.2.0
      [root@qr01db02 bin]# ./appvipcfg create -network=1 -ip=192.0.2.99 
                           -vipname=gg_vip_trg -user=root 
      Production Copyright 2007, 2008, Oracle.All rights reserved
      2013-02-27 14:06:52: Creating Resource Type
      2013-02-27 14:06:52: Executing /u01/app/11.2.0/grid/bin/crsctl add type 
        app.appvip_net1.type -basetype ora.cluster_vip_net1.type -file 
        /u01/app/11.2.0/grid/crs/template/appvip.type
      2013-02-27 14:06:52: Executing cmd: /u01/app/11.2.0/grid/bin/crsctl add type 
        app.appvip_net1.type -basetype ora.cluster_vip_net1.type -file 
        /u01/app/11.2.0/grid/crs/template/appvip.type
      2013-02-27 14:06:55: Create the Resource
      2013-02-27 14:06:55: Executing /u01/app/11.2.0/grid/bin/crsctl add resource gg_v
        ip_trg -type app.appvip_net1.type -attr "USR_ORA_VIP=192.0.2.99,START_DEPENDEN
        CIES=hard(ora.net1.network) pullup(ora.net1.network),STOP_DEPENDENCIES=hard(or
        a.net1.network),ACL='owner:root:rwx,pgrp:root:r-x,other::r--,user:root:r-x',HO
        STING_MEMBERS=qr01db02.example.com,APPSVIP_FAILBACK="
      2013-02-27 14:06:55: Executing cmd: /u01/app/11.2.0/grid/bin/crsctl add resource
        gg_vip_trg -type app.appvip_net1.type -attr "USR_ORA_VIP=192.0.2.99,START_DEPE
        NDENCIES=hard(ora.net1.network) pullup(ora.net1.network),STOP_DEPENDENCIES=har
        d(ora.net1.network),ACL='owner:root:rwx,pgrp:root:r-x,other::r--,user:root:r-x
        ',HOSTING_MEMBERS=qr01db02.example.com,APPSVIP_FAILBACK="
      [root@qr01db02 bin]# ./crsctl setperm resource gg_vip_trg -u user:oracle:r-x 
      [root@qr01db02 bin]# exit 
      [oracle@qr01db02 ogg]$ cd /u01/app/11.2.0/grid/bin 
      [oracle@qr01db02 bin]$ ./crsctl start resource gg_vip_trg 
      CRS-2672: Attempting to start 'gg_vip_trg' on 'qr01db01'
      CRS-2676: Start of 'gg_vip_trg' on 'qr01db01' succeeded
      [oracle@qr01db02 bin]$ ./crsctl status resource gg_vip_trg 
      NAME=gg_vip_trg
      TYPE=app.appvip_net1.type
      TARGET=ONLINE
      STATE=ONLINE on qr01db01
      
      [oracle@qr01db02 bin]$
                                                                                      
      

      処理が成功したかどうかを確認するには、STATE=ONLINEを探します。 VIPが1つのIPアドレス(のみ)に関連付けられています。 アプリケーションVIPの場合、1度(任意のクラスタ・ノードで)定義すると、デフォルトで、どのクラスタ・ノードでも実行できるようになります。

      以上で、アプリケーションのVIPアドレスの構成は完了です。

    1.3 接続のテスト

      pingおよびtnspingを使用して、両方のホストから互いにアクセスできることを確認します。

      アプリケーションVIPアドレスを介して、ソースからターゲットにアクセスできることを確認します。

      Host01 - Linux(ソース)
      [oracle@host01 ogg]$ ping qr01-vip 
      PING qr01-vip.example.com (192.0.2.99) 56(84) bytes of data.
      64 bytes from qr01-vip.example.com (192.0.2.99): icmp_seq=1 ttl=64 time=0.145 ms
      64 bytes from qr01-vip.example.com (192.0.2.99): icmp_seq=2 ttl=64 time=0.143 ms
      64 bytes from qr01-vip.example.com (192.0.2.99): icmp_seq=3 ttl=64 time=0.107 ms
      64 bytes from qr01-vip.example.com (192.0.2.99): icmp_seq=4 ttl=64 time=0.109 ms
      ^C
      --- qr01-vip.example.com ping statistics ---
      4 packets transmitted, 4 received, 0% packet loss, time 2999ms
      rtt min/avg/max/mdev = 0.107/0.126/0.145/0.018 ms
      [oracle@host01 ogg]$ 
                                                                                      
      

      pingが数回成功したら、[Ctrl]キーを押しながら[C]を押します。

      tnspingを使用して、ターゲット・ノード2からデータベースにアクセスできることを確認します。 tnsnames.oraに定義されたこれらのエイリアスは、後からsqlplusで使用します。

      Exadata - ノード2(ターゲット)
      [oracle@qr01db02 ~]$ more $ORACLE_HOME/network/admin/tnsnames.ora 
      # tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome
      _1/network/admin/tnsnames.ora
      # Generated by Oracle configuration tools.
      
      DBM =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = qr01-scan)(PORT = 1521))
          (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = dbm.example.com)
          )
        )
      
      [oracle@qr01db02 ~]$ tnsping dbm 
      
      TNS Ping Utility for Linux: Version 11.2.0.2.0 - Production on 06-MAR-2013 13:45
      Copyright (c) 1997, 2010, Oracle.  All rights reserved.
      Used parameter files:
      Used TNSNAMES adapter to resolve the alias
      Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 
      qr01-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =
      dbm.example.com)))
      OK (0 msec)
      [oracle@qr01db02 ~]$ tnsping dbm1 
      
      TNS Ping Utility for Linux: Version 11.2.0.2.0 - Production on 06-MAR-2013 13:45
      Copyright (c) 1997, 2010, Oracle.  All rights reserved.
      Used parameter files:
      TNS-03505: Failed to resolve name
      [oracle@qr01db02 ~]$ 
                                                                                      
      

      tnspingの結果が"failed"と表示されていることから、tnspingを使用してdbm1などの個別インスタンスにアクセスできないことが分かります。しかし、sqlplus user/pswd@dbmを使用してクラスタ化されたデータベースにアクセスすることはできます。 どのインスタンスにアクセスしているかを確認するには、sqlplus> show parameter instance_nameを使用します。 ORACLE_SID=dbm1またはその他の個別のインスタンス名を設定し、エクスポートすると、特定のインスタンスにアクセスできます。

      同じtnsnameを使用して、ターゲット・ノード1から同じデータベースにアクセスできることを確認します。

      Exadata - ノード1(ターゲット)
      [oracle@qr01db01 ~]$ tnsping dbm 
      
      TNS Ping Utility for Linux: Version 11.2.0.2.0 - Production on 06-MAR-2013 13:45
      Copyright (c) 1997, 2010, Oracle.  All rights reserved.
      Used parameter files:
      Used TNSNAMES adapter to resolve the alias
      Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 
      qr01-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =
      dbm.example.com)))
      OK (0 msec)
      [oracle@qr01db01 ~]$
                                                                                      
      

      qr01-scanは両方のRACインスタンス(両方のノード)を指している点に注意します。

      以上で、データベースとIP接続のテストは完了です。

    1.4 GoldenGate向けのデータベースの準備

      ここでの作業は、Exadata、RAC、または単一ノードのいずれを使用した場合もほとんど同じです。

      ソースのhost01で、OGG管理者oggadm1を作成します。

      Host01 - Linux(ソース)
      [oracle@host01 ~]$ sqlplus / as sysdba 
      
      SQL*Plus: Release 11.2.0.3.0 Production on Wed Feb 27 10:08:24 2013
      Copyright (c) 1982, 2011, Oracle.  All rights reserved.
      Connected to:
      Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
      With the Partitioning, OLAP, Data Mining and Real Application Testing options
      
      SQL> set sqlprompt 'host01_SQL> ' 
      host01_SQL> SELECT log_mode, force_logging, supplemental_log_data_min
                  FROM v$database; 
      
      LOG_MODE     FOR SUPPLEME
      ------------ --- --------
      ARCHIVELOG   YES YES
      
      host01_SQL> CREATE USER oggadm1 IDENTIFIED BY pswd1a; 
      User created.
      
      host01_SQL> GRANT dba TO oggadm1; 
      Grant succeeded.
      
      host01_SQL> EXEC 
            DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE ('OGGADM1','capture',TRUE); 
      PL/SQL procedure successfully completed.
      
      host01_SQL>
                                                                                      
      

      SELECTを実行してARCHIVELOG YES YESが返された場合、データベースを変更する必要はありません。 SELECTの結果がNOARCHIVELOG NO NOである場合は、変更方法について次のステップを参照し、ソース・データベース上で処理を実行します。

      デフォルトでは、データベースはNOARCHIVELOGおよびforce_logging=NOに設定されています。 GoldenGateを使用するには、ARCHIVELOGおよびforce_logging=YESを設定する必要があります。 この変更を実施するには、データベース(両ノード)を停止する必要があります。 はじめにターゲット・ノード2を停止します。

      Exadata - ノード2(ターゲット)
      [oracle@qr01db02 ~]$ sqlplus / as sysdba 
      
      SQL*Plus: Release 11.2.0.2.0 Production on Wed Feb 27 09:59:04 2013
      Copyright (c) 1982, 2010, Oracle.  All rights reserved.
      Connected to:
      Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
      With the Partitioning, Real Application Clusters, Automatic Storage Management, 
      OLAP, Data Mining and Real Application Testing options
      
      SQL> set sqlprompt 'qr01db_SQL> ' 
      qr01db_SQL> SELECT log_mode, force_logging, supplemental_log_data_min
                  FROM v$database; 
      
      LOG_MODE     FOR SUPPLEME
      ------------ --- --------
      NOARCHIVELOG NO  NO
      
      qr01db_SQL> shutdown immediate 
      Database closed.
      Database dismounted.
      ORACLE instance shut down.
      qr01db_SQL>
                                                                                      
      

      set sqlpromptの使用は必須ではありませんが、どの画面がどの機能に接続されているかを把握するために役立ちます。

      ターゲット・ノード1を停止します。 必要に応じて、データベースおよびシステムを変更します。

      Exadata - ノード1(ターゲット)
      [oracle@qr01db01 ~]$ sqlplus / as sysdba 
      
      SQL*Plus: Release 11.2.0.2.0 Production on Wed Feb 27 09:56:12 2013
      Copyright (c) 1982, 2010, Oracle.  All rights reserved.
      Connected to:
      Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
      With the Partitioning, Real Application Clusters, Automatic Storage Management, 
      OLAP, Data Mining and Real Application Testing options
      
      SQL> set sqlprompt 'qr01db_SQL> ' 
      qr01db_SQL> SELECT log_mode, force_logging, supplemental_log_data_min
                  FROM v$database; 
      
      LOG_MODE     FOR SUPPLEME
      ------------ --- --------
      NOARCHIVELOG NO  NO
      
      qr01db_SQL> shutdown immediate 
      Database closed.
      Database dismounted.
      ORACLE instance shut down.
      qr01db_SQL> startup mount 
      ORACLE instance started.
      
      Total System Global Area  939495424 bytes
      Fixed Size                  2232088 bytes
      Variable Size             637534440 bytes
      Database Buffers          293601280 bytes
      Redo Buffers                6127616 bytes
      Database mounted.
      qr01db_SQL> ALTER DATABASE ARCHIVELOG; 
      ALTER DATABASE ARCHIVELOG
      *
      ERROR at line 1:
      ORA-01126: database must be mounted in this instance and not open in any instance
      
      qr01db_SQL> ALTER DATABASE ARCHIVELOG; 
      Database altered.
      
      qr01db_SQL> ALTER DATABASE OPEN; 
      Database altered.
      
      qr01db_SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; 
      Database altered.
      
      qr01db_SQL> ALTER DATABASE FORCE LOGGING;  
      Database altered.
      
      qr01db_SQL> ALTER SYSTEM SWITCH LOGFILE; 
      System altered.
      
      qr01db_SQL> SELECT log_mode, force_logging, supplemental_log_data_min
                  FROM v$database; 
      
      LOG_MODE     FOR SUPPLEME
      ------------ --- --------
      ARCHIVELOG   YES YES
      
      qr01db_SQL> COMMIT; 
      Commit complete.
      
      qr01db_SQL> shutdown immediate 
      Database closed.
      Database dismounted.
      ORACLE instance shut down.
      qr01db_SQL>
                                                                                      
      

      画面中央にあるERROR ORA-01126に注目してください。 もう一方のノードを先に停止していない場合、このエラーが表示されます。 当分は、ターゲット・ノード1を停止したままにしておきます。

      ターゲット・ノード2に対して同様の手順を実行します。

      Exadata - ノード2(ターゲット)
      ORACLE instance shut down.
      SQL> set sqlprompt 'qr01db_SQL> '  
      qr01db_SQL> startup mount 
      ORACLE instance started.
      
      Total System Global Area  939495424 bytes
      Fixed Size                  2232088 bytes
      Variable Size             641728744 bytes
      Database Buffers          289406976 bytes
      Redo Buffers                6127616 bytes
      Database mounted.
      qr01db_SQL> ALTER DATABASE ARCHIVELOG; 
      Database altered.
      
      qr01db_SQL> ALTER DATABASE OPEN; 
      Database altered.
      
      qr01db_SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; 
      Database altered.
      
      qr01db_SQL> ALTER DATABASE FORCE LOGGING;  
      ALTER DATABASE FORCE LOGGING
      *
      ERROR at line 1:
      ORA-12920: database is already in force logging mode
      
      qr01db_SQL> ALTER SYSTEM SWITCH LOGFILE; 
      System altered.
      
      qr01db_SQL> SELECT log_mode, force_logging, supplemental_log_data_min
                  FROM v$database; 
      
      LOG_MODE     FOR SUPPLEME
      ------------ --- --------
      ARCHIVELOG   YES YES
      
      qr01db_SQL>
                                                                                      
      

      どの処理がインスタンスに適用され(インスタンスは2つ)、どの処理がデータベースに適用されるのか(データベースは1つのみ)に注目します。 たとえば、各インスタンスにALTER DATABASE ADD SUPPLEMENTAL LOG DATAを設定する必要がありますが、単一データベースにはすでに、FORCE LOGGINGが前のインスタンスから設定されています。
      処理が成功すると、SELECTの結果としてARCHIVELOG YES YESが返されます。

      データベースの変更が完了したため、起動を行います。 ノード2はすでに実行中であるため、ノード1でデータベースを起動します。 Exadata向けのOGG管理ユーザー/スキーマを作成します(このユーザーにはノードdbm1またはdbm2のいずれからもアクセスできます)。

      Exadata - ノード1(ターゲット)
      ORACLE instance shut down.
      qr01db_SQL> startup 
      ORACLE instance started.
      
      Total System Global Area  939495424 bytes
      Fixed Size                  2232088 bytes
      Variable Size             637534440 bytes
      Database Buffers          293601280 bytes
      Redo Buffers                6127616 bytes
      Database mounted.
      Database opened.
      qr01db_SQL> sho parameter name 
      
      NAME                                 TYPE        VALUE
      ------------------------------------ ----------- ------------------------------
      db_file_name_convert                 string
      db_name                              string      dbm
      db_unique_name                       string      dbm
      global_names                         boolean     FALSE
      instance_name                        string      dbm1
      lock_name_space                      string
      log_file_name_convert                string
      processor_group_name                 string
      service_names                        string      dbm.example.com
      
      qr01db_SQL> CREATE USER oggadm2 IDENTIFIED BY pswd2a;  
      User created.
      
      qr01db_SQL> GRANT dba TO oggadm2; 
      Grant succeeded.
      
      qr01db_SQL> EXEC 
            DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE ('OGGADM2','capture',TRUE); 
      PL/SQL procedure successfully completed.
      
      qr01db_SQL> exit 
      Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 
      64bit Production With the Partitioning, Real Application Clusters, Automatic 
      Storage Management, OLAP, Data Mining and Real Application Testing options
      [oracle@qr01db01 ~]$
                                                                                      
      

      OGG管理者へDBA権限を付与することは、おそらく行きすぎですが、この例では便利です。 本番環境で付与する権限はもっと少ないでしょう。

      ここまでで、両方のノードで個別に実施する必要のある作業は完了しました。 ここからは、ノード1のみを使用して、すべてのsqlplus操作を実行します。

      以上で、Oracle GoldenGate向けのデータベースの準備は完了です。

    1.5 DBFS向けのデータベースの準備

      2つのDBFSを格納するため、2つの表領域(大きいものと小さいもの)を作成します。 将来的に、これら2つの表領域のキャッシング特性は異なります。

      ターゲット・ノード1またはターゲット・ノード2のいずれで処理を実行するかに関係なく、すべての処理は同じ共有ストレージ領域に適用されます。 dbfs_ogg_bigに指定するサイズは、おそらく、本番環境よりずっと大きいものになります。 すべての証跡ファイルを格納できるだけのサイズが必要です。 dbfs_ogg_smallに指定するサイズはそれほど変わらないでしょう。 小さいDBFSに格納されるのは、非常に小さいチェックポイント・ファイルのみです。

      Exadata - ノード2(ターゲット)
      qr01db_SQL> CREATE bigfile TABLESPACE dbfs_ogg_big datafile '+DBFS_DG' SIZE
        100M autoextend ON NEXT 10M MAXSIZE 200M LOGGING EXTENT MANAGEMENT LOCAL
        AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO; 
      
      Tablespace created.
      
      qr01db_SQL> CREATE bigfile TABLESPACE dbfs_ogg_small datafile '+DBFS_DG' SIZE
        10M autoextend ON NEXT 1M MAXSIZE 20M LOGGING EXTENT MANAGEMENT LOCAL
        AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;  
      
      Tablespace created.
      
      qr01db_SQL> SELECT tablespace_name, logging, bigfile 
                  FROM dba_tablespaces WHERE tablespace_name like 'DBFS%'; 
      
      TABLESPACE_NAME             LOGGING   BIG
      --------------------------- --------- ---
      DBFS_OGG_BIG                LOGGING   YES
      DBFS_OGG_SMALL              LOGGING   YES
      
      qr01db_SQL> SELECT table_name, segment_name, cache, logging 
                  FROM dba_lobs WHERE tablespace_name like 'DBFS%'; 
      no rows selected
      
      qr01db_SQL> CREATE USER dbfs_user IDENTIFIED BY dbfs_pswd 
                DEFAULT TABLESPACE dbfs_ogg_big
                QUOTA UNLIMITED ON dbfs_ogg_big QUOTA UNLIMITED ON dbfs_ogg_small; 
      User created.
      
      qr01db_SQL> GRANT create session, create table, create view, 
                create procedure, dbfs_role TO dbfs_user; 
      Grant succeeded.
      
      qr01db_SQL> exit 
      Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 
      64bit Production With the Partitioning, Real Application Clusters, Automatic 
      Storage Management, OLAP, Data Mining and Real Application Testing options
      [oracle@qr01db02 ~]$ 
                                                                                      
      

      2番目のSELECT文から、LOBがまだ存在していないことが分かります。 次のステップでこれを変更します。

      ここまでで、DBFS向けのデータベースの準備は完了しました。 DBFSについて、詳しくはラージ・オブジェクト(LOB)ドキュメントを参照してください。

    以上で、環境の準備は完了です。

2. データベース・ファイル・システム(DBFS)の準備

    目的

    ここでの目的は次のとおりです。

    • DBFSを格納するためのLOB表の作成
    • OSのマウント・ポイントおよびディレクトリ構造の作成
    • DBFSを使用するOSクライアントの起動

    2.1 DBFSを格納するためのLOB表の作成

      スクリプトの実行には、クライアントの起動時(ステップ2.3.1~2.3.2)に指定するユーザーと同じユーザー(ここではdbfs_user)を使用することが重要です。 SQL @dbfsスクリプトを実行する際、(ここで示す例に改行が含まれる場合でも)パラメータに余分な改行が含まれていないことを確認します。

      Exadata - ノード2(ターゲット)
      [oracle@qr01db02 ~]$ cd $ORACLE_HOME/rdbms/admin 
      [oracle@qr01db02 admin]$ sqlplus dbfs_user/dbfs_pswd 
      
      SQL*Plus: Release 11.2.0.2.0 Production on Wed Feb 27 10:37:45 2013
      Copyright (c) 1982, 2010, Oracle.  All rights reserved.
      Connected to:
      Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
      With the Partitioning, Real Application Clusters, Automatic Storage Management, 
      OLAP, Data Mining and Real Application Testing options
      
      qr01db_SQL> @dbfs_create_filesystem_advanced.sql dbfs_ogg_big dbfs_big 
                  nocompress nodeduplicate noencrypt non-partition 
      qr01db_SQL> Rem
      qr01db_SQL> Rem $Header: rdbms/admin/dbfs_create_filesystem_advanced.sql /main/4 
                  2010/04/14 13:21:30 weizhang Exp $
      qr01db_SQL> Rem
      qr01db_SQL> Rem dbfs_create_filesystem.sql
      qr01db_SQL> Rem
      qr01db_SQL> Rem Copyright (c) 2009, 2010, Oracle and/or its affiliates.
      qr01db_SQL> Rem All rights reserved.
      qr01db_SQL> Rem
      qr01db_SQL> Rem NAME
      qr01db_SQL> Rem  dbfs_create_filesystem_advanced.sql - DBFS create filesystem
      qr01db_SQL> Rem
      qr01db_SQL> Rem DESCRIPTION
      qr01db_SQL> Rem  DBFS create filesystem script
      qr01db_SQL> Rem  Usage: sqlplus @dbfs_create_filesystem_advanced.sql
      qr01db_SQL> Rem           <tablespace_name> <filesystem_name>
      qr01db_SQL> Rem           <compress-high | compress-medium  | nocompress>
      qr01db_SQL> Rem           <deduplicate | nodeduplicate> <encrypt | noencrypt>
      qr01db_SQL> Rem           <non-partition | partition | partition-by-itemname |
      qr01db_SQL> Rem            partition-by-guid, partition-by-path>
      qr01db_SQL> Rem
      qr01db_SQL> Rem NOTES
      qr01db_SQL> Rem
      qr01db_SQL> Rem    MODIFIED   (MM/DD/YY)
      qr01db_SQL> Rem    weizhang    03/11/10 - bug 9220947: tidy up
      qr01db_SQL> Rem    weizhang    06/12/09 - Package name change
      qr01db_SQL> Rem    weizhang    04/06/09 - Created
      qr01db_SQL> Rem
      qr01db_SQL> 
      qr01db_SQL> SET ECHO OFF
      No errors.
      --------
      CREATE STORE:
      begin dbms_dbfs_sfs.createFilesystem(store_name => 'FS_DBFS_BIG', tbl_name =>
      'T_DBFS_BIG', tbl_tbs => 'dbfs_ogg_big', lob_tbs => 'dbfs_ogg_big', do_partition
      => false, partition_key => 1, do_compress => false, compression => '', do_dedup
      => false, do_encrypt => false); end;
      --------
      REGISTER STORE:
      begin dbms_dbfs_content.registerStore(store_name=> 'FS_DBFS_BIG', provider_name
      => 'sample1', provider_package => 'dbms_dbfs_sfs'); end;
      --------
      MOUNT STORE:
      begin dbms_dbfs_content.mountStore(store_name=>'FS_DBFS_BIG',
      store_mount=>'dbfs_big'); end;
      --------
      CHMOD STORE:
      declare m integer; begin m := dbms_fuse.fs_chmod('/dbfs_big', 16895); end;
      No errors.
      
      qr01db_SQL> @dbfs_create_filesystem_advanced.sql dbfs_ogg_small dbfs_sm 
                  nocompress nodeduplicate noencrypt non-partition 
      No errors.
      --------
      CREATE STORE:
      begin dbms_dbfs_sfs.createFilesystem(store_name => 'FS_DBFS_SM', tbl_name =>
      'T_DBFS_SM', tbl_tbs => 'dbfs_ogg_small', lob_tbs => 'dbfs_ogg_small',
      do_partition => false, partition_key => 1, do_compress => false, compression =>
      '', do_dedup => false, do_encrypt => false); end;
      --------
      REGISTER STORE:
      begin dbms_dbfs_content.registerStore(store_name=> 'FS_DBFS_SM', provider_name
      => 'sample1', provider_package => 'dbms_dbfs_sfs'); end;
      --------
      MOUNT STORE:
      begin dbms_dbfs_content.mountStore(store_name=>'FS_DBFS_SM',
      store_mount=>'dbfs_sm'); end;
      --------
      CHMOD STORE:
      declare m integer; begin m := dbms_fuse.fs_chmod('/dbfs_sm', 16895); end;
      No errors.
      
      qr01db_SQL> conn / as sysdba 
      Connected.
      qr01db_SQL> SELECT tablespace_name, file_name FROM dba_data_files 
                  WHERE tablespace_name LIKE 'DBFS%'; 
      
      TABLESPACE_NAME  FILE_NAME
      ---------------  --------------------------------------------------
      DBFS_OGG_BIG     +DBFS_DG/dbm/datafile/dbfs_ogg_big.256.808464609
      DBFS_OGG_SMALL   +DBFS_DG/dbm/datafile/dbfs_ogg_small.257.808464635
      
      qr01db_SQL> SELECT table_name, segment_name, cache, logging FROM dba_lobs 
                  WHERE tablespace_name like 'DBFS%'; 
      
      TABLE_NAME              SEGMENT_NAME                CACHE     LOGGING
      ----------------------- --------------------------- --------- -------
      T_DBFS_BIG              LOB_SFS$_FST_1              NO        YES
      T_DBFS_SM               LOB_SFS$_FST_11             NO        YES
      qr01db_SQL> ALTER TABLE dbfs_user.T_DBFS_SM 
                  MODIFY LOB (FILEDATA) (CACHE LOGGING); 
      qr01db_SQL> SELECT table_name, segment_name, cache, logging FROM dba_lobs 
                  WHERE tablespace_name like 'DBFS%';  
      
      TABLE_NAME              SEGMENT_NAME                CACHE     LOGGING
      ----------------------- --------------------------- --------- -------
      T_DBFS_BIG              LOB_SFS$_FST_1              NO        YES
      T_DBFS_SM               LOB_SFS$_FST_11             YES       YES
      qr01db_SQL> exit 
      Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 
      64bit Production With the Partitioning, Real Application Clusters, Automatic 
      Storage Management, OLAP, Data Mining and Real Application Testing options
      [oracle@qr01db02 admin]$
                                                                                      
      

      ALTER TABLEによって、小さいDBFSがキャッシングを使用するように変更されます。 これは、ごく小さいチェックポイント表に対しては便利です。 大きいDBFSにデフォルトで設定されているno cachingは、証跡ファイルで使用される順次の読取りおよび書込みに適しています。

      以上で、DBFS用LOB表の作成は完了です。

    2.2 マウント・ポイントおよびディレクトリ構造の作成

      DBFSは共有ストレージ・セル上にあります。

      どのディレクトリに配置することもできますが、規則として/mntの下に配置する必要があります。

      Exadata - ノード2(ターゲット)
      [oracle@qr01db02 ~]$ su - root 
      Password: 
      [root@qr01db02 ~]# cd /mnt 
      [root@qr01db02 mnt]# mkdir DBFS 
      [root@qr01db02 mnt]# ll  
      total 4
      drwxr-xr-x 2 root root 4096 Feb 27 10:34 DBFS
      [root@qr01db02 mnt]# chown oracle:oinstall DBFS/ 
      [root@qr01db02 mnt]# ll 
      total 4
      drwxr-xr-x 2 oracle oinstall 4096 Feb 27 10:34 DBFS
      [root@qr01db02 mnt]# exit 
      [oracle@qr01db02 ~]$
                                                                                      
      

      作成時にはrootを使用しますが、その後で所有者をoracleに戻します。

      DBFS自体は共有ストレージ上にありますが、マウント・ポイントは両方のノードに定義する必要があります。

      Exadata - ノード1(ターゲット)
      [oracle@qr01db01 ~]$ su - root 
      Password: 
      [root@qr01db01 ~]# cd /mnt 
      [root@qr01db01 mnt]# mkdir DBFS 
      [root@qr01db01 mnt]# ll  
      total 4
      drwxr-xr-x 2 root root 4096 Feb 27 10:34 DBFS
      [root@qr01db01 mnt]# chown oracle:oinstall DBFS/ 
      [root@qr01db01 mnt]# ll 
      total 4
      drwxr-xr-x 2 oracle oinstall 4096 Feb 27 10:34 DBFS
      [root@qr01db01 mnt]# exit 
      [oracle@qr01db01 ~]$
                                                                                      
      

      これは、すべてのExadataノードで一致させる必要があります。

      以上で、マウント・ポイントおよびディレクトリ構造の作成は完了です。

    2.3 DBFSを使用するOSクライアントの起動

      ここでは、概念実証の一部としてDBFSクライアントを手動で起動しますが、通常、本番ではクライアントを自動起動リソースとして定義します。

      dbfs_userは、ステップ2.1.1でスクリプトを定義したユーザーと同じユーザーです。 Exadataのターゲット・ノード2でDBFSクライアントを起動します。 nohupコマンドは論理的に1行であるため、入力中に[Enter]キーを押さないでください。 ただし、"appending output to nohup.out"という応答メッセージが表示された後は、[Enter]キーを押してOSプロンプトに制御を戻す必要があります。

      Exadata - ノード2(ターゲット)
      [oracle@qr01db02 ~]$ cd ~ 
      [oracle@qr01db02 ~]$ echo dbfs_pswd > passwd.txt 
      [oracle@qr01db02 ~]$ nohup $ORACLE_HOME/bin/dbfs_client dbfs_user@dbm 
                           -o allow_other,direct_io /mnt/DBFS < ~/passwd.txt & 
      [1] 5670
      [oracle@qr01db02 ~]$ nohup: appending output to `nohup.out'
      
      [oracle@qr01db02 ~]$ ll /mnt/DBFS/ 
      total 0
      drwxrwxrwx 3 root root 0 Feb 27 10:39 dbfs_big
      drwxrwxrwx 3 root root 0 Feb 27 10:40 dbfs_sm
      [oracle@qr01db02 ~]$ df -k 
      Filesystem           1K-blocks      Used Available Use% Mounted on
      /dev/xvda2             8022104   2639960   4968072  35% /
      /dev/xvda1              101086     13048     82819  14% /boot
      tmpfs                  1146880    748004    398876  66% /dev/shm
      /dev/xvdb1            20635700  12517612   7069852  64% /u01
      dbfs-dbfs_user@dbm:/    222640       304    222336   1% /mnt/DBFS
      [oracle@qr01db02 ~]$
                                                                                      
      

      コマンドラインの末尾にアンパサンド("&")を付けると、dbfs_clientがバックグラウンドで実行されます。 バックグラウンド・ジョブは、jobs(ジョブのリスト表示)、fg(フォアグラウンド)、bg(バックグラウンド)を使用して操作できます。

      両方のノードでクライアントを起動します。 順序(ノード1から、またはノード2から)は重要ではありません。 Exadataのターゲット・ノード1でDBFSクライアントを起動します。 ここでも、nohupコマンドの入力中に改行を入れないように注意してください。

      Exadata - ノード1(ターゲット)
      [oracle@qr01db01 ~]$ cd ~ 
      [oracle@qr01db01 ~]$ echo dbfs_pswd > passwd.txt 
      [oracle@qr01db01 ~]$ nohup $ORACLE_HOME/bin/dbfs_client dbfs_user@dbm
                           -o allow_other,direct_io /mnt/DBFS < ~/passwd.txt & 
      [1] 6358
      [oracle@qr01db01 ~]$ nohup: appending output to `nohup.out'
      
      [oracle@qr01db01 ~]$ ll /mnt/DBFS/ 
      total 0
      drwxrwxrwx 3 root root 0 Feb 27 10:39 dbfs_big
      drwxrwxrwx 4 root root 0 Feb 27 11:19 dbfs_sm
      [oracle@qr01db01 ~]$ df -k 
      Filesystem           1K-blocks      Used Available Use% Mounted on
      /dev/xvda2             8022104   2660752   4947280  35% /
      /dev/xvda1              101086     13048     82819  14% /boot
      tmpfs                  1146880    797380    349500  70% /dev/shm
      /dev/xvdb1            20635700  12054256   7533208  62% /u01
      dbfs-dbfs_user@dbm:/    222640       304    222336   1% /mnt/DBFS
      [oracle@qr01db01 ~]$
                                                                                      
      

      df -kは必須ではありません。DBFSディレクトリのサイズをチェックするためだけに使用されています。

      ここまでで、DBFSを使用するクライアントの起動は完了しました。

    以上で、DBFSの準備は完了です。

3. Oracle GoldenGate(OGG)ソフトウェアのインストール

    目的

    ここでの目的は次のとおりです。

    • ソフトウェアの解凍
    • シンボリック・リンクの作成
    • ベース・パラメータ・ファイルの作成

    このOBEでは、ソースがLinux 64ビットを使用したインテル・アーキテクチャ・マシンであることを前提としていますが、別のマシンである場合も、以下の手順とほとんど同じです。

    3.1 Oracle GoldenGateソフトウェアの解凍

      3つのホストすべてに、ソフトウェアをインストールします。 ここでは、V34339-01.zip(またはそれ以降のバージョン)がOracle Software Delivery Cloudからダウンロードされ、各ホストのホーム・ディレクトリ(~)に保存されているとします。

      Exadataのターゲット・ノード2にOGGソフトウェアをインストールします。 1つ目のコマンドの最初のドットに注意してください。 このドットを指定することで、.bash_profile$OGG_HOMEやその他の環境変数が使用されます。

      Exadata - ノード2(ターゲット)
      [oracle@qr01db02 admin]$ . ~/.bash_profile  
      [oracle@qr01db02 admin]$ echo $OGG_HOME 
      /u01/app/oracle/ogg
      [oracle@qr01db02 ~]$ cd $ORACLE_BASE 
      [oracle@qr01db02 oracle]$ mkdir ogg 
      [oracle@qr01db02 oracle]$ cd $OGG_HOME 
      [oracle@qr01db02 ogg]$ pwd 
      /u01/app/oracle/ogg
      [oracle@qr01db02 ogg]$ unzip ~/V34339-01.zip 
      Archive:  /home/oracle/V34339-01.zip
        inflating: fbo_ggs_Linux_x64_ora11g_64bit.tar  
        inflating: Oracle_GoldenGate_11.2.1.0.3_README.doc  
        inflating: Oracle GoldenGate_11.2.1.0.3_README.txt  
        inflating: OGG_WinUnix_Rel_Notes_11.2.1.0.3.pdf  
      [oracle@qr01db02 ogg]$ tar -xvpf fbo_ggs_Linux_x64_ora11g_64bit.tar 
      UserExitExamples/
      UserExitExamples/ExitDemo_more_recs/
      UserExitExamples/ExitDemo_more_recs/Makefile_more_recs.HPUX
      UserExitExamples/ExitDemo_more_recs/Makefile_more_recs.SOLARIS
      UserExitExamples/ExitDemo_more_recs/Makefile_more_recs.LINUX
      UserExitExamples/ExitDemo_more_recs/Makefile_more_recs.AIX
      UserExitExamples/ExitDemo_more_recs/exitdemo_more_recs.vcproj
      UserExitExamples/ExitDemo_more_recs/exitdemo_more_recs.c
      UserExitExamples/ExitDemo_more_recs/readme.txt
      UserExitExamples/ExitDemo_passthru/
      
        (...many lines omitted for clarity...)
      
      reverse
      role_setup.sql
      sequence.sql
      server
      sqlldr.tpl
      tcperrs
      ucharset.h
      ulg.sql
      usrdecs.h
      zlib.txt
      [oracle@qr01db02 ogg]$
                                                                                      
      

      最新ニュースを確認するには、README.txtを参照してください。

      同じ処理を、もう一方のExadataターゲット・ノード1に対して実行します。

      Exadata - ノード1(ターゲット)
      [oracle@qr01db01 ~]$ . ~/.bash_profile  
      [oracle@qr01db01 ~]$ echo $OGG_HOME 
      /u01/app/oracle/ogg
      [oracle@qr01db01 ~]$ cd $ORACLE_BASE 
      [oracle@qr01db01 oracle]$ mkdir ogg 
      [oracle@qr01db01 oracle]$ cd $OGG_HOME 
      [oracle@qr01db01 ogg]$ pwd 
      /u01/app/oracle/ogg
      [oracle@qr01db01 ogg]$ unzip ~/V34339-01.zip  
      Archive:  /home/oracle/V34339-01.zip
        inflating: fbo_ggs_Linux_x64_ora11g_64bit.tar  
        inflating: Oracle_GoldenGate_11.2.1.0.3_README.doc  
        inflating: Oracle GoldenGate_11.2.1.0.3_README.txt  
        inflating: OGG_WinUnix_Rel_Notes_11.2.1.0.3.pdf  
      [oracle@qr01db01 ogg]$ tar -xvpf fbo_ggs_Linux_x64_ora11g_64bit.tar  
      UserExitExamples/
      UserExitExamples/ExitDemo_more_recs/
      
        (...many lines omitted for clarity...)
      
      ulg.sql
      usrdecs.h
      zlib.txt
      [oracle@qr01db02 ogg]$
                                                                                      
      

      同じ結果が表示されます。

      ソースのhost01に対しても同じ手順を実行します。

      Host01 - Linux(ソース)
        (screens not shown, they are the same as above)
                                                                                      
      

      以上で、Oracle GoldenGateソフトウェアの解凍は完了です。

    3.2 DBFSへのシンボリック・リンクの作成

      シンボリック・リンクは、共通ファイルや証跡ファイルに対してDBFSを使用するようにOGGに指示するものです。 DBFSサブディレクトリの作成は一度だけ実行しますが、両方のExadataノードでリンクを作成する必要があります。 これらのリンクは、$OGG_HOMEのサブディレクトリと同じ名前と構造を持ちます。

      Exadataのターゲット・ノード2で、DBFSのサブディレクトリとシンボリック・リンクを作成します。

      Exadata - ノード2(ターゲット)
      [oracle@qr01db02 ogg]$ cp ./dirprm/jagent.prm jagent.backup 
      [oracle@qr01db02 ogg]$ rm -rf dirprm 
      [oracle@qr01db02 ogg]$ mkdir /mnt/DBFS/dbfs_sm/ogg 
      [oracle@qr01db02 ogg]$ mkdir /mnt/DBFS/dbfs_sm/ogg/dirprm 
      [oracle@qr01db02 ogg]$ mkdir /mnt/DBFS/dbfs_sm/ogg/dirpcs 
      [oracle@qr01db02 ogg]$ mkdir /mnt/DBFS/dbfs_sm/ogg/dirchk 
      [oracle@qr01db02 ogg]$ mkdir /mnt/DBFS/dbfs_big/ogg 
      [oracle@qr01db02 ogg]$ mkdir /mnt/DBFS/dbfs_big/ogg/dirdat 
      [oracle@qr01db02 ogg]$ ln -s /mnt/DBFS/dbfs_sm/ogg/dirprm/  $OGG_HOME/dirprm 
      [oracle@qr01db02 ogg]$ ln -s /mnt/DBFS/dbfs_sm/ogg/dirpcs/  $OGG_HOME/dirpcs 
      [oracle@qr01db02 ogg]$ ln -s /mnt/DBFS/dbfs_sm/ogg/dirchk/  $OGG_HOME/dirchk 
      [oracle@qr01db02 ogg]$
                                                                                      
      

      解凍処理の一部としてdirprm/jagent.prmが作成されていますが、残りのディレクトリを作成した後でこれをDBFSに移動します。

      Exadataのターゲット・ノード2でGGSCIを使用して、$OGG_HOMEにサブディレクトリを作成します。

      Exadata - ノード2(ターゲット)
      [oracle@qr01db02 ogg]$ ./ggsci 
      
      Oracle GoldenGate Command Interpreter for Oracle
      Version 11.2.1.0.3 14400833 OGGCORE_11.2.1.0.3_PLATFORMS_120823.1258_FBO
      Linux, x64, 64bit (optimized), Oracle 11g on Aug 23 2012 20:20:21
      Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
      
      GGSCI (qr01db02.example.com) 1> Create SubDirs 
      
      Creating subdirectories under current directory /u01/app/oracle/ogg
      
      Parameter files                /u01/app/oracle/ogg/dirprm: already exists
      Report files                   /u01/app/oracle/ogg/dirrpt: created
      Checkpoint files               /u01/app/oracle/ogg/dirchk: already exists
      Process status files           /u01/app/oracle/ogg/dirpcs: already exists
      SQL script files               /u01/app/oracle/ogg/dirsql: created
      Database definitions files     /u01/app/oracle/ogg/dirdef: created
      Extract data files             /u01/app/oracle/ogg/dirdat: created
      Temporary files                /u01/app/oracle/ogg/dirtmp: created
      Stdout files                   /u01/app/oracle/ogg/dirout: created
      
      GGSCI (qr01db02.example.com) 2> Exit 
      
      [oracle@qr01db02 ogg]$ mv jagent.backup /mnt/DBFS/dbfs_sm/ogg/dirprm/jagent.prm 
      [oracle@qr01db02 ogg]$ cd dirprm/ 
      [oracle@qr01db02 dirprm]$ ll 
      total 1
      -rwxr-x--- 1 oracle oinstall 53 Feb 27 11:11 jagent.prm
      [oracle@qr01db02 dirprm]$ pwd 
      /u01/app/oracle/ogg/dirprm
      [oracle@qr01db02 dirprm]$ cd $OGG_HOME 
                                                                                      
      

      3つのサブディレクトリが、DBFSを指すシンボリック・リンクとして存在します。 jagent.prmファイルが、これらのリンクのうちのogg/dirprmに戻されました。

      同じ処理を、ターゲット・ノード1で実行します。 今回は、実行するステップがわずかに少なくなります。

      Exadata - ノード1(ターゲット)
      [oracle@qr01db01 ogg]$ cp ./dirprm/jagent.prm jagent.backup 
      [oracle@qr01db01 ogg]$ rm -rf dirprm 
      [oracle@qr01db01 ogg]$ ll /mnt/DBFS/dbfs_sm/ogg/ 
      total 0
      drwxr-xr-x 2 oracle oinstall 0 Feb 27 11:19 dirchk
      drwxr-xr-x 2 oracle oinstall 0 Feb 27 11:19 dirpcs
      drwxr-xr-x 2 oracle oinstall 0 Feb 27 11:23 dirprm
      [oracle@qr01db01 ogg]$
      [oracle@qr01db01 ogg]$ ln -s /mnt/DBFS/dbfs_sm/ogg/dirprm/  $OGG_HOME/dirprm 
      [oracle@qr01db01 ogg]$ ln -s /mnt/DBFS/dbfs_sm/ogg/dirpcs/  $OGG_HOME/dirpcs 
      [oracle@qr01db01 ogg]$ ln -s /mnt/DBFS/dbfs_sm/ogg/dirchk/  $OGG_HOME/dirchk 
      [oracle@qr01db01 ogg]$
                                                                                      
      

      DBFSのogg/サブ構造がすでに存在しています。

      Exadataのターゲット・ノード1でGGSCIを使用して、$OGG_HOMEに残りのサブディレクトリを作成します。

      Exadata - ノード1(ターゲット)
      [oracle@qr01db01 ogg]$ ./ggsci 
      
      Oracle GoldenGate Command Interpreter for Oracle
      Version 11.2.1.0.3 14400833 OGGCORE_11.2.1.0.3_PLATFORMS_120823.1258_FBO
      Linux, x64, 64bit (optimized), Oracle 11g on Aug 23 2012 20:20:21
      Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
      
      GGSCI (qr01db01.example.com) 1> Create SubDirs 
      
      Creating subdirectories under current directory /u01/app/oracle/ogg
      
      Parameter files                /u01/app/oracle/ogg/dirprm: already exists
      Report files                   /u01/app/oracle/ogg/dirrpt: created
      Checkpoint files               /u01/app/oracle/ogg/dirchk: already exists
      Process status files           /u01/app/oracle/ogg/dirpcs: already exists
      SQL script files               /u01/app/oracle/ogg/dirsql: created
      Database definitions files     /u01/app/oracle/ogg/dirdef: created
      Extract data files             /u01/app/oracle/ogg/dirdat: created
      Temporary files                /u01/app/oracle/ogg/dirtmp: created
      Stdout files                   /u01/app/oracle/ogg/dirout: created
      
      GGSCI (qr01db01.example.com) 2> Exit 
      [oracle@qr01db01 ogg]$ mv jagent.backup /mnt/DBFS/dbfs_sm/ogg/dirprm/jagent.prm 
      [oracle@qr01db01 ogg]$ cd dirprm/ 
      [oracle@qr01db01 dirprm]$ ll 
      total 1
      -rwxr-x--- 1 oracle oinstall 53 Feb 27 11:37 jagent.prm
      [oracle@qr01db01 dirprm]$ pwd 
      /u01/app/oracle/ogg/dirprm
      [oracle@qr01db01 dirprm]$ cd $OGG_HOME 
      [oracle@qr01db01 ogg]$
                                                                                      
      

      GGSCIのキーワードでは大文字と小文字は区別されませんが、読みやすくするため、慣例により、 大文字と小文字が混合する形式で表示されます(大文字で表示されるSQLキーワードや小文字で表示されるLinuxキーワードとも区別できます)。

      以上で、DBFSへのシンボリック・リンクの作成は完了です。

    3.3 ベース・パラメータ・ファイルの作成

      パラメータ・ファイルはASCIIファイルであり、好みのエディタで作成できますが、 デフォルトのエディタはviです。 列の最初にダッシュを2つ入力すると、コメントになります。 ほとんどのパラメータ・ファイルは、DBFS上の共有フォルダ/dirprmに格納されます。

      正式な起動スクリプトはありませんが、これが使用できると非常に便利です。特にDBLoginコマンドに対しては有効です。 ソースのhost01を設定したら、obeyスクリプトstartup.obyを実行します。

      Host01 - Linux(ソース)
      [oracle@host01 ogg]$ vi startup.oby 
      
         -- Created by Joe Admin 10/11/2012 on host01    
         DBLogin UserID oggadm1@orcl, Password pswd1a    
         Start Mgr                                       
         Info Mgr                                        
         Info CheckpointTable                            
         -- Set Editor gedit                             
      
      [oracle@host01 ogg]$ vi GLOBALS  
      
         -- Created by Joe Admin 10/11/2012 on host01    
         CheckpointTable oggadm1.oggchkpt                
      
      [oracle@host01 ogg]$ ./ggsci 
      GGSCI (host01) 1> Create SubDirs 
        (response not shown, no harm in doing it twice...)
      GGSCI (host01) 2> Edit Param mgr 
      
         -- Created by Joe Admin 10/11/2012 on host01    
         Port 15001                                      
         PurgeOldExtracts ./dirdat/*, UseCheckpoints     
      
      GGSCI (host01) 3> Obey startup.oby 
      GGSCI (host01) 4> -- Created by Joe Admin 10/11/2012 on host01
      GGSCI (host01) 5> DBLogin UserID oggadm1@orcl, Password pswd1a
      Successfully logged into database.
      
      GGSCI (host01) 6> Start Mgr
      Manager started.
      
      GGSCI (host01) 7> Info Mgr
      Manager is running (IP port host01.example.com.15001).
      
      GGSCI (host01) 8> Info CheckpointTable 
      No checkpoint table specified, using GLOBALS specification (oggadm1.oggchkpt)...
      Checkpoint table oggadm1.oggchkpt does not exist.
      
      GGSCI (host01) 9> 
                                                                                      
      

      host01ではGUIがサポートされているため、geditなどのより使いやすいエディタをデフォルトとして設定することができます。 実行するには、startup.obyの末尾にもう1行追加します(実際はコメントを表す2つのダッシュを削除します)。
      Set Editor gedit
      ExadataではGUIがサポートされていないため、この方法は使用できません。

      Manager、ポート、消去、チェックポイントについて、詳しくはOracleからOracleへのOGGの基本OBEを参照してください。 チェックポイント・ファイルがまだ存在していなくても、問題ありません。 GLOBALSは大文字を使用し、拡張子.prmは付いておらず、$OGG_HOMEに格納された唯一の"パラメータ"ファイルです(その他のファイルには小文字が使用されており、$OGG_HOME/dirprmに配置されています)。

      同じ基本的構成ファイルをExadataターゲット・ノード1で作成します。

      Exadata - ノード1(ターゲット)
      [oracle@qr01db01 ogg]$ vi startup.oby 
      
         -- Created by Joe Admin 10/11/2012 on Exadata qr01db01  
         DBLogin UserID oggadm2@dbm, Password pswd2a             
         Start Mgr                                               
         Info Mgr                                                
         Info CheckpointTable                                    
      
      [oracle@qr01db01 ogg]$ vi GLOBALS 
      
         -- Created by Joe Admin 10/11/2012 on qr01db01          
         CheckpointTable oggadm2.oggchkpt                        
      
      [oracle@qr01db01 ogg]$ ./ggsci 
      GGSCI (qr01db01) 1> Edit param mgr 
      
         -- Created by Joe Admin 10/11/2012 on Exadata qr01db    
         Port 15002                                              
         Autostart ER *                                          
         AutoRestart ER *                                        
         PurgeOldExtracts ./dirdat/*, UseCheckpoints             
      
      GGSCI (qr01db01) 3> Obey startup.oby 
      GGSCI (qr01db01) 4> -- Created by Joe Admin 10/11/2012 on Exadata qr01db
      GGSCI (qr01db01) 5> DBLogin UserID oggadm2@dbm, Password pswd2a
      Successfully logged into database.
      
      GGSCI (qr01db01) 6> Start Mgr
      Manager started.
      
      GGSCI (qr01db01) 7> Info Mgr
      Manager is running (IP port qr01db01.example.com.15002).
      
      GGSCI (qr01db01) 8> Info CheckpointTable
      No checkpoint table specified, using GLOBALS specification (oggadm2.oggchkpt)...
      Checkpoint table oggadm2.oggchkpt does not exist.
      
      GGSCI (qr01db01) 9> Exit 
      [oracle@qr01db01 ogg]$
                                                                                      
      

      Autostart/AutoRestartは必須ではありませんが、MAA向けに推奨されています。

      Exadataのターゲット・ノード2で基本的なパラメータ・ファイルを構成します。

      Exadata - ノード2(ターゲット)
      [oracle@qr01db02 ogg]$ vi startup.oby 
      
         -- Created by Joe Admin 10/11/2012 on Exadata qr01db02  
         DBLogin UserID oggadm2@dbm, Password pswd2a             
         Start Mgr                                               
         Info Mgr                                                
         Info CheckpointTable                                    
      
      [oracle@qr01db02 ogg]$ vi GLOBALS 
      
         -- Created by Joe Admin 10/11/2012 on qr01db02          
         CheckpointTable oggadm2.oggchkpt                        
      
      [oracle@qr01db02 ogg]$
                                                                                      
      

      パラメータ・ファイルmgr.prmが共有DBFS上にすでに存在する点に注意します。 これは、ノード1とノード2が同じポート(15002)を共有しており、一度に実行できるのは1つのノードのみであることを意味しています。 これは、2つのインスタンスを実行できるデータベースとは異なります。 ターゲット上で同時に実行できるのは、1つのOGGインスタンスのみになります。 この点は重要であるため、もう一度繰り返します。 ターゲット上で同時に実行できるのは、1つのOGGインスタンスのみになります。

      ここまでで、ベース・パラメータ・ファイルの作成は完了しました。

    以上で、OGGソフトウェアのインストールは完了です。

4. スキーマの準備

    目的

    ここでの目的は次のとおりです。

    • トランザクション・データの追跡の追加
    • TranData列の確認

    ここでは、サンプルのhr(人事管理)スキーマが、ソースおよびターゲットのOracle 11gデータベースにインストールされているものとします。

    4.1 トランザクション・データの追跡の追加

      表を追加するか、表の構造を変更するたびに、この処理を実行する必要があります。

      トランザクション・データの追跡は、単一の表、ワイルドカードを使用した表グループ、およびスキーマ全体に対して追加できます。 この例では、ソースのhost01上で単一表に対して、add TranDataを実行します。

      Host01 - Linux(ソース)
      GGSCI (host01) > Add TranData hr.regions 
      Logging of supplemental redo data enabled for table HR.REGIONS.
      
      GGSCI (host01) > Info TranData hr.* 
      
      Logging of supplemental redo log data is disabled for table HR.COUNTRIES.
      Logging of supplemental redo log data is disabled for table HR.DEPARTMENTS.
      Logging of supplemental redo log data is disabled for table HR.EMPLOYEES.
      Logging of supplemental redo log data is disabled for table HR.JOBS.
      Logging of supplemental redo log data is disabled for table HR.JOB_HISTORY.
      Logging of supplemental redo log data is disabled for table HR.LOCATIONS.
      
      Logging of supplemental redo log data is enabled for table HR.REGIONS.
      Columns supplementally logged for table HR.REGIONS: REGION_ID.
      
      GGSCI (host01) >
                                                                                      
      

      デフォルトでは、主キー列(ここではREGION_ID)のみが追跡される点に注意します。

      このステップは参照用です。実行しないでください。
      もう1つの方法として、次のいずれかのコマンドを実行して場合も同じ効果が得られます。
      Add TranData hr.reg*
      Add SchemaTranData hr

      このステップは参照用です。実行しないでください。
      ソース・スキーマとターゲット・スキーマが一致していない場合、defgen(表示されていません)を実行して、列マッピングの定義ファイルを作成する必要があります。 defgenについて、詳しくは『Oracle GoldenGate Windows and UNIX 管理者ガイド』の第13章:レプリケートされたデータとメタデータとの関連付けを参照してください。

      ここまでで、TransDataの追加は完了しました。

    以上で、トランザクション・データの追加は完了です。

5. データ抽出の構成

    目的

    ここでの目的は次のとおりです。

    • プライマリExtractの構成
    • セカンダリExtract(Data Pump)の構成
    • データベースへのプロセスの登録

    "データ抽出"は、"データ取得"とも呼ばれます。

    5.1 プライマリExtractの構成

      ソースのhost01からhr.regionsを抽出し、ローカルData Pumpに送信するように設定します。

      Host01 - Linux(ソース)
      GGSCI (host01) > Edit Param eregab 
      
         -- Primary Extract from host01(a) to QR01(b)            
         -- Created by Joe Admin on 10/11/2012                   
         -- SETENV(ORACLE_SID = "orcl")                          
         Extract eregab                                          
         ExtTrail ./dirdat/aa                                    
         UserID oggadm1@orcl, Password pswd1a                    
         -- TranLogOptions ExcludeUser oggadm1                   
         Table hr.regions;                                       
      
      GGSCI (host01) >
                                                                                      
      

      外部の証跡ファイルaaは、ソースのローカル・ファイルです。 将来的な双方向レプリケーションでは、おそらく、オプションのTranLogOptions ExcludeUserが使用されます。

      以上で、プライマリExtractの構成は完了です。 ここでは示していませんが、フィルタリングや列マッピングなど、他にも多数のオプションがあります。

    5.2 セカンダリExtract(Data Pump)の構成

      Data Pumpを使用する目的は、ネットワークが停止した場合に、より高い可用性を提供することです。 Data Pumpの使用は必須ではありませんが、MAA向けに推奨されています。 ソースのhost01でData Pumpを設定します。

      Host01 - Linux(ソース)
      GGSCI (host01) > Edit Param pregab 
      
         -- Data pump (secondary Extract) from host01(a) to qr01(b) 
         -- Created by Joe Admin on 10/11/2012                      
         Extract pregab                                             
         RmtHost qr01-vip, MgrPort 15002, Compress                  
         RmtTrail /mnt/DBFS/dbfs_big/ogg/dirdat/ab                  
         Passthru                                                   
         Table hr.regions;                                          
      
      GGSCI (host01) > 
                                                                                      
      

      リモート証跡ファイル(RmtTrail)は/etc/hostsに定義された仮想IPアドレスを使用して、リモート・ターゲットのDBFSロケーションに書き込まれています。 Table文(Extractで指定)とMap文(Replicatで指定)のみで、末尾にセミコロンが付加されるため、これらの文は複数行にわたって入力することができます。 その他の文は論理的に1行にする必要があります(入力した文が画面で折り返されても問題ありませんが、[Enter]は挿入しないでください)。

      以上で、Data Pumpの構成は完了です。

    5.3 データベースへのExtractプロセスの登録

      登録を実行するには、ローカル・データベース(DBLogin)にログインする必要があります。 ステップ3.3.1で作成したstartup.obyを使用すると、自動的にログインが行われます。 ソースのhost01にプライマリExtractを登録します。

      Host01 - Linux(ソース)
      GGSCI (host01) > Add Extract eregab, TranLog, Begin Now 
      EXTRACT added.
      
      GGSCI (host01) > Add ExtTrail ./dirdat/aa, Extract eregab, Megabytes 2 
      EXTTRAIL added.
      
      GGSCI (host01) > 
                                                                                      
      

      デフォルトのMegabytesのサイズは100MBです。 必要に応じて、トラフィックや遅延に合わせてこれを変更します。

      ソースのhost01にセカンダリExtract(Data Pump)を登録します。

      Host01 - Linux(ソース)
      GGSCI (host01) > Add Extract pregab, ExtTrailSource ./dirdat/aa 
      EXTRACT added.
      
      GGSCI (host01) > Add RmtTrail /mnt/DBFS/dbfs_big/ogg/dirdat/ab, 
                       Extract pregab, Megabytes 2 
      RMTTRAIL added.
      
      GGSCI (host01) > 
                                                                                      
      

      登録するこれらの値はすべて、パラメータ・ファイルの値に一致している必要があります。 Oracle GoldenGate DirectorなどのGUIツールを使用すると、すべての適合する値をウィザードから集めることができます。

      ここまでで、データベースへのExtractプロセスの登録は完了しました。

    以上で、データ抽出の構成は完了です。

6. データ配信(レプリケーション)の構成

    目的

    ここでの目的は次のとおりです。

    • Replicatの構成
    • チェックポイント表の作成
    • データベースへのReplicatプロセスの登録
    • Replicatプロセスの開始

    "データ配信"プロセスは"Replicat"(通常は、頭文字が大文字)とも呼ばれています。 "Replicat"の末尾の"e"は意図的に省略されています(長い話です)。

    6.1 Replicatの構成

      いずれかのターゲット・ノードでReplicatを構成します。 ここでは、ノード2に対してGGSCIコマンドを使用します(ノード1に対してはSQLコマンドを使用)。

      Exadata - ノード2(ターゲット)
      [oracle@qr01db02 dirdat]$ cd $OGG_HOME 
      [oracle@qr01db02 ogg]$ ./ggsci 
      GGSCI (qr01db02) 1> Obey startup.oby 
      GGSCI (qr01db02) 2> -- Created by Joe Admin 10/11/2012 on Exadata qr01db
      GGSCI (qr01db02) 3> DBLogin UserID oggadm2@dbm, Password pswd2a
      Successfully logged into database.
      
      GGSCI (qr01db02) 4> Start Mgr
      Manager started.
      
      GGSCI (qr01db02) 5> Info Mgr
      Manager is DOWN!
      
      GGSCI (qr01db02) 6> Info CheckpointTable
      No checkpoint table specified, using GLOBALS specification (oggadm2.oggchkpt)...
      Checkpoint table oggadm2.oggchkpt does not exist.
      
      GGSCI (qr01db02) 7> Edit Param rregab 
      
         -- Delivery from host01(a) to qr01db(b)                 
         -- Created by Joe Admin on 10/11/2012                   
         Replicat rregab                                         
         UserID oggadm2@dbm, password pswd2a                     
         AssumeTargetDefs                                        
         -- SourceDefs dirdef/dsalesab.def                       
         DiscardFile dirrpt/rsalesab.dsc, Append                 
         -- Map ogguser1.tcustmer, Target ogguser2.tcustmer;     
         Map hr.*, Target hr.*;                                  
      
      GGSCI (qr01db02) 8> Add Replicat rregab, 
                          ExtTrail /mnt/DBFS/dbfs_big/ogg/dirdat/ab 
      REPLICAT added.
      
      GGSCI (qr01db02) > 
                                                                                      
      

      startup.obyスクリプトから、Managerが停止しているという誤った通知が行われる場合があります。 Managerはミリ秒レベルで停止していたかもしれませんが、数秒後には実行中になっています。 このスクリプトは一時停止しないため、起動したコマンドよりも速く実行されます。 このタイミング上の異常を修正するには、Start mgrや複雑なDBLoginコールなどの時間のかかるコマンドの後にsh sleep 5文を実行して、GGSCIの処理が追いつくまで待機します。 GGSCIの自動化について、詳しくはこちらのOBEを参照してください。

      AssumeTargetDefsおよびSourceDefs(相互排他的にいずれかを選択)は、前述したdefgenユーティリティに関係があります。 ここでは示していませんが、フィルタリングや列マッピングなど、他にも多数のオプションがあります。

      以上で、Replicatの設定は完了です。

    6.2. チェックポイント表の作成

      チェックポイント表は必須ではありませんが、作成が強く推奨されています。 チェックポイント表はReplicatによってのみ使用されます(ソース・システムにチェックポイント表を配置しても問題もありません)。 Replicatごとに個別のチェックポイント表を作成することも、すべてのReplicatに対してグローバルなチェックポイント表を作成することもできます。

      GLOBALSパラメータで定義されたとおりに、汎用のチェックポイント表をターゲット・データベース上に作成します。

      Exadata - ノード2(ターゲット)
      GGSCI (qr01db02) > Add CheckpointTable 
      No checkpoint table specified, using GLOBALS specification (oggadm2.oggchkpt)...
      Successfully created checkpoint table oggadm2.oggchkpt.
      
      GGSCI (qr01db02) > 
                                                                                      
      

      startup.obyスクリプトを実行するたびに、チェックポイント表のステータスが通知されます。

      以上で、チェックポイント表の作成は完了です。

    6.3 Replicatプロセスの開始

      Extractを開始せずに、Replicatを開始しても問題ありません。 ReplicatはExtractが開始されるまで待機してから開始されます。

      ターゲットでReplicatプロセスを開始します。

      Exadata - ノード2(ターゲット)
      GGSCI (qr01db02) > Start * 
      Sending START request to MANAGER ...
      REPLICAT RREGAB starting
      
      GGSCI (qr01db02) > Info All 
      
      Program     Status      Group       Lag at Chkpt  Time Since Chkpt
      MANAGER     RUNNING                                           
      REPLICAT    RUNNING     RREGAB      00:00:00      00:00:02    
      
      GGSCI (qr01db02) > 
                                                                                      
      

      GGSCIを終了してから再起動した場合は、プロセスにもAutostartを使用できます。 または、次の様なコマンドを使用して、一部のプロセスを開始できます。
      Start ER * (初期タスクの代わりにすべてのExtractとReplicatを開始)
      Start RR* (ワイルドカードが指定されたすべてのプロセスを開始)
      Start Replicat rregab (1つのプロセスのみを明示的に開始)

      Managerによってプロセスがいったん開始または停止された後は、トラフィックの処理にはManagerは必要ありません。 ここまでで、データベースに対するReplicatの開始は完了しました。

    以上で、データ・レプリケーションの構成は完了です。

7. すべてのデータ同期のテスト

    目的

    ここでの目的は次のとおりです。

    • すべてのOGGプロセスの開始
    • データ行の挿入
    • データ行の選択

    Replicatの前にExtractを開始することもできましたが、この場合、証跡ファイルがいっぱいになるおそれがあります。 Replicatはステップ6.3で開始されました。

    7.1 すべてのOGGプロセスの開始

      Autostartを使用すると、このステップが簡単に実行できます。

      ソースのhost01ですべてのプロセスを開始します。

      Host01 - Linux(ソース)
      [oracle@host01 ~]$ cd $OGG_HOME 
      [oracle@host01 ogg]$ pwd 
      /u01/app/oracle/ogg
      [oracle@host01 ogg]$ ./ggsci 
      GGSCI (host01) 1> Obey startup.oby 
      GGSCI (host01) 2> -- Created by Joe Admin 10/11/2012 on host01
      GGSCI (host01) 3> DBLogin UserID oggadm1@orcl, Password pswd1a
      Successfully logged into database.
      
      GGSCI (host01) 4> Start Mgr
      MGR is already running.
      
      GGSCI (host01) 5> Info Mgr
      Manager is running (IP port host01.example.com.15001).
      
      GGSCI (host01) 6> Info CheckpointTable 
      No checkpoint table specified, using GLOBALS specification (oggadm1.oggchkpt)...
      Checkpoint table oggadm1.oggchkpt does not exist.
      
      GGSCI (host01) 7> Add CheckpointTable 
      No checkpoint table specified, using GLOBALS specification (oggadm1.oggchkpt)...
      Successfully created checkpoint table oggadm1.oggchkpt.
      
      GGSCI (host01) 8> Info All 
      
      Program     Status      Group       Lag at Chkpt  Time Since Chkpt
      MANAGER     RUNNING                                           
      EXTRACT     STOPPED     EREGAB      00:00:00      02:06:59    
      EXTRACT     STOPPED     PREGAB      00:00:00      02:06:38    
      
      GGSCI (host01) 9> Start * 
      
      Sending START request to MANAGER ...
      EXTRACT EREGAB starting
      
      Sending START request to MANAGER ...
      EXTRACT PREGAB starting
      
      GGSCI (host01) 10> Info All 
      
      Program     Status      Group       Lag at Chkpt  Time Since Chkpt
      MANAGER     RUNNING                                           
      EXTRACT     RUNNING     EREGAB      00:00:00      00:00:04    
      EXTRACT     RUNNING     PREGAB      00:00:00      00:00:08    
      
      GGSCI (host01) 11> Exit 
                                                                                      
      

      ソース上のチェックポイント表は必須ではなく、使用されてもいませんが、存在していても問題はありません。また、将来的に双方向のレプリケーションを実装した場合は必要になる場合もあります。

      以上で、すべてのOGGプロセスの開始は完了です。

    7.2 ソースでのデータ行の挿入

      変更前の表を表示します。 host01でhr.regionsにデータを2行挿入します。 トランザクションをコミットします。

      Host01 - Linux(ソース)
      [oracle@host01 ogg]$ sqlplus hr/hr@orcl 
      SQL> set sqlprompt 'host01_SQL> ' 
      host01_SQL> SELECT * from regions; 
      
       REGION_ID REGION_NAME
      ---------- -------------------------
               1 Europe
               2 Americas
               3 Asia
               4 Middle East and Africa
      
      host01_SQL> INSERT INTO regions values (10,'Polar'); 
      1 row created.
      
      host01_SQL> INSERT INTO regions values (11,'Oceans'); 
      1 row created.
      
      host01_SQL> COMMIT; 
      Commit complete.
      
      host01_SQL> SELECT * FROM regions; 
      
       REGION_ID REGION_NAME
      ---------- -------------------------
              10 Polar
              11 Oceans
               1 Europe
               2 Americas
               3 Asia
               4 Middle East and Africa
      
      6 rows selected.
      
      host01_SQL>
                                                                                      
      

      コミットされるまでは、何もレプリケートされません。

      以上で、ソースでのデータ行の挿入は完了です。

    7.3 ターゲットでのデータ行の選択

      ターゲット・データベースを参照するには、いずれのノードを使用することもできます。 新しい表データを表示します。

      Exadata - ノード1(ターゲット)
      [oracle@qr01db01 ~]$ sqlplus hr/hr 
      
      SQL*Plus: Release 11.2.0.2.0 Production on Wed Feb 27 17:48:34 2013
      Copyright (c) 1982, 2010, Oracle.  All rights reserved.
      Connected to:
      Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
      With the Partitioning, Real Application Clusters, Automatic Storage Management, 
      OLAP, Data Mining and Real Application Testing options
      
      qr01db_SQL> SELECT * FROM regions; 
      
       REGION_ID REGION_NAME
      ---------- -------------------------
              10 Polar
              11 Oceans
               1 Europe
               2 Americas
               3 Asia
               4 Middle East and Africa
      
      6 rows selected.
      
      qr01db_SQL> exit 
      Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 
      64bit Production With the Partitioning, Real Application Clusters, Automatic 
      Storage Management, OLAP, Data Mining and Real Application Testing options
      [oracle@qr01db01 DBFS]$ ll /mnt/DBFS/dbfs_big/ogg/dirdat/ 
      total 2
      -rw-rw-rw- 1 oracle oinstall 1374 Feb 27 17:47 ab000000
      [oracle@qr01db01 DBFS]$ ll /mnt/DBFS/dbfs_sm/ogg/dirchk/ 
      total 5
      -rw-rw-r-- 1 oracle oinstall 4096 Feb 27 17:50 RREGAB.cpr
      -rw-rw-r-- 1 oracle oinstall   54 Feb 27 17:50 RREGAB.cps
      [oracle@qr01db01 DBFS]$ 
                                                                                      
      

      DBFS上の証跡ファイルとチェックポイント・ファイルに注意してください。 logdumpなどのツールを使用すると、証跡ファイルを確認できます。

      サンプル・スキーマをインストールしているが、使用したことがない場合、おそらくスキーマはロックされています。 sqlplusで次のようなDBAコマンドを使用すると、hrスキーマのロックを解除できます。

      alter user hr identified by hr account unlock;

      ここまでで、ターゲットでのデータ行の選択は完了しました。

    以上で、すべてのデータ同期のテストは完了です。

まとめ

    Oracle GoldenGateを使用すると、このサンプル演習で行ったよりもさらに多くのことを実行できます。

    このチュートリアルで学習した内容は、次のとおりです。

    • ExadataでOracle GoldenGateをサポートするためのDBFSの構成
    • ExadataでマルチノードのIPアクセスをサポートするためのCluster Ready Servicesの構成
    • 既存表を同期するためのExtractプロセスとReplicatプロセスの構成および開始
    • サンプル・データを生成してレプリケーションの有効性をテストする

    参考資料

    このチュートリアルのトピックに関連するヘルプ・トピック

    著者

    • カリキュラム開発責任者: Steve Friedberg
    • 共著者: Peter Fusek、Stephan Haisley、Chris Lawless、Doug Reid、Matt Taylor

このOracle by Exampleをナビゲートする際、以下の機能を使用できます。

ヘッダー・ボタンの非表示:
ヘッダー内のボタンを非表示にするには、タイトルをクリックします。 ボタンを再表示するには、もう一度タイトルをクリックします。
トピック一覧ボタン:
すべてのトピックの一覧です。 いずれかのトピックをクリックすると、その項に移動します。
すべてのトピックを開く/閉じる:
すべての項に対する詳細を表示または非表示にします。 デフォルトでは、すべてのトピックが閉じられています。
すべてのイメージを表示/非表示:
すべてのスクリーンショットを表示または非表示にします。 デフォルトでは、すべてのイメージが表示されています。
印刷:
コンテンツを印刷します。 現在表示または非表示にされているコンテンツが印刷されます。

このチュートリアルの特定の項に移動するには、一覧からトピックを選択してください。