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

Version 16

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

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

     

     

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

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

     

     

    4. GoldenGate を利用するための準備

    Service Manager への接続確認できたら、GoldenGate から Source (DBCS) と Target (Autonomous DB) へ接続できるように設定します。

     

    1. GoldenGate 管理ユーザを作成します。

        GoldenGate を利用するには、Source (DBCS) と Target (Autonomous DB) の両方に GoldenGate 管理ユーザを作成する必要があります。

        また、GoldenGate ではデフォルトで "ggadmin" という名前を利用することを想定しているので、その他の名前を利用する場合は GoldenGate 側の設定ファイルを変更します。

     

    1-1. (Source) DBCS から CDB へ接続して GoldenGate 管理ユーザー "c##ggadmin" を作成し、必要となる権限を付与します。

    MTA 構成の場合は、GoldenGate 管理ユーザは "共通ユーザー" である必要があります。デフォルト設定では共通ユーザーの名前には接頭辞 "c##" が必要です。

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

    $ sqlplus / as sysdba

    SQL> drop user c##ggadmin cascade;

    SQL> create user c##ggadmin identified by WelCome12345#1#2 container=all;

    SQL> col username format a12

    SQL> col default_tablespace format a12

    SQL> select con_id, username, default_tablespace from cdb_users where username='C##GGADMIN' order by con_id;

    SQL> alter user c##ggadmin quota unlimited on users container=all;

    SQL> grant dba to c##ggadmin container=all;

    SQL> exec dbms_goldengate_auth.grant_admin_privilege(grantee=>'C##GGADMIN', container=>'ALL');

    本章では説明の簡略化のため、GoldenGate 管理ユーザーに DBA 権限を付与しています。必要最小限の権限を付与する場合は GoldenGate のマニュアルをご確認ください。

     

    1-2. (Target) 仮想マシンから Autonomous DB へ接続後、事前定義済みの GoldenGate 管理ユーザー "ggadmin" のアンロックとパスワード再設定も行います。

    また、ggadmin ユーザーの DATA 表領域の利用制限を Unlimited に設定しておきます。

    SQL> sqlplus admin/Welcome12345#@atp01_low

    SQL> alter user ggadmin account unlock identified by Welcome12345#;

    SQL> alter user ggadmin quota unlimited on data;

    Autonomous DB では GoldenGate 管理ユーザー "ggadmin" が事前定義済みです。ロックされているのでアンロックするだけでそのまま利用可能です。

    Sequence Replication を利用する場合は、GoldenGate に含まれているスクリプトの実行 (プロシージャ作成) とパラメータファイルへの設定が必要となります。
    詳細はマニュアルをご確認ください。
    また、以下のようなエラーが発生する場合はサポートにお問い合わせください。
    2019-12-03 09:29:24  WARNING OGG-25092  Sequence update did not succeed, error: ORA-06550: line 1, column 7:
    PLS-00201: identifier 'GGADMIN.REPLICATESEQUENCE' must be declared
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignored.

     

    1-3. GoldenGate で初期設定されている GoldenGate 管理ユーザーを変更します。

    GoldenGate では、デフォルトで "ggadmin" が GoldenGate 管理ユーザーとして設定されています。

    本章では、DBCS の GoldenGate 管理ユーザーを共通ユーザー "c#ggadmin" とする必要があるので、GoldenGate の Source 側のデフォルト設定を変更します。

    GoldenGate の GoldenGate 管理ユーザーの設定は GLOBALS ファイルの ggschema パラメータで管理されているので、

    この GLOBALS ファイルの ggschema パラメータを ggadmin から c##ggadmin へ変更します。

     

    それでは、Service Manager へログインします。Overview に表示されている Source の Administration Server のポート番号 "9011" をクリックします。

    GG4OracleBlog_(Source)_Modify_GGADMIN_001a.png

     

    Administration Server (Source) のログイン画面が表示されるのでユーザー名とパスワードを入力してログインします。

    ログイン情報は Service Manager と同じです。

            • User          : oggadmin
            • Password : ogg-credentials.json の credential に記載の任意の文字列

    GG4OracleBlog_(Source)_Modify_GGADMIN_002.png

    GG4OracleBlog_(Source)_Modify_GGADMIN_003.png

     

    Administration Server (Source) へログインできたら、左メニューの Configuration をクリックします。

    右ペインが切り替わるので Parameter Files タブの Files にある CLOBALS ファイルを選択して、編集ボタン (鉛筆アイコン) をクリックします。

    デフォルトの GoldenGate 管理ユーザーは "ggadmin" になっているので、先ほど DBCS で作成した共通ユーザー "c##ggadmin" に変更します。

    GG4OracleBlog_(Source)_Modify_GGADMIN_004a.png

    --[参考] TeraTerm から変更する場合

    $ cd /u02/deployments/Source/etc/conf/ogg

    $ vi GLOBALS

    $ cat GLOBALS

    ggschema c##ggadmin

     

    2. GoldenGate から Source (DBCS) への接続するための設定を行います。

        GoldenGate から Source, Target へ接続する Credential を作成する際には、tnsnames.ora ファイルに記載の Net Service Name を利用します。

        このため、tnsnames.ora ファイルを Source の TNS_ADMIN 以下に作成する必要があります。

    Target の Autonomous DB は自動構成済みなので tnsnames.ora の作成は不要です。

     

       Service Manager への接続確認ができたら、Source の TNS_ADMIN を確認しておきます。Source (DBCS) への接続情報を作成する際に必要となります。

       Service Manager 下部の Deployments で Source をクリックすると、Source に設定済みの環境変数の一覧が確認できるので TNS_ADMIN をメモしておきます。

       この後、TNS_ADMIN 以下に GoldenGate から Source (DBCS) へ接続するために必要な設定ファイル tnsnames.ora を作成します。

    GG4OracleBlog_Confirm_Source_TNS_ADMIN_001a.png

    GG4OracleBlog_Confirm_Source_TNS_ADMIN_002a.png

     

        TeraTerm で GoldenGate へ接続して、直前に Service Manager で確認した Source の TNS_ADMIN へ移動します。

        移動したら tnsnames.ora を新規作成します。

    $ cd /u02/deployments/Source/etc

    $ vi tnsnames.ora

     

        tnsnames.ora のエントリは以下のフォーマットで記載します。CDB と PDB 接続用の 2つのエントリを作成してください。

        本章の後続の処理では CDB 接続用のエントリを "dbcs01"、PDB 接続用のエントリを "dbcs01_pdb1" で作成することを前提としています。

    CDB, PDB の Service Name は、SQL*Plus でそれぞれに接続後、show parameter service_names で確認することができます。

    Hostname は Web Console から DBCS へアクセスして確認してください。

     

    e.g.) Net Service Name を作成例 (フォーマット)

     

    <Net Service Name> = 
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = <DBCS Hostname>)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = <Service Name>)
        )
      )

     

    3. Administration Server で Credentials を作成します。

    Administration Server (Source/Target) で Credential を作成して Source, Target への接続確認をしてみます。

    Target の Autonomous DB は自動構成済みなのでパスワード設定のみとなります。Client Credential のダウンロードなどは不要です。

     

    3-1. Source (DBCS) へ接続するための Credential を作成します。

    Service Manager > Administration Server (Source) へアクセスします。

    続いて左メニューの Configuration > Database タブの Credentials で DBCS へ接続するための Credential を作成します。

    Credentials の横にある "+" をクリックしてください。

    GG4OracleBlog_(Source)_CreateCredentials_001a.png

     

    ここでは CDB, PDB への Credential を作成します。Credential Domain は未入力で OK です。デフォルトで "OracleGoldenGate" が設定されます。

     

    [CDB]

            • Credential Domain : "OracleGoldenGate"
              ※未入力時のデフォルト値
            • Credential Alias     :  dbcs01
            • User ID                    : c##ggadmin@dbcs01
            • Password                : WelCome12345#1#2

    [PDB]

            • Credential Alias     : dbcs01_pdb1
            • User ID                    : c##ggadmin@dbcs01_pdb1

    ※Credential Domain, Password は CDB と同一

    GG4OracleBlog_(Source)_CreateCredentials_002.pngGG4OracleBlog_(Source)_CreateCredentials_003.png

     

    CDB, PDB の Credential を作成すると、以下のように Credentials に CDB, PDB へ接続可能な 2つのエントリが確認できます。

    GG4OracleBlog_(Source)_CreateCredentials_004.png

     

    作成した 2つの Credential で接続確認をします。

    Action で一番右のデータベースのアイコンをクリックしてください。

    接続に成功するとアイコンが青色に変わり、画面下部に Checkpoint Table などの設定項目が表示されます。

    再度アイコンをクリックすると接続が解除されます。

     

    PDB への接続確認ができたら、PDB に Heartbeat Table を作成しておきます。

    画面下部の Heartbeat の左にある "+" をクリックすると、以下のように Expand されるので Submit します。

    GG4OracleBlog_(Source)_CreateCredentials_007a.png

     

    [任意]

    SQL*Plus などで c##ggadmin で PDB へ接続し、テーブルとビューを確認すると Heartbeat 関連のオブジェクトが作成されていることが確認できます。

     

    3-2. Target (Autonomous DB) へ接続するための Credential を作成します。

    Source と同様に Target も Administration Server へアクセスします。

    Configuration > Database タブから Credentials を確認すると、Credentials (atp01_tp, atp01_tpurgent) が事前定義済であることが確認できます。

    すでに ggadmin ユーザーでの接続情報が登録されているので、アンロックした ggadmin ユーザーのパスワード "Welcome12345#" を入力して再度 Submit 後に接続確認します。

     

    [atp01_tp, atp01_tpurgent]

            • Password : Welcome12345#
              ※パスワード以外は変更しなくて OK です。

    GG4OracleBlog_Target_CreateCredentials_001.png

     

    接続確認後、Source と同様に Heartbeat Table を作成します。また、Target では Checkpoint Table も作成してください。

    Checkpoint Table の名前は "ggadmin.checkpoints_soe2" とします。

            • Checkpoint Table Name : ggadmin.checkpoints_soe2
              ※テーブル名には GoldenGate 管理ユーザー名も含めてください。

    GG4OracleBlog_(Target)_CreateCheckpointTable_002a.png

    Credentials に atp01_tp, atp01_tpurgent の 2つのエントリが作成されていますが、接続サービスが異なるだけで接続先は同一となります。

    Heartbeat Table, Checkpoint Table の作成はどちらか一方で実行するだけで OK です。

     

    4. Source (DBCS) の GoldenGate 用の構成を確認

        Source Database (DBCS) が GoldenGate を利用するために必要な設定を確認し、必要であれば設定変更を行います。

        TeraTerm で DBCS へ接続して設定を確認します。

     

    4-1. 初期化パラメータを確認します。

    初期化パラメータ compatible は 11.2.0.4 以上、enable_goldengate_replication は true に設定します。

          • compatible                                     : "11.2.0.4" 以上
            ※ADB HOL では "18.0.0" 以上が設定されていると思います。
          • enable_goldengate_replication : true

    $ sqlplus / as sysdba

    SQL> show parameter compatible

    SQL> show parameter enable_goldengate_replication

    SQL> alter system set enable_goldengate_replication=true scope=both;

     

    4-2. サプリメンタルロギングの設定を行います。

    GoldenGate ではサプリメンタルロギングの有効化が必要となります。

    --変更前の設定値の確認

    SQL> select name, log_mode, supplemental_log_data_min, force_logging from v$database;

    --サプリメンタルロギングの設定

    SQL> alter database add supplemental log data;

    SQL> alter system switch logfile;

    --変更後の設定値の確認

    SQL> select name, log_mode, supplemental_log_data_min, force_logging from v$database;

    DBCS はデフォルトでアーカイブログモード (log_mode) と強制ロギング (force_logging) が有効化されています。

    もし、無効化されている場合は有効化が必要となります。

     

    以下の実行結果と同様になっていれば OK です。

     

    e.g.) ログ関連の設定値の確認結果

     

    SQL> select name, log_mode, supplemental_log_data_min, force_logging from v$database;

    NAME      LOG_MODE     SUPPLEME FORCE_LOGGING
    --------- ------------ -------- ---------------------------------------
    DBCS01    ARCHIVELOG   YES      YES

     

     

    5. GoldenGate の構成

    GoldenGate は大別して Source からデータを抽出する Extract、Target へ抽出したデータを適用する Replicat で構成されています。

    ここでは、実際に Extract と Replicat、そして Extract から Replicat へ送信するための Path を作成します。

     

    1. Extract を作成します。

        Source からデータを抽出する Extract を作成して動作確認まで行います。

        Extract にはいくつか種類がありますが、本章では Integrated Extract を作成します。

     

    1-1. Extract (Integrated Extract) を作成します。

    Service Manager > Administration Server (Source) へアクセスして、Extract (Integrated Extract) を作成します。

    まずは Overview の Extracts で "+" をクリックします。

    GG4OracleBlog_(Source)_CreateExtract_001a.png

     

    Add Extract の "1. Extract Type" では "Integrated Extract" を選択して Next。

    GG4OracleBlog_(Source)_CreateExtract_002a.png

    Classic Extract は引き続き利用可能ですが、Oracle GoldenGate 18c より非推奨となりました。

    詳細はマニュアルをご参照ください。

     

    Add Extract の "2. Extract Options" では以下の項目を設定します。それ以外の項目はデフォルトで OK です。

            • Process Name        : EXTP02
            • Credential Domain : OracleGoldenGate
            • Credential Alias      : dbcs01
            • Begin                       : Now
            • Trail Name               : EA
              ※任意の 2文字 を設定します。Trail はここで設定する任意の 2文字 + 連番で GoldenGate の /u02/trail/ 以下に作成されます。(デフォルト)
            • Register to PDBs   : DBCS01_PDB1

    GG4OracleBlog_(Source)_CreateExtract_003a.pngGG4OracleBlog_(Source)_CreateExtract_004a.png

     

    Add Extract の "3. Parameter File" は以下のように編集します。その後、Create and Run をクリックすると Extract が作成され自動的に実行されます。

    extract EXTP02

    useridalias dbcs01 domain OracleGoldenGate

    exttrail EA

    sourcecatalog dbcs01_pdb1

    table soe2.*;

    GG4OracleBlog_(Source)_CreateExtract_005a.png

     

     

    1-2. Extract の動作を確認をします。

    正常に動作していると Extract のアイコンが Running (緑色) になり、GoldenGate の /u02/trails/ 以下に Trail "EA000000000" が作成されます。

    GG4OracleBlog_(Source)_CreateExtract_008.png

    GG4OracleBlog_(Source)_CreateExtract_009.png

     

    2. Path を作成して動作を確認します。

        Distribution Server (Source) で、Extract から Replicat へ送信する Path を作成して動作確認まで行います。

     

    2-1. Path を作成します。

    Service Manager > Discribution Server (Source) へアクセスします。

    GG4OracleBlog_(Source)_CreatePath_001a.png

    Paths の "+" をクリックして、Extract から Replicat へ送信する Path を作成します。

    GG4OracleBlog_(Source)_CreatePath_002a.png

     

    Add Path で以下の項目を設定します。それ以外はデフォルトで OK です。その後、Create and Run をクリックすると Path が作成され自動的に実行されます。

            • Path Name : EAEB
            • Source       : EXTP02, EA
              ※上から "対象となる Extract (Source)"、"Source で作成された Trail の接頭辞" となります。
                  ここでは、1-1. で作成した Extract "EXTP02" の情報を入力します。
            • Target        : 上から順に ogg, localhost, 9023, EB と入力します。
              ※上から "プロトコル"、"Recever Server (Target) の動作するホスト (IP)"、"Recever Server (Target) の動作するポート番号"、
                  "Terget が参照する Trail の接頭辞" となります。

    GG4OracleBlog_(Source)_CreatePath_003a.pngGG4OracleBlog_(Source)_CreatePath_004a.png

     

    Web Console (Source: Discription Server) から Path を作成する場合は、Extract を開始した状態で作成してください。

    Extract を開始していないと、Path の作成ガイドの Extract に作成済みの Extract が表示されないのでご注意ください。

     

    2-2. 作成した Path の動作確認をします。

    正常に動作すると、GoldenGate の /u02/trails/ 以下に Trail "EB000000000" が作成されます。

    GG4OracleBlog_(Source)_CreatePath_006.png

    GG4OracleBlog_(Source)_CreatePath_007.png

     

    3. Replicat を作成します。

        Replicat は Source の Extract で抽出したデータ (trail) を Path 経由で受け取ります。

     

    3-1. Replicat (non-Integrated Replicat) を作成します。

    Service Manager > Administration Server (Target) へアクセスします。

    Overview の Replicats の "+" ボタンをクリックします。

    GG4OracleBlog_(Target)_CreateReplicat_001a.png

     

    Add Replicat の "1. Replicat Type" は "Nonintegrated Replicat" を選択します。

    GG4OracleBlog_(Target)_CreateReplicat_002a.png

    Autonomous DB は non-Integrated Replicat のみサポートします。

     

    Add Replicat の "2. Replicat Options" で以下の項目を設定します。それ以外はデフォルトで OK です。

            • Process Name       : REPP02
            • Credential Domain : OracleGoldenGate
            • Credential Alias     : atp01_tpurgent
              ※ここでは atp01_tpurgent を選択していますが、atp01_tp, atp01_tpurgent のどちらを選択しても構いません。
            • Begin                      : Now
            • Source                    : Trail
            • Trail Name               : EB
            • Checkpoint Table  : <コンテナ名>.ggadmin.checkpoints_soe2
              ※Administration Server (Target) で作成した Checkpoint Table を選択してください。

    GG4OracleBlog_(Target)_CreateReplicat_003a.png

     

    Add Replicat の "3. Parameter File" は以下のように設定します。その後、Create をクリックして Replicat を作成します。

    replicat REPP02

    useridalias atp01_tpurgent domain OracleGoldenGate

    dboptions enable_instantiation_filtering

    sourcecatalog dbcs01_pdb1

    MAP soe2.*, TARGET soe2.*;

    GG4OracleBlog_(Target)_CreateReplicat_004a.png

     

    Replicat の作成が完了すると以下のようになります。Replicat はまだ開始していないので Running (緑色) にはならないのでご注意ください。

    GG4OracleBlog_(Target)_CreateReplicat_006.png

     

     

     

    6. GoldenGate を利用したデータ移行

    GoldenGate でのデータ移行は、初期ロードとそれ以降に発生した変更の適用で実現しています。

    本章では、初期ロードに Oracle Data Pump (expdp/impdp) を利用しています。

    GoldenGate ではインスタンス化という機能を利用して、初期ロード完了時の断面 (SCN) と変更適用の開始断面 (SCN) を自動的に合わせます。

    このため、GoldenGate では容易にレプリケーション環境を構築することができます。

    それでは、実際に GoldenGate でデータ移行をしてみます。

     

    1. インスタンス化の準備をします。

        Service Manager > Administration Server (Source) へアクセスして、Overview から動作している Extract "EXTP02"を一旦停止します。

        Action から Stop を選択すると、アイコンが Running (緑色) から停止状態 (黄色) に変わります。

    GG4OracleBlog_Instataition_001a.pngGG4OracleBlog_Instataition_002.png

    インスタンス化の準備する際は Extract をいったん停止してください。

    Configuration > Database タブの Credentials から CDB "dbcs01" へ接続します。

    CDB へ接続後、Transaction Information の "+" をクリック、Schema を選択して Schame Name に移行元のスキーマ "dbcs01_pdb1.soe2" を入力します。

    最後に Submit すると、Transaction Schema として移行元データの SOE2 が登録されます。

    GG4OracleBlog_Instataition_003a.png

     

    登録後、登録した SOE2 を確認してみます。

    虫眼鏡アイコンをクリック、Schema を選択して、入力欄に "dbcs01_pdb1.soe2" を入力後、入力欄の右側にある虫眼鏡をクリックして検索します。

    登録が正常に完了していれば、下部に登録済みの情報が表示されます。

    GG4OracleBlog_Instataition_005a.png

     

    また、以下の Source (DBCS) で以下のクエリを実行して、インスタンス化の準備が完了しているオブジェクトの詳細を確認します。

    cdb_capture_prepared_schema には SOE2 スキーマ、cdb_capture_prepared_tables には SOE2 スキーマに含まれるテーブルが確認できます。

    $ sqlplus / as sysdba

    SQL> col table_name format a24

    SQL> col scn format a20

    SQL> col schema_name format a12

    SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') "SYSDATE" from dual;

    SQL> select con_id, table_name, to_char(timestamp,'yyyy/mm/dd hh24:mi:ss') as timestamp, to_char(scn) as scn

                from cdb_capture_prepared_tables where table_owner='SOE2' order by table_name;

    SQL> select con_id, schema_name, to_char(timestamp,'yyyy/mm/dd hh24:mi:ss') as timestamp

                from cdb_capture_prepared_schemas where schema_name = 'SOE2' order by schema_name;

     

    インスタンス化の準備に問題がなければ、停止していた Extract "EXTP02" を再開します。

    Action から Start をクリックしてください。アイコンが停止状態 (黄色) から Running (緑色) に変わります。

    GG4OracleBlog_Instataition_007a.png

    GG4OracleBlog_Instataition_008.png

     

    2. 初期ロードを実行します。

        Source の DBCS から expdp で SOE2 スキーマをエクスポート後、Target の Autonomous DB へ impdp でインポートします。

     

    2-1. Source (DBCS) から expdp で移行用データをエクスポートします。

    本章では事前定義済みの Directory Object "DATA_PUMP_DIR" を利用するため、まずはこの Directory Object のパスを確認しておきます。

    $ sqlplus  / as sysdba

    SQL> alter session set container=dbcs01_pdb1;

    SQL> select directory_name, directory_path from dba_directories where directory_name = 'DATA_PUMP_DIR';

     

    上記の Directory Object "DATA_PUMP_DIR" へ移行用データをエクスポートします。

    ダンプファイルとログファイルはそれぞれ "soe2.dmp"、"soe2.log" としています。

    $ expdp system/WelCome12345#1#2@dbcs01_pdb1 directory=DATA_PUMP_DIR dumpfile=soe2.dmp logfile=soe2.log logtime=all schemas=soe2

     

    エクスポートが完了したら、Directory Object のパスにダンプファイル "soe2.dmp" とログ "soe2.log" が作成されていることを確認します。

     

    2-2. エクスポートした移行元データを Object Storage へアップロードします。

    エクスポートが完了したら、ダンプファイルを Object Storage へアップロードします。

    ここでは、oci-curl を使用してアップロードしてみます。

    Object Storage へのアップロード方法は他にもあるので、お好きな方法でアップロードしてください。

    OCI CLI を用いたアップロードが最も効率が良いかと思いますが、DBCS の場合はポートの開放などいくつか準備が必要となります。

    以下の URL から Bash 用の oci-curl のコードをコピーしてホームディレクトリ以下にファイルを新規作成します。

    ここでは oci-curl.sh という名前で作成します。

     

    REST API - Request Signatures

    https://docs.cloud.oracle.com/iaas/Content/API/Concepts/signingrequests.htm

     

    コードの "# TODO: update these values to your own" 以下の情報を編集します。

    編集部分は ADB HOL #7-1 で OCI CLI の設定した内容と同様です。それぞれの参考箇所は以下の通りです。

    PrivateKey Path に設定するファイルは任意の場所で OK です。

     

    適切に編集してファイルを保存したら、以下のように Object Storage へファイルをアップロードする REST API を実行します。

    ADB HOL #2-2 で作成した Object Storage "adb-hol-bucket01" 以下に "soe2.dmp" というファイル名でアップロードしています。

    $ ./oci-curl.sh objectstorage.<region>.oraclecloud.com PUT <Directory Object のパス>/soe2.dmp "/n/<namespace>/b/adb-hol-bucket01/o/soe2.dmp"

    [参考]

    Oracle Cloud Infrastructure API Documentation - Object Storage Service API

    https://docs.cloud.oracle.com/iaas/api/#/en/objectstorage/20160918/

     

    アップロードが完了したら Web Console > Object Storage > bucket からファイル "soe2.dmp" がアップロードされていることを確認します。

    GG4OracleBlog_InitialLoad_001a.png

     

    2-3. Object Storage から Autonomous DB へインポートします。

    仮想マシン "devIns01" に接続し、Object Storage にアップロードしたダンプファイルを Autonomous DB へインポートします。

     

    まず、Object Storage "adb-hol-bucket01" にアップロードしたダンプファイル "soe2.dmp" を Autonomous DB から確認します。

    エラーが発生する場合は ADB HOL #2-2 をご確認ください。

    $ sqlplus admin/Welcome12345#@atp01_low

    SQL> col object_name format a24

    SQL> select object_name, bytes

                from dbms_cloud.list_objects('WORKSHOP_CREDENTIAL','https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/adb-hol-bucket01/');

     

    確認できたら、impdp でダンプファイルを Autonomous DB へインポートします。

    $ impdp admin/Welcome12345#@atp01_high \

       directory=DATA_PUMP_DIR logfile=soe2.log logtime=all credential=WORKSHOP_CREDENTIAL \

       dumpfile=https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/adb-hol-bucket01/o/soe2.dmp \

       schemas=SOE2 remap_tablespace=SOE2:DATA \

       parallel=2

     

    インポート完了後、Autonomous DB の Directory Object に生成されたログファイルを Object Storage へアップロードして Web Console から確認します。

    確認後、Autonomous DB の Directory Object からログファイルを削除します。(任意)

    $ sqlplus admin/Welcome12345#@atp01_low

    SQL> col object_name format a32

    SQL> select object_name, bytes from dbms_cloud.list_files('DATA_PUMP_DIR') order by object_name, bytes;

     

    --ログファイルのアップロード (Autonomous DB -> Object Storage)

    SQL> execute DBMS_CLOUD.PUT_OBJECT('WORKSHOP_CREDENTIAL', 'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/adb-hol-bucket01/o/soe2.log', 'DATA_PUMP_DIR', 'soe2.log');

     

    --Directory Object からログファイルを削除 (任意)

    SQL> execute DBMS_CLOUD.DELETE_FILE('DATA_PUMP_DIR', 'soe2.log');

     

    インポートログにエラーが記録されており、それが修正を必要とする場合は修正します。

    本章の場合は、インポートログにいくつかのエラーが記録されています。

    影響があるものは SOE2 に定義済みの PL/SQL Package 関連のエラーのみなので、該当する PL/SQL Package を再コンパイルします。

     

    e.g.) インポートログ (soe2.log) より抜粋

    ORA-39082: Object type PACKAGE:"SOE2"."ORDERENTRY" created with compilation warnings
    ORA-39082: Object type PACKAGE BODY:"SOE2"."ORDERENTRY" created with compilation warnings

    $ sqlplus soe2/Welcome12345#@atp01_low

    --SOE2 の該当 PL/SQL Package の再コンパイル

    SQL> alter package orderentry compile body;

    SQL> alter package orderentry compile package;

     

    2-4. インスタンス化の状況を確認します。

    Autonomous DB へのインポート完了後、Target のディクショナリ・ビューでオブジェクトとそのインスタンス化 SCN を確認します。

    $ sqlplus admin/Welcome12345#@atp01_low

    SQL> col source_object_name format a24

    SQL> col source_schema format a24

    SQL> select source_object_name, to_char(instantiation_scn) "INSTANTIATION_SCN"

                from dba_apply_instantiated_objects where source_object_owner = 'SOE2';

     

    2-5. Replicat 開始前 (変更適用前) のデータ件数を確認します。

    初期ロード直後の Source (DBCS) と Target (Autonomous DB) の各テーブルのデータ件数を確認します。

    それぞれで以下のクエリを実行してください。

    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;

    /

    "Source (DBCS) のデータ件数" > "Target (Autonomous DB) のデータ件数" となっていることが確認できます。

     

    3. Replicat を開始します。

        Replicat を開始して、初期ロード以降の変更を Target (Autonomous DB) へ反映します。

        Service Manager > Administration Server (Target) > Overview へアクセスして、作成済みの Replicat "REPP02" を開始します。

    GG4OracleBlog_StartReplicat_001a.png

     

        アイコンが Running (緑色) に変わり、正常に動作していることを確認してください。

        Failed (赤色) になる場合は、設定ミスがあるので Replicat の設定内容をご確認ください。

     

     

    4. 移行状況の様子を監視してみます。

    4-1. GoldenGate から変更が適用される様子を確認

    Service Manager > Administration Server (Target) > Overview へアクセスして、動作中の Replicat の Action メニューから Details を選択します。

    GG4OracleBlog_StartReplicat_002a.png

     

    Statistics タブで動作状況が確認できます。

    GG4OracleBlog_StartReplicat_003.png

    Target (Autonomous DB) に接続して各テーブルのデータ件数を確認すると、GoldenGate の Replicat により変更が反映されてデータが増加していく様子が確認できます。

     

    4-2. Swingbench を停止します。

    適当なタイミングで Swingbench を停止して、Source (DBCS) と Target (Autonomous DB) の各テーブルのデータ件数が一致するまで待ちます。

    しばらく待つとデータ件数が一致することが確認できます。

     

    余力があれば、DB Link を利用したり、もしくは Swingbench 停止後の Souce (DBCS) の SOE2 を Target (Autonomus DB) に別の名前 (例えば SOE3) で

    エクスポートして、minus を利用したクエリでデータの整合性を確認してみてもよいかもしれません。

     

    4-3. Swingbench を再開します。

    データ件数が一致したことを確認したら、Swingbench の接続先を Autonomous DB へ変更して Swingbench の OLTP 処理を再開してみます。

    $ cd ~/labs/swingbench

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

        -cf ~/labs/wallets/Wallet_atp01.zip -cs atp01_tp -u soe2 -p Welcome12345# -uc 2

    Swingbench による OLTP 処理が再開可能なことが確認できます。

    本章での移行作業では Sequence を除外しているため、Autonomous DB での Swingbench 再開のタイミングにより以下のようなエラーが発生することがあります。

    The following error has occcured. Further occurences will be supressed but the error count will be incremented and recorded in the results file

    java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint (SOE2.ORDER_PK) violated

    Sequence Replication を実装している場合は、"移行元 (DBCS) の値 < 移行先 (Autonomous DB) の値" となるため上記エラーは発生しません。

    本章の場合は、以下のような感じで ORDERS 表の PK に利用している Sequence の値を移行元よりも大きくすると解消できます。

    (e.g.)

    SQL> conn soe2/Welcome12345#@atp01_low

    SQL> alter sequence ORDERS_SEQ increment by 500000 nocache;

    SQL> select ORDERS_SEQ.nextval from dual;

    SQL> alter sequence ORDERS_SEQ increment by 1 cache 10000;

    なお、移行元の Sequence の現在値よりも極端に大きい値を設定すると実行時に以下のようなエラーが発生しますが Swingbench の OLTP 処理は継続されます。

    多少大きい程度の値に設定した場合は以下のエラーは発生しません。(Sequence の cache も考慮)

    The following error has occcured. Further occurences will be supressed but the error count will be incremented and recorded in the results file

    java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error: number precision too large

    ORA-06512: at "SOE2.ORDERENTRY", line 1028

    ORA-06512: at "SOE2.ORDERENTRY", line 1019

    ORA-06512: at line 1

     

     

     

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

     

     

    参考資料

    • マニュアル
      • 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 ハンズオンラボ