Oracle GoldenGate 11gの自動化

概要

    目的

    このチュートリアルでは、Oracle GoldenGateのタスクを自動化するために使用するツールとスクリプトについて例を挙げて説明します。 基本的に次の2つの方法で同じことを実行できます。

    • Obeyファイルを使用してGGSCIの内部からすべてを制御する
    • シェル・スクリプト(bashなど)を使用してGGSCIの外部からすべてを制御する

    所要時間

    約1時間(ただし、実際に何かを操作するわけではなく、多数の例を参照するだけです)。

    はじめに

    以下に示すスクリプト自体は、そのまま使用することはできません。これらのスクリプトは、どのようなことが実行可能かというイメージを提供し、それらを実行するために使用する構文を示すためのものです。 これらのスクリプトは修正することで使用できるようになりますが、必要な修正は簡単なものです。 Obeyスクリプトはプラットフォームに依存しませんが、データベース・ログイン(DBLogin)パラメータはプラットフォームによって異なる場合があります(OracleとDB2とMySQLで異なるなど)。 シェル・スクリプトはbashに基づいていますが、非常に単純であるため、基本的なリダイレクションにより他のOSシェルでも使用できます。 どのスクリプトもテストやブランチングを行いません(GGSCIコマンドはリターン・コードを生成しません)。

    シナリオ

    my」で始まるイタリック体の部分はすべて、実際の情報と置き換える必要があります。 たとえば、Oracle DBサンプル・スキーマを使用する場合、「myuserid」を「SCOTT」などに置き換え、「mypassword」を「TIGER」などに置き換え、その他も同様に処理します。

    以下の例では、2つのOracle 11gデータベースがあり、どちらもLinuxホストで動作していると仮定しています。 また、ソース・ホストは「mysrchost」、ターゲット・ホストは「mytrghost」、ソース・データベース・スキーマは「mysrcdb」、ターゲット・データベース・スキーマは「mytrgdb」とそれぞれ命名されおり、ソースSIDは「sorcl」、ターゲットSIDは「torcl」であるものとします。

    ハードウェアとソフトウェアの要件

    ハードウェアとソフトウェアの要件リストは、以下のとおりです。

    • Oracle GoldenGate 11g
    • 2つのOGGインスタンス(ソースおよびターゲット)を実行できるハードウェア (2つのホストでも1つのホスト上の2つのディレクトリでも可)
    • データベース(Oracle Database 11gなど)
    • 2つのDBインスタンス(ソースおよびターゲット)を実行できるハードウェア (2つのホストでも1つのホスト上の2つのインスタンス/スキーマでも可)

    前提条件

    このチュートリアルを始める前に、以下のことを確認してください。

    • Oracle GoldenGate 11g(以降、「OGG」)にアクセスできるか、OGGがインストールされている。
    • OGGドキュメントにアクセスできるか、OGGドキュメントがインストールされている(一般に、ドキュメントのWebページ11.2.1といった特定のバージョンからオンラインで参照できます)。

トピック1: ユーザー(キーボード)の自動化

    複雑なタスクや繰り返しの多いタスクを実行するには手の込んだスクリプトが役立ちますが、システムの日常的なメンテナンスでは、むしろ、1回限りのコマンドを手作業で入力する必要があります。 コマンドのキーボード入力を容易にするために、以下のツールの使用を検討してください。

    1.1: コマンドラインの自動化:rlwrap

      ほとんどのオペレーティング・システムのプロンプトには、最近入力したいくつかのコマンドを表示および編集するための履歴メカニズムが組み込まれていますが、オラクルのユーティリティには、この機能のないものがあります。 たとえば、上下の矢印キーを押すことで、最近入力したいくつかのコマンドを調べ、再入力し、編集することができれば便利です。

      標準免責事項: オラクルは、rlwrapなどの外部ユーティリティの適合性および可用性に関して、明示的、暗示的に関わらず、いかなる主張も行いません。 オラクルは、オラクル製ではない他のどのユーティリティへの言及に関しても報酬を受けません。

      http://utopia.knoware.nl/~hlub/uck/rlwrap/で提供されているrlwrapパッケージをインストールします。

      README.txt
      rlwrap v 0.35  January 8 2010
      
      * WHAT IT IS: 
      
      rlwrap is a 'readline wrapper', a small utility that uses the GNU
      readline library to allow the editing of keyboard input for any
      command. I couldn't find anything like it when I needed it, so I wrote
      this one back in 1999.  By now, there are (and, in hindsight, even
      then there were) a number of good readline wrappers around, like rlfe,
      distributed as part of the GNU readline library, and cle
      (http://kaolin.unice.fr/Cle/).  rlwrap should be especially useful
      when you need user-defined completion (by way of completion word
      lists) and persistent history, or if you want to program 'special
      effects' using the filter mechanism. rlwrap compiles and runs on a 
      fairly wide range of Unix-like systems.
                                                                                      
      

      このユーティリティは、GGSCIと同様にSQL*Plus(sqlplus)にも使用できます。

      起動する前にユーティリティをラップするエイリアスを定義します。

      ~/.bash_profile
      ...(other lines not shown)...
      alias sqlplus='rlwrap sqlplus'
      alias ggsci='rlwrap ./ggsci'
                                                                                      
      

      sqlplusは、正しい$PATH変数を必要とし、そのためにどこからでも起動できる一方で、ggsciは、エイリアスに./が含まれている必要があり、そのために適切なOGGホーム・ディレクトリから起動しなければならないことに注意してください。

      rlwrapは、必ずしも必要ではありませんが、すぐにggsciおよびsqlplusコマンドを「普段」使用する上でなくてはならない追加のツールとなります。

    1.2: コマンドラインの確認: (感嘆符)

      一部のGGSCIコマンドは、確認を求める「Are you sure? (y/n)」に応じないと処理されません。 キーボード入力では、この確認を省略できると便利な場合があります。 バックグラウンド・スクリプトでは、この確認は絶対に必要です。 一般に、コマンドの最後に感嘆符を追加すると、「本当に実行するので、確認は不要です」という意味になります。

      Managerの停止および起動の例:

      GGSCI Session
      GGSCI (myhost) >  Stop mgr 
      Manager process is required by other GGS processes.
      Are you sure you want to stop it (y/n)? y
      
      Sending STOP request to MANAGER ...
      Request processed.
      Manager stopped.
      
      GGSCI (myhost) >  Start mgr 
      Manager started.
      
      GGSCI (myhost) >  Stop mgr !
      Sending STOP request to MANAGER ...
      Request processed.
      Manager stopped.
      
      GGSCI (myhost) > 
                                                                                      
      

      複数プロセスの同時削除の例:

      GGSCI Session
      GGSCI (myhost) >  Delete ER west* 
      Are you sure you want to delete all groups? y
      Deleted EXTRACT WEST_EAB.
      Deleted EXTRACT WEST_PAB.
      Deleted REPLICAT WEST_RBA.
      
      GGSCI (myhost) >  Delete ER east* ! 
      Deleted EXTRACT EAST_EBA.
      Deleted EXTRACT EAST_PBA.
      Deleted REPLICAT EAST_RAB.
      
      GGSCI (myhost) > 
                                                                                      
      

    1.3: 環境変数

      GGSCIでは環境変数($ORACLE_SIDなど)を利用できますが、このために何かを実行する必要はありません。 ただし、いくつかの変数を定義することにより、スクリプトの自動入力を実現し、キーストロークを減らす(結果的にタイプミスが減る)ために役立つ場合があります。 どのような種類のキーボード・ショートカットにも適用できます。

      OGGのインストール・ディレクトリを定義します。 これは、.bash_profileからエクスポートできますが、個別のsetenv.shで定義することもできます(どちらでも可)。 特に注目する必要があるのは、2つのOGG変数です。

      setenv.sh
      ORACLE_HOME=/u01/app/oracle/product
      JAVA_HOME=/usr/java/jdk1.7.0_09
      export ORACLE_HOME JAVA_HOME 
      OGG_SRC=$ORACLE_HOME/ogg/source
      OGG_TRG=$ORACLE_HOME/ogg/target
      export OGG_SRC OGG_TRG 
      PATH=$JAVA_HOME/bin:$PATH
      LD_LIBRARY_PATH=$ORACLE_HOME/11.2.0/dbhome_1/lib:$JAVA_HOME/jre/lib/amd
         64:$OGG_TRG:$JAVA_HOME/jre/lib/amd64/server
      export PATH LD_LIBRARY_PATH
                                                                                      
      

      64:」で始まる字下げされた行は、前の行から続いています。つまり、LD_LIBRARY_PATHから「amd64/server」までが1つの行です。

      キー入力を減らすための環境変数の使用例:

      OS Session
      [OS prompt]$  ls $OGG_SRC/dirprm 
      west_rba.prm   west_eab.prm   west_pab.prm
      
      [OS prompt]$
                                                                                      
      

    1.4: すべてのユーザーに有益なObeyスクリプト:startup、shutdown

      GGSCIを再起動するたびに入力することが非常に有益ないくつかのコマンドがあります。 不適切なコンテキストで間違って「コピー」するためのショートカット・キーである[Ctrl]+[C]キーを押すことにより、GGSCIは非常に容易に誤って停止(キル)されます。 次のコマンドは非常に便利であるため、まだ設定していない場合には設定することをお勧めします。すでに設定している場合に再入力しても問題ありません。

      startup.oby
      --------------------------------------------------------------------------
      -- DISCLAIMER:                                                          --
      --    This script is provided for educational purposes only. It is NOT  --
      --    supported by Oracle World Wide Technical Support.                 --
      --    The script has been tested and appears to work as intended.       --
      --    You should always run new scripts on a test instance initially.   --
      --    Copyright (c) Oracle Corp. 2012. All Rights Reserved.             --
      --------------------------------------------------------------------------
      
      -- Useful as first thing when (re)starting ./ggsci, esp after shutdown_ogg.sh
      
      DBLogin UserID myogguser, Password mypassword
      Start mgr
      Set Editor gedit
      Add  CheckpointTable
      Info CheckpointTable
      Info All
                                                                                      
      

      GGSCIプロンプトで次のように起動します。

      GGSCI > Obey startup.oby

      テストが完了し、OGGをクリーンな環境にリストアする必要があるときには、多くの場合、次のテストのためにプロセスとディレクトリをクリーンな状態のままにできるshutdownスクリプト(startupの逆)が役立ちます。

      shutdown_ogg.sh
      #--------------------------------------------------------------------------#
      #-- DISCLAIMER:                                                          --#
      #--    This script is provided for educational purposes only. It is NOT  --#
      #--    supported by Oracle World Wide Technical Support.                 --#
      #--    The script has been tested and appears to work as intended.       --#
      #--    You should always run new scripts on a test instance initially.   --#
      #--    Copyright (c) Oracle Corp. 2012. All Rights Reserved.             --#
      #--------------------------------------------------------------------------#
      
      # Use to reset OGG environment to a stopped state. Run as OS user=oracle.
      
      #kill west (source) OGG
      export ORACLE_SID=sorcl
      cd $OGG_SRC
      ./ggsci <<EOF
      Start Manager
      DBLogin UserID myogguser, Password mypassword
      Delete Extract eini
      Stop ER *
      Delete ER * !
      Delete CheckpointTable !
      Stop Manager !
      Exit
      EOF
      
      rm ./dirdat/*
      rm ./dirrpt/*
      
      #kill east (target) OGG
      export ORACLE_SID=torcl
      cd $OGG_TRG
      ./ggsci <<EOF
      Start Manager
      DBLogin UserID myogguser, Password mypassword
      Delete Replicat rini
      Stop ER *
      Delete ER * !
      Delete CheckpointTable !
      Stop Manager !
      Exit
      EOF
      
      rm ./dirdat/*
      rm ./dirrpt/*
                                                                                      
      

      OSプロンプトで次のように起動します。

      [username path]$ ./shutdown_ogg.sh

      einiriniが明示的に削除されていることに注意してください。これは、初期ロード・タスクがDelete ER *ワイルドカードに含まれないためです。

トピック2: GGSCI(Obey)の自動化

    GGSCIを実行している場合は、複数のGGSCIコマンドを組み合わせて実行する作業やソース・ディレクトリとターゲット・ディレクトリの内外で*.prmファイルを移動させる作業が継続的に必要になります。 Obeyファイルには任意の拡張子を使用でき、慣例的に「.oby」などが使用されます。 GGSCI内からタスクを制御するには、以下の手順を実行します。

    2.1: Obey内からのシェル・コマンドの呼出し

      多くの場合、絶対パスを使用する必要があります。

      mysample211.oby
      -- Always have a comment at the top.
      -- Created by Joe Admin on 12/12/12
      sh rm /u01/ogg_src/dirrpt/*
      sh rm /u01/ogg_trg/dirrpt/*
      sh cp /home/myuserid/targets/*.prm  /u01/ogg_src/dirprm
      sh cp /home/myuserid/targets/*.def  /u01/ogg_trg/dirdef
      DBLogin UserID myuserid, Password mypassword
      List Tables *
                                                                                      
      

      いくつかの環境変数($ORACLE_HOMEなど)を使用でき、相対パス(../..など)を使用することもできますが、GGSCI内の$HOMEに関してチルダ(~)ショートカットを使用することはできません。

      残念なことに、コマンドの完了に関する非同期の問題が存在するために、スクリプトの全体にわたってsh sleep 5ステートメントを点在させなければならない場合があります。 たとえば、次の例でsleepがなかったとします。DBLoginは完了に3秒かかりますが、スクリプトでは、その行によってログインが開始された直後に次のステートメント(List Tables)が開始されるため、ログインが完了していないとエラーが発生します。

      mysample212.oby
      -- Created by Joe Admin on 12/12/12
      -- Connect to DB and list schema
      DBLogin UserID myuserid, Password mypassword
      sh sleep 5
      List Tables *
      -- Bounce the Manager
      Stop mgr !
      sh sleep 3
      Start mgr
      sh sleep 3
      Info mgr
                                                                                      
      

      ファイルが保存されているディレクトリからファイルを削除することを試みる場合は、問題なく実行され、メッセージは表示されません。 すでに空になっているディレクトリからファイルを削除することを試みると、次のような誤解を招きかねないメッセージが表示されます。
      rm: cannot remove `dirrpt/*': No such file or directory
      これは、通常のOSプロンプトから実行した場合と同じ動作です。

    2.2: Obey内からのSQL*Plusコマンドの呼出し

      資格証明およびSIDをインラインで使用してsqlplusを起動します。スクリプトにアットマークを追加してください。 拡張子の「.sql」はオプションであり、なくてもかまいませんが、自動入力のために役立ちます。

      mysample221.oby
      -- Created by Joe Admin and Dee Beeay on 12/12/12
      sh sqlplus myuserid@sorcl/mypassword @mysourcescript.sql
      sh sqlplus myuserid@sorcl/mypassword @./dirsql/mysourcescript.sql
      sh sqlplus myuserid/mypassword @mytargetscript.sql 
      sh sqlplus myuserid@torcl/mypassword @/mypath1/mypath2/mytargetscript.sql 
                                                                                      
      

      SQLスクリプトの最後に「exit」があることを確認してください。これがないと、SQLスクリプトが完了した後にsqlplus内に取り残されるため、GGSCI Obeyスクリプトがその時点でハングします。

      最初の行は、SQLスクリプトがOGGホーム・ディレクトリにあることが前提となっています。 いくつかのスクリプト(demo_ora_*.sqlなど)は、その場所にデフォルトで保存されています。

      2行目は、SQLスクリプトがOGGホームのdirsqlディレクトリに移されていることが前提となっています。 このディレクトリは、OGG関連のSQLスクリプトの保存に適した場所です。

      3行目では、明示的なSIDが省略されています。つまり、常に@ORACLE_SIDの現在の定義を使用することが前提となっています。

      4行目(最後の行)は、SQLスクリプトがどこに保存されていても実行できることを示しています。

      SQL*Plusでは、コマンドのエコーを有効または無効にできます。 これにより、デバッグ用に「set echo on」を設定し、後で本番環境において使用する際には「set echo off」を設定することができるため便利です。

      SQL*Plus
      SQL>  set echo on  
      SQL>  set echo off  
                                                                                      
      

    2.3: Obey内からのGGSCIコマンドの呼出し

      GGSCIプロンプトから使用する場合と同様に使用します。

      mysample231.oby
      -- Created by Joe Admin on 12/12/12
      Add Extract extwest, TranLog, Begin Now
      Add ExtTrail ./dirdat/ew, Extract extwest, Megabytes 50
      Add Extract pwest, ExtTrailSource ./dirdat/ew
      Add RmtTrail ./dirdat/pe, Extract pwest, Megabytes 50
      Shell sleep 3
      Info ER *
      Start ER *
      Shell sleep 3
      Info ER *
                                                                                      
      

      デバッグ時にエラーの発生を確認できるように、プロセス開始の前後に「Info ER *」を実行することをお勧めします。 残念なことに、「Start ER *」ではテスト可能なものが返されないため、表示されるメッセージを逐一確認する必要があります。

      注意が必要なものは、折り返された長い行だけです。 テキスト・エディタを使用して、継続文字を使用せずに、長いコマンドをすべて1行で記述してください。

      新しいAllowNestedコマンドは、ネストされたObeyファイルの使用を可能にします。 「ネストされたObeyファイル」とは、別のObeyファイルを含むObeyファイルのことです。 ネスト・レベルの最大数は16です。

      mysample232.oby
      -- Created by Joe Admin on 12/12/12
      Obey startup.oby
      Add Extract morning, TranLog, Begin Now
      Add ExtTrail ./dirdat/xy, Extract morning
      Start Extract  morning
      Start Replicat morning
      sh sleep 300
      Obey shutdown.oby
                                                                                      
      

      これは、頻繁に使用する共通の起動またはシャットダウン・ルーチンがある場合に特に役立ちます。

    2.4: 未サポート: test!コマンド

      GGSCIのtestコマンドは、サポートされておらず、文書化されていないため、どのバージョンでも通常は使用されません。 このため、本番環境での使用は推奨されませんが、テスト環境では使用される場合があります。

      GGSCI Session
      GGSCI (myhost) 1> test 
      
      Usage: TEST genericTestFileName
      
      Note: TEST is undocumented GGSCI command and is not supported.
      
      Purpose of TEST is to provide generic cross-platform utility of testing with Go
      ldenGate software.
      
      What does TEST do for you? 
      1. lets you write many files in one and then unpack them. Each file can reside 
         in different directory.
      2. provides string substitution across many files in consistent way.
      3. gives you centralized repository of substitution values in file 'ggtest'.
      
      TEST may make many tests situations (not all) easier to replicate on different 
      systems.
                                                                                      
      

      Obey、SQL*Plus、およびファイル作成ツールを組み合わせて1つの大きなテキスト・バンドルにするという方法があります。

      包括的なテスト・テキスト・ファイルの例(置換変数に注意してください):

      gtest242.txt
      ~~readme
        This is readme file
      ~~dirsql/mySQLFile.sql
        INSERT INTO myTable VALUES (3);
      ~~dirprm/ext99.prm
        EXTRACT ext99
        USERID ~suser~~db~, PASSWORD ~spass~
        RMTHOST ~host~, mgrport ~mgr~
        RMTTRAIL ./dirdat/b1
        TABLE ~suser~.DDL_COL;
      ~~dirprm/rep99.prm
        REPLICAT rep99
        USERID ~tuser~ PASSWORD ~tpass~
        MAP ~suser~.TAB* TARGET ~tuser~.*
      ~~test_obey.ob
        SQLPLUS ~suser~/~spass~ < ./dirsql/mySQLFile.sql
        DELFILE ./dirdat/k3
        DELETE REPLICAT rep99
        ADD REPLICAT rep99, EXTTRAIL ./dirdat/e2, NODBCHECKPOINT
                                                                                      
      

      このコマンドの実装方法に関する詳細な説明は省略します。

トピック3: シェル(スクリプト)の自動化

    実行しなければならないタスクの大半がGGSCIの外部で実行されるものの、いくつかのGGSCIコマンドが依然として含まれているという状況も考えられます。 このような状況では、全体的な動作を(特に複数のGGSCIインスタンスの起動と停止に使用できる)OSシェル・スクリプトから制御する方が容易である場合があります。

    3.1: シェル・スクリプト内からのシェル・コマンドの呼出し

      当然のことながら、実行する内容に応じて簡単にも複雑にもなります。 例として、任意の./profileについて説明します。

      /etc/profile
      # /etc/profile
      
      # System wide environment and startup programs, for login setup
      # Functions and aliases go in /etc/bashrc
      
      # It's NOT a good idea to change this file unless you know what you
      # are doing. It's much better to create a custom.sh shell script in
      # /etc/profile.d/ to make custom changes to your environment, as this
      # will prevent the need for merging in future updates.
      
      pathmunge () {
          case ":${PATH}:" in
              *:"$1":*)
                  ;;
              *)
                  if [ "$2" = "after" ] ; then
                      PATH=$PATH:$1
                  else
                      PATH=$1:$PATH
                  fi
          esac
      }
      
      
      if [ -x /usr/bin/id ]; then
          if [ -z "$EUID" ]; then
              # ksh workaround
              EUID=`id -u`
              UID=`id -ru`
          fi
          USER="`id -un`"
          LOGNAME=$USER
          MAIL="/var/spool/mail/$USER"
      fi
       (...more lines not shown for clarity...) 
                                                                                      
      

      シェル・スクリプトの作成に関する1週間のコースがあります。 ここでは、これ以上は説明できません。

      一般に注意しなければならないのは、二重引用符(" ")、直線の一重引用符(' ')、斜線の引用符(` `)、およびドル($ $)記号です。これらはすべて、シェル・スクリプトに対して特別な意味を持つため、SQL*PlusまたはGGSCI内で使用するときにエスケープ処理が必要になる場合があります。

    3.2: シェル・スクリプト内からのSQL*Plusコマンドの呼出し

      アットマーク(@)を使用することにより、複数の個別の.sqlテキスト・ファイルをsqlplusへの入力としてリダイレクトできますが、ほんの数コマンドであれば、次のようにスクリプトによってインラインで入力する方が容易である場合があります。

      mysample321.sh
      # Created by Joe Admin on 12/12/12
      
      cd ~/labs/Section14/Practice14-1/sqlscripts
      export ORACLE_SID=sorcl
      sqlplus myuserid/mypassword <<EOF
      CREATE TABLE mytable (mycol1 VARCHAR2(20), mycol2 NUMBER(8,2), mycol3 CHAR(5));
      SELECT COUNT(*) FROM mytable;
      INSERT INTO mytable VALUES ('ABC123', 100.75, 'WEST');
      COMMIT;
      EXIT;
      EOF
      echo '**Created, truncated, seeded WEST/Source tables.'
      sleep 3
      
      cd ~/labs/Section14/Practice14-2/sqlscripts
      export ORACLE_SID=torcl
      sqlplus myuserid/mypassword <<EOF
      @database.sql
      @seed_database.sql
      EOF
      echo '**Created, truncated, seeded EAST/Target tables.'
      sleep 3
      
      cd ~/labs/Section14/Practice14-3/sqlscripts
      export ORACLE_SID=torcl
      sqlplus myuserid/mypassword @database.sql
      echo '**Created, truncated, seeded NORTH/Target tables.'
      sleep 3
                                                                                      
      

      最初の例には、外部ファイルがありません。すべてのSQLコマンド(exitを含む)がインラインです。

      2つ目の例には、2つ以上の外部@ファイルがあります。最初の外部@ファイルである@database.sqlexitコマンドで終わっていないため、2つ目の外部@ファイルである@seed_database.sqlexitが組み込まれている必要があります。

      最後の例には、呼び出す@ファイルが1つだけあります。このため、<<EOF構成要素は不要です。

      v$database」のドル記号を「エスケープ」しなければならないことに注意してください。

      mysample322.sh
      #--------------------------------------------------------------------------#
      #-- DISCLAIMER:                                                          --#
      #--    This script is provided for educational purposes only. It is NOT  --#
      #--    supported by Oracle World Wide Technical Support.                 --#
      #--    The script has been tested and appears to work as intended.       --#
      #--    You should always run new scripts on a test instance initially.   --#
      #--    Copyright (c) Oracle Corp. 2012. All Rights Reserved.             --#
      #--------------------------------------------------------------------------#
      
      # Use this script to complete Lab 5. Run as OS user=oracle.
      # WARNING! This overlays whatever you may have had in your own config files!
      
      cd ~/labs/Section5/sqlscripts/
      export ORACLE_SID=amer
      sqlplus west/oracle_4U @source_database.sql
      sqlplus west/oracle_4U @seed_database.sql
      sqlplus / as sysdba <<EOF
      GRANT dba TO gguser IDENTIFIED BY oracle_4U;
      CONN gguser/oracle_4U
      SHOW USER
      SHOW PARAMETER NAME
      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
      ALTER SYSTEM SWITCH LOGFILE;
      SELECT supplemental_log_data_min FROM v\$database;
      exit
      EOF
      
      export ORACLE_SID=euro
      sqlplus east/oracle_4U @target_database.sql
      sqlplus / as sysdba <<EOF
      GRANT dba TO gguser IDENTIFIED BY oracle_4U;
      CONN gguser/oracle_4U
      SHOW USER
      SHOW PARAMETER NAME
      ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
      ALTER SYSTEM SWITCH LOGFILE;
      SELECT supplemental_log_data_min FROM v\$database;
      exit
      EOF
                                                                                      
      

    3.3: シェル・スクリプト内からのGGSCIコマンドの呼出し

      EOFまでのファイル内からのリダイレクションに注意してください。 ORACLE_SID変数を設定することにより、@sidmyogguser@torclなど)でサインオンする必要がなくなることに注意してください。

      mysample331.sh
      # Always include a comment at the top
      # Created by Joe Admin on 12/12/12
      # kill west (amer) OGG
      export ORACLE_SID=torcl
      cd $OGG_TRG_HOME
      ./ggsci <<EOF
      Start Manager
      DBLogin UserID myogguser, Password mypswd
      Delete Extract myini
      Stop ER *
      Delete ER * !
      Delete CheckpointTable !
      Stop Manager !
      Exit
      EOF
      
      rm ./dirdat/*
      rm ./dirrpt/*
                                                                                      
      

      シェル・スクリプト内でSQL*Plusを使用する場合と同様に、シェル・スクリプト内で別のコマンドを続けて実行する場合は、「Exit」を最後に組み込む必要があることに注意してください。

      また、シェル接頭辞の「sh」を使用することにより、GGSCI部分の最後に2つのremoveコマンドを挿入できることにも注意してください。 これにより、同じことが実行されます。

      ここで、すべてが統合された、オラクルのOGGコースの一つで扱われる複雑な例を示します。 これにより2つのGGSCIインスタンス(同じホストで実行される)が制御されることに注意してください。

      ~\D66519GC20_labs\labs\Section13\catchup13.sh
      #--------------------------------------------------------------------------#
      #-- DISCLAIMER:                                                          --#
      #--    This script is provided for educational purposes only. It is NOT  --#
      #--    supported by Oracle World Wide Technical Support.                 --#
      #--    The script has been tested and appears to work as intended.       --#
      #--    You should always run new scripts on a test instance initially.   --#
      #--    Copyright (c) Oracle Corp. 2012. All Rights Reserved.             --#
      #--------------------------------------------------------------------------#
      
      # Use this script to complete Lab 13. Run as OS user=oracle.
      # WARNING! This overlays whatever you may have had in your own config files!
      
      ~/labs/setup/kill-all-ogg.sh
      echo '**Killed all old processes.'
      sleep 3
      
      cp ~/labs/Section13/solutions/def* $GG_AMER_HOME/dirprm
      cp ~/labs/Section13/solutions/def* $GG_EURO_HOME/dirprm
      cp ~/labs/Section13/solutions/efu* $GG_AMER_HOME/dirprm
      cp ~/labs/Section13/solutions/ENC* $GG_AMER_HOME
      cp ~/labs/Section13/solutions/ENC* $GG_EURO_HOME
      cp ~/labs/Section13/solutions/mac* $GG_AMER_HOME/dirmac
      cp ~/labs/Section13/solutions/mac* $GG_EURO_HOME/dirmac
      cp ~/labs/Section13/solutions/pfu* $GG_AMER_HOME/dirprm
      cp ~/labs/Section13/solutions/rfu* $GG_EURO_HOME/dirprm
      cp ~/labs/Section13/solutions/sec* $GG_AMER_HOME/dirdef
      cp ~/labs/Section13/solutions/sec* $GG_EURO_HOME/dirdef
      echo '**Copied solutions to running OGG folders.'
      sleep 3
      
      cd ~/labs/Section13/sqlscripts
      export ORACLE_SID=amer
      sqlplus west/oracle_4U  @source_database.sql
      echo '**Created, truncated, seeded WEST/amer tables.'
      sleep 3
      
      cd ~/labs/Section13/sqlscripts
      export ORACLE_SID=euro
      sqlplus east/oracle_4U  @target_database.sql
      echo '**Created, truncated, seeded EAST/euro tables.'
      sleep 3
      
      cd $GG_AMER_HOME
      export ORACLE_SID=amer
      ./ggsci <<EOF
      Obey /home/oracle/labs/setup/startup.oby
      Shell sleep 5
      Add TranData WEST.*
      EOF
      echo '**Created WEST checkpoint tables.'
      sleep 3
      
      cd $GG_EURO_HOME
      export ORACLE_SID=euro
      ./ggsci <<EOF
      Obey /home/oracle/labs/setup/startup.oby
      Shell sleep 5
      EOF
      echo '**Created EAST checkpoint tables.'
      sleep 3
      
      cd $GG_AMER_HOME
      export ORACLE_SID=amer
      ./ggsci <<EOF
      Obey /home/oracle/labs/setup/startup.oby
      Shell sleep 5
      Add Extract efuncs, TranLog, Begin Now
      Add ExtTrail ./dirdat/ex, Extract efuncs, Megabytes 1
      Add ExtTrail ./dirdat/ec, Extract efuncs, Megabytes 1
      Add Extract pfuncs, ExtTrailsource ./dirdat/ex
      Add RmtTrail ./dirdat/px, Extract pfuncs, Megabytes 1
      Add Extract pfunca, ExtTrailsource ./dirdat/ec
      Add RmtTrail ./dirdat/pc, Extract pfunca, Megabytes 1
      Shell sleep 5
      Info ER *
      Exit
      EOF
      echo '**WEST created, but not started.'
      sleep 3
      
      cd $GG_EURO_HOME
      export ORACLE_SID=euro
      ./ggsci <<EOF
      Obey /home/oracle/labs/setup/startup.oby
      Shell sleep 5
      Add Replicat rfunc, ExtTrail ./dirdat/px
      Add Replicat rfunca, ExtTrail ./dirdat/pc
      Shell sleep 5
      Info ER *
      Exit
      EOF
      echo '**EAST created, but not started.'
      sleep 3
      
      cd $GG_AMER_HOME
      export ORACLE_SID=amer
      ./ggsci <<EOF
      Obey /home/oracle/labs/setup/startup.oby
      Shell sleep 3
      Start ER *
      Shell sleep 12
      Info ER *
      Exit
      EOF
      echo '**WEST started.'
      sleep 3
      
      cd $GG_EURO_HOME
      export ORACLE_SID=euro
      ./ggsci <<EOF
      Obey /home/oracle/labs/setup/startup.oby
      Shell sleep 3
      Start ER *
      Shell sleep 12
      Info ER *
      Exit
      EOF
      echo '**EAST started.'
      sleep 3
      
      cd ~/labs/Section13/sqlscripts
      export ORACLE_SID=amer
      sqlplus west/oracle_4U <<EOF
      @trans_generator.sql
      exit
      EOF
      echo '**Target WEST tables should now have more data. '
      echo 'Run (SELECT * FROM wshop_encrypt;) to see.'
                                                                                      
      

      ファイルのコピーとクリーンアップにおいて、システムが生成するレポート・ファイル名の「*.RPT」は常に大文字ですが、慣例的にすべてのプロセスの「*.prm」ファイル名が常に小文字になっていることに注意してください。

まとめ

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

    • 時間を節約できる巧みな手法によるキーボードからのOGGタスクの制御
    • ObeyファイルからのOGGタスクの制御
    • OSスクリプトファイルからのOGGタスクの制御

    参考資料

    他にも、以下のような、利用可能な多数のOGG学習コンテンツが用意されています。

    • 特定のドキュメント、ビューレット、サンプル、およびOTNのOLN URL
    • 特定のコース(各テーマを詳細に学習できます)
    • 関連情報が記載された外部Webサイト
    • Oracle GoldenGateの詳細は、Oracle Learning Libraryにある追加のOracle By Example(OBE)(特に「subject」にある一連のOBE)を参照してください。

    著者

    • カリキュラム開発責任者: Steve Friedberg
    • 他のSMEの著者: Pete Daly、Chris Lawless、Steve George

To help navigate this Oracle by Example, note the following:

Hiding Header Buttons:
Click the Title to hide the buttons in the header. To show the buttons again, simply click the Title again.
Topic List Button:
A list of all the topics. Click one of the topics to navigate to that section.
Expand/Collapse All Topics:
To show/hide all the detail for all the sections. By default, all topics are collapsed
Show/Hide All Images:
To show/hide all the screenshots. By default, all images are displayed.
Print:
To print the content. The content currently displayed or hidden will be printed.

To navigate to a particular section in this tutorial, select the topic from the list.