ADB HOL #8-3:GoldenGateを利用したデータベース移行(前半)

Version 16

    目次に戻る : チュートリアル : Oracle Cloud Infrastructure を使ってみよう

    >ADBコンテンツ一覧に戻るAutonomous Database ハンズオンラボ

     

    既存の Oracle Database のデータを最小限のダウンタイムで Autonomous Database に移行するためにはどうすればよいでしょうか?

    この章では GoldenGate (Microservice Architecture) on Marketplace (以下、GoldenGate) を利用したAutonomous Databaseへの移行手順を記載しています。

     

    尚、本章は ADB HOL #1~#7 までを実施済みであることを前提に記載しています。

    従って、ソースDBとしては先の章で作成したDBCSインスタンス、サンプルアプリとしてはSwingBenchを利用しており、

    インスタンス (Autonomous DB / 仮想マシン (Developer Image) / DBCS) の名前やユーザー名、パスワードは ADB HOL #1~#7 のものを踏襲しています。

    異なる場合は適宜読み替えて実施してください。

     

    GoldenGate (Microservice Architecture) on Marketplace に関するお得情報

    2020/02現在、以下のプロモーションが実施されております。詳細は担当営業、もしくは こちら にお問い合わせください。

    • 30日間フリートライアル
    • 顧客による既存ライセンスの持込 (Term, Processor, Named User, etc)
    • 2019年5月末までにUCM/Creditご契約済みの御客様に限り、2020年12月末までGoldenGate部分を無償で利用可能
    • 2020年12月末までは、OCI Cloud Database環境へのレプリケーション用途に限り、GoldenGate部分は無償で利用可能

    (GoldenGateの稼働環境となるIaaS(Compute + Storage)部分については、UCM/Creditが消費されます。尚、本プロモーションに関する詳細は以下を確認ください。)

     

     

    初期のデータ移行はData Pumpを利用すべきという推奨に基づき、本ガイドでもData Pumpを利用した手順を記載しています。

    また連携元となるソースDBはアーカイブログモードで運用されており、サプリメンタル・ロギングの設定等が追加で必要となります。

     

    本章ではテーブルデータ移行のみ扱います。DDL、Sequence のレプリケーション、およびパフォーマンス最適化については別途設定が必要となります。

    詳細は GoldenGate のマニュアルをご確認ください。

     

    作業の流れ

    1. (事前作業) Swingbench で移行用データを生成
    2. データ移行準備
    3. GoldenGate の作成
    4. GoldenGate を利用するための準備
    5. GoldenGate の構成
    6. GoldenGate を利用したデータ移行

     

    所要時間 : 約60分

     

     

    1. (事前作業) Swingbench で移行用データを生成

    まず、Swingbench で移行元となる Oracle Database へ接続して移行用データを生成します。

    本章では、ADB HOL #4-1 で作成済みの DBCS に移行用データを作成して、これを ADB HOL #1-2 で作成済みの Autonomous DB へ移行してみます。

    Swingbench については ADB HOL #5-3 などをご参照ください。

     

    1. ADB HOL #3-1 で作成した仮想マシン "devIns01" の Swingbench から DBCS へ接続できるように VCN "vcn1" の 1521 ポートを開放します。
        ADB HOL #6-1 を参考に VCN の 1521 ポートを開放してください。

        ※DBCS の OS 側のファイヤーウォールでは 1521 ポートは開放済みなので設定は不要です。

     

        開放後、仮想マシンから DBCS の PDB "cdbs01_pdb1" へ接続可能か確認してください。
        ここでは、EZCONNECT を利用して接続確認をしてみます。

    $ sqlplus sys/WelCome12345#1#2//<DBCS Hostname>:1521/<PDB Service Name> as sysdba

    SQL> show con_name

     

    2. 接続確認ができたら移行用データを格納する表領域を作成します。

        Swingbench (oewizard) では移行用データ "SOE2" スキーマを作成します。ここでは SOE2 スキーマ用の表領域を事前に作成しておきます。

        また、一時表領域の拡張も併せて実施します。

    --移行データ用表領域 SOE2 の作成

    --  a) DBCS を Grid Infrastructure で作成した場合

    SQL> create tablespace soe2 datafile '+DATA' size 1g autoextend off;

    --  b) DBCS を LVM で作成した場合

    SQL> create tablespace soe2 datafile size 1g autoextend off;

     

    --一時表領域データファイルのパスを確認後、拡張

    SQL> select file_name, tablespace_name, bytes from dba_temp_files;

    SQL> alter database tempfile '<一時表領域ファイルのパス>' resize 1g;

    Swingbench (oewizard) でのデータ生成時に一時表領域が不足すると強制終了するので拡張しておきます。

     

    3. Swingbench (oewizard) で移行用データを生成します。

        作成先の表領域 (-ts オプション) には作成済みの SOE2 表領域を指定します。ScaleFactor を小さくしているので 30秒ほどで完了します。

    $ cd ~/labs/swingbench

    $ ./swingbench/bin/oewizard -cs //<DBCS Hostname>:1521/<PDB Service Name> -ts soe2 -dbap WelCome12345#1#2 \

       -u soe2 -p WelCome12345#1#2 -scale 0.05 -create -cl -v

     

    4. 移行用データの作成完了後、PDB "dbcs01_pdb1" に接続して SOE2 スキーマの各テーブルに設定してある制約の検証をしておきます。

    本章の設定では、制約が検証済みでないと GoldenGate での移行 (Replicat) で失敗します。

    $ sqlplus soe2/WelCome12345#1#2//<DBCS Hostname>:1521/<PDB Service Name>

    SQL> col table_name format a24

    SQL> col constraint_name format a28

    SQL> col constraint_type format a6

    SQL> col status format a8

    SQL> select table_name, constraint_name, status, validated from user_constraints where constraint_type ='P' order by 3,2;

     

        上記クエリで制約の状態を確認すると VALIDATED 列の値が "NOT VALIDATED" の制約が存在していることを確認できます。

     

    e.g.) 制約の検証状態の確認結果 (1)

     

    TABLE_NAME               CONSTRAINT_NAME              STATUS   VALIDATED 
    ------------------------ ---------------------------- -------- -------------
    ADDRESSES                ADDRESS_PK                   ENABLED  NOT VALIDATED
    CARD_DETAILS             CARD_DETAILS_PK              ENABLED  NOT VALIDATED
    CUSTOMERS                CUSTOMERS_PK                 ENABLED  NOT VALIDATED
    INVENTORIES              INVENTORY_PK                 ENABLED  NOT VALIDATED
    ORDER_ITEMS              ORDER_ITEMS_PK               ENABLED  NOT VALIDATED
    ORDERS                   ORDER_PK                     ENABLED  NOT VALIDATED
    PRODUCT_DESCRIPTIONS     PRODUCT_DESCRIPTIONS_PK      ENABLED  NOT VALIDATED
    PRODUCT_INFORMATION      PRODUCT_INFORMATION_PK       ENABLED  VALIDATED
    WAREHOUSES               WAREHOUSES_PK                ENABLED  NOT VALIDATED

    9 rows selected.

     

        制約の検証を実施して、VALIDATED 列の値が "NOT VALIDATED" の制約を "VALIDATED" にします。

    --制約の検証

    SQL> declare

      cursor cDataCounts is

        select 'alter table '||table_name||' modify constraint '||constraint_name||' validate' "SQL_STATEMENT"

          from user_constraints where constraint_type ='P' order by table_name, constraint_name;

    begin

      for vRec in cDataCounts loop

        execute immediate vRec."SQL_STATEMENT";

      end loop;

    end;

    /

    SQL> select table_name, constraint_name, status, validated from user_constraints where constraint_type ='P' order by 3,2;

     

        再度確認すると、すべての "NOT VALIDATED" が "VALIDATED" に変わっていることが確認できます。

     

    e.g.) 制約の検証状態の確認結果 (2)

     

    TABLE_NAME               CONSTRAINT_NAME              STATUS   VALIDATED 
    ------------------------ ---------------------------- -------- -------------
    ADDRESSES                ADDRESS_PK                   ENABLED  VALIDATED
    CARD_DETAILS             CARD_DETAILS_PK              ENABLED  VALIDATED
    CUSTOMERS                CUSTOMERS_PK                 ENABLED  VALIDATED
    INVENTORIES              INVENTORY_PK                 ENABLED  VALIDATED
    ORDER_ITEMS              ORDER_ITEMS_PK               ENABLED  VALIDATED
    ORDERS                   ORDER_PK                     ENABLED  VALIDATED
    PRODUCT_DESCRIPTIONS     PRODUCT_DESCRIPTIONS_PK      ENABLED  VALIDATED
    PRODUCT_INFORMATION      PRODUCT_INFORMATION_PK       ENABLED  VALIDATED
    WAREHOUSES               WAREHOUSES_PK                ENABLED  VALIDATED

    9 rows selected.

     

    3. Swingbench の動作確認をして、移行用データ "SOE2" のデータが増加していく状況を確認しておきます。

    --Swinngbench の実行

    $ cd ~/labs/swingbench

    $ ./swingbench/bin/charbench -c ~/labs/swingbench/swingbench/configs/SOE_Server_Side_V2.xml \

       -cs //<DBCS Hostname>:1521/<PDB Service Name> -u soe2 -p WelCome12345#1#2 -uc 2

     

        以下のようにして、SOE2 スキーマの各テーブルのデータ件数を確認できます。

        TeraTerm をもう1つ使用して dbcs01_pdb1.soe2 に接続後、件数確認用のクエリを実行します。

    $ sqlplus soe2/WelCome12345#1#2@//<DBCS Hostname>:1521/<PDB Service Name>

    SQL> set serveroutput on

    SQL> declare

      cursor cDataCounts is select 'select '''||table_name||''' "TABLE_NAME", count(*) from '||table_name "SQL_STATEMENT" from user_tables order by table_name;

      vTableName varchar2(32);

      vCount     number;

    begin

      dbms_output.put_line('*** TABLE INFO ***');

      for vRec in cDataCounts loop

        execute immediate vRec."SQL_STATEMENT" into vTableName, vCount;

        dbms_output.put_line(rpad(vTableName, 20,' ')||':'||to_char(vCount,'9,999,999,999'));

      end loop;

    end;

    /

     

    e.g.) 各テーブルのデータ件数の確認結果 (件数はタイミングで変動)

     

    *** TABLE INFO *** 
    ADDRESSES           :        75,778
    CARD_DETAILS        :        75,778
    CUSTOMERS           :        50,778
    INVENTORIES         :       896,768
    LOGON               :       121,915
    ORDERENTRY_METADATA :             4
    ORDERS              :        73,515
    ORDER_ITEMS         :       220,309
    PRODUCT_DESCRIPTIONS:         1,000
    PRODUCT_INFORMATION :         1,000
    WAREHOUSES          :         1,000

    PL/SQL procedure successfully completed.

     

        確認できたら Swingbench を停止します。

        Swingbench を実行している Tera Term のウィンドウで Enter キーを押下することで Swingbench の停止することができます。

     

     

    2. データ移行準備

    本章では、アプリケーションがほぼダウンタイムなしで移行できることを確認するために Swingbench を実行したままにしておきます。

    これにより、実際の移行時に本番環境で OLTP 処理が継続しているのと同様の状況になります。

    また、Autonomous DB に移行先スキーマ "SOE2" を作成しておきます。

    Autonomous DB では利用可能な表領域が DATA 表領域に限定されるため、SOE2 の DATA 表領域の利用制限も変更しています。

     

    1. TeraTerm で仮想マシン "devIns01" に接続後、 Swingbench を実行して、移行元となる DBCS で OLTP 処理を継続して発生させておきます。

        この TeraTerm は最小化して、他の処理では利用しないでください。

    $ cd ~/labs/swingbench

    $ ./swingbench/bin/charbench -c ~/labs/swingbench/swingbench/configs/SOE_Server_Side_V2.xml \

       -cs //<DBCS Hostname>:1521/<PDB Service Name> -u soe2 -p WelCome12345#1#2 -uc 2

    2. 仮想マシン "devIns01" から Autonomous DB へ接続して、移行先となるスキーマ "SOE2" を作成します。

        • User          : SOE2
        • Password : Welcome12345#

    $ sqlplus admin/Welcome12345#@atp01_low

    SQL> drop user soe2 cascade;

    SQL> create user soe2 identified by Welcome12345#;

    SQL> alter user soe2 quota unlimited on data;

    SQL> grant dwrole to soe2;

     

    --移行元の SOE2 に定義済み PL/SQL Package で必要な権限を付与しておく

    SQL> grant execute on dbms_lock to soe2;

     

     

    3. GoldenGate の作成

    では、実際に GoldenGate を作成してみます。GoldenGate は Marketplace から作成します。

     

    1. Marketplace から GoldenGate を作成します。

        左メニューから Marketplace を選択して GoldenGate を作成します。

        Marketplace で GoldenGate を探す場合は、TYPE: "Stack", PUBLISHER: "Oracle", CATEGORY: "Data Integration" を指定すると簡単に見つけることができます。

    GG4OracleBlog_CreateGG_001a.pngGG4OracleBlog_CreateGG_002a.png

     

    Marketplace で Oracle GoldenGate を選択すると、以下のような Oracle GoldenGate for Oracle の Edition と作成先の Compartment の選択画面になります。

    ここでは "Microservice Edition - v1.4" と ADB HOL #1-1 で作成した Compartment "adb-hol-01" を選択し、使用許諾にチェックして Launch Stack をクリックします。

    画面下部 Overview の Version Details に Stardard Version と Promotional Version についての詳細が記載されているので、必ず目を通して適切な Version を選択してください。

    GG4OracleBlog_CreateGG_003a.png

    2020/02/09 現在、利用可能な GoldenGate on Marketplace のバージョンは上記の通りとなります。

    本章の実施時とは異なる可能性があるので、その際は利用可能な最新バージョンをご利用ください。

     

    ガイドに従い必要項目を入力していきます。

    Create Stack の "1. Stack Information" はそのままで OK です。Next を押してください。

    GG4OracleBlog_CreateGG_004a.png

     

    続いて Create Stack の "2. Configure Variable" ですが、少し長いのでセクションごとに説明します。

    まずは "Name for New Resources" ですが、このセクションの変更は不要です。

    GG4OracleBlog_CreateGG_005-1.png

     

    次に "Network Settings" です。ここでは既存の VCN "vcn01" を設定します。

          • VCN Network Compartment      : ADB HOL #1-1 で作成した Compartment "adb-hol-01"
          • VCN                                              : ADB HOL #3-1 で作成した VCN "vcn01"
          • Subnet Network Compartment : ADB HOL #1-1 で作成した Compartment "adb-hol-01"
          • Subnet                                         :  "Public Subnet (Regional)"

    GG4OracleBlog_CreateGG_005-2a.png

     

    Instance Settings では以下を設定します。

          • Availability Domain : ap-tokyo-1-ad-1
          • Compute Shape      : VM.Standard2.4
            ※VM.Standard2.4 が Service Limit の制限などで利用できない場合は、VM.Standard2.1/4/8/16/24 のどれでも構いません。利用可能な Shape を選択してください。
          • Assign Public IP      : チェック

    2020/02/09 現在、GoldenGate が作成可能な Shape は VM.Standard2.4/8/16/32 のみとなります。

    2020/05/18 現在、GoldenGate が作成可能な Shape は VM.Standard2.1/4/8/16/24 のみとなります。

    GG4OracleBlog_CreateGG_005-3a.png

     

    次は Create OGG Deployments の設定です。

    本章では Deployment 1 を移行元 (Source : DBCS)、Deployment 2 を移行先 (Target : Autonomous DB) として利用します。

    Deployment X - Name はそのまま OS のディレクトリ名としても使用されるので変更する場合はご注意ください。

    本章では、Deployment 1, 2 の Database は "Oracle 18c (18.x)" を指定していますが、Autonomous DB を作成するタイミングによりバージョンが異なる可能性があります。その際は、適切なバージョンに変更して実施してください。

          • Deployment 1 - Database                                                 : Oracle 18c (18.x)
          • Deployment 2 - Database                                                 : Oracle 18c (18.x)
          • Deployment 2 - Autonomous Database                          : チェック
            ※ここをチェックすると、移行先として既存の Autonomous DB を設定することができるようになります。
          • Deployment 2 - Autonomous Database Compartment : 移行先に指定する Autonomous DB の Compartment "adb-hol-01" (ADB HOL #1-1 で作成済み)
          • Deployment 2 - Autonomous Database Instance          : ADB HOL #1-2 で作成済みの Autonomous DB "atp1"

    GG4OracleBlog_CreateGG_005-4a.png

    Target に既存の Autonomous DB を指定することで、GoldenGate から Autonomous DB への接続設定を自動的に実施してくれます。

    このため Autonomous DB の Client Credential をダウンロード、Target の TNS_ADMIN 以下に解凍、といったことを手動で実施する必要がありません。

     

    最後の "Shell Access" では SSH Public Key を指定します。

    ここまでで仮想マシンや DBCS を作成する際は SSH Public Key のファイルを指定していましたが、

    GoldenGate 作成時は SSH Public Key ファイルの内容をコピー&ペーストする必要があるのでご注意ください。

          • SSH Public Key : SSH Public Key ファイルの内容

    GG4OracleBlog_CreateGG_005-5a.png

     

    Create Stack の "3. Review" で設定内容を確認して、間違いがなければ Create をクリックしてください。

    GG4OracleBlog_CreateGG_006a.png

     

    GoldenGate を作成する Stack のアイコンが "Accepted" (黄色) > "In Progress" (黄色) > "Succeed" (緑色) と変化するので、

    Succeed になるまで待ちます。Service Limit の制限にひっかからなければエラーなく終了します。

    利用可能な Shape の制限などでエラーが発生した場合は、Stack の Variables を適切に変更して再実行してください。

    GG4OracleBlog_CreateGG_007-3.png

     

    作成完了後、GoldenGate に割り当てられた Public IP を確認します。

    Marketplace から作成した GoldenGate は Compute インスタンスとして登録されているので、

    Oracle Cloud の左メニューから Compute > Instances と画面遷移して、Compute インスタンスのリストから作成したインスタンスを選択して Instance Details を表示します。

    Private VNIC Information から割り当てられた Public IP Address を確認できます。

    GG4OracleBlog_CreateGG_008-3a.png

     

    2. GoldenGate へ接続してみます。

        GoldenGate の Web Console (Service Manager, Administration Server, etc...) を利用するにはログイン情報が必要となります。

        ログイン情報を確認するため、早速、作成した GoldenGate へアクセスしてみます。

     

    2-1. TeraTerm を利用して opc ユーザーで GoldenGate へログイン後、Service Manager のログイン情報を確認します。

           Service Manager のログイン情報は opc ユーザーのホームディレクトリ直下、ogg-credentials.json に記載されています。

    $ cat /home/opc/ogg-credentials.json

           以下のようにユーザー名は "oggadmin"、パスワード (credential) は任意の文字列であることが確認できます。

    GG4OracleBlog_ServiceManager_001.png

     

    2-2. Service Manager へログインします。

          • URL          : https://<GoldenGate の Public IP Address>
          • User         : oggadmin
          • Password : ogg-credentials.json の credential に記載の任意の文字列

     

    Service Manager へアクセスできない場合は VCN の設定を確認します。

    Web Console は HTTPS でアクセスするので 443 ポートを開放しておく必要があります。(GoldenGate 作成時に VCN も作成した場合は 443 ポートは開放済み)

    ADB HOL #6-1 を参考に VCN "vcn01" の 443 ポートを開放してください。

    ※GoldenGate の OS 側のファイヤーウォールでは 443 ポートは開放済みなので設定は不要です。

     

    開放後、Service Manager へ接続します。

    Service Manager のログイン画面が表示されたら、2-1. で確認済みのログイン情報を入力して Sign In します。

    GG4OracleBlog_AccessServiceManager_002.png

    セキュリティリスクの警告が表示される場合は、詳細 > 危険性を承知で続行 を選択してください。

    GG4OracleBlog_AccessServiceManager_001.png

     

    Service Manager へログインすると以下のような画面を遷移します。

    Source, Target それぞれに Administration Server, Distribution Server, Performance Metrics Server, Receiver Server が用意されています。

    本章では、Service Manager, Administration Server (Source/Target), Distribution Server (Source) を利用します。

    ここでは触れませんが、Performance Metric Server では、その名の通り Performace Metric を確認できます。

    画面下部の Deployments では ServiceManager, Source, Target の起動と停止、設定値の変更などが行えます。

    GG4OracleBlog_AccessServiceManager_003.png

     

     

    以上で、この章の前半の作業は終了です。

    後半にお進みください。

    ADB HOL #8-3:GoldenGateを利用したデータベース移行(後半)

     

     

    参考資料

    • マニュアル
      • GoldenGate 19.1 (英語 / 日本語)
        • Using Oracle GoldenGate on Oracle Cloud Marketplace (英語 / 日本語)
        • Removing Oracle Goldengate Instance (英語 / 日本語)
        • Configuring Oracle GoldenGate in a Multitenant Container Database (英語 / 日本語)
        • Oracle GoldenGate Users (Database) - Granting the Appropriate User Privileges (英語 / 日本語)

     

    >ADBコンテンツ一覧に戻るAutonomous Database ハンズオンラボ