レック・テクノロジー・コンサルティング株式会社TECH BLOG

Zero Downtime Migration ~検証編~

こんにちは。DB技術統括部のA.Kです。
既存環境からクラウドへの移行(クラウドリフト)を検討する際、課題の1つとして挙げられるのが「データ移行に伴うDB停止時間の最小化」です。
その最適解の一つとなるのが、Oracle社から提供されているソリューション「Zero Downtime Migration (ZDM) 」です。
現在、ZDMでは物理移行、論理移行およびハイブリッドなど要件に合わせて柔軟に移行方式を選択することが可能です。
本記事では、その中でも特にOracle GoldenGateを利用した「論理オンライン方式」に焦点を当てて、実際の検証結果に基づいた移行のステップを解説します。

※ZDMの全体像や基本機能については、「前回の記事:Zero Downtime Migration ~概要編~」をあわせて参照ください

【概要】検証環境のサーバ構成

本検証では、ZDMの「論理オンライン方式」を用いたデータ移行を検証するため、計4台のサーバで構成される環境を構築しました。
クラウドリフトのシナリオに沿って、ソースDBはオンプレミス、ターゲットDBはOCI (Oracle Cloud Infrastructure)としています。

  1. 【オンプレ】ZDMサービス・ホスト:データ移行プロセス全体を管理
  2. 【オンプレ】ソースDBサーバ:データ移行元環境
  3. 【OCI】ターゲットDBサーバ:データ移行先環境
  4. 【OCI】GoldenGate Hubサーバ:オンライン論理移行の要となる変更データの抽出・反映を管理

検証概要.png


【構築】ZDMサービス・ホスト

サーバの基本情報については、下図を参照ください。
 ZDMサーバ基本情報.png

  1. ZDM用ユーザおよびグループの作成
    以下のコマンドで、ZDM用ユーザ「zdmuser」およびZDM用グループ「zdm」を作成します。

    --- ZDM用ユーザおよびグループの作成 ---
    root# groupadd zdm
    root# useradd -g zdm zdmuser
    root# id zdmuser
    uid=1001(zdmuser) gid=1001(zdm) groups=1001(zdm)

  2. ZDM用ディレクトリの作成
    以下のコマンドで、ZDM用ディレクトリを作成します。

    --- ZDM用ディレクトリの作成 ---
    root# mkdir -p /home/zdmuser/zdminstall
    root# mkdir /home/zdmuser/zdmhome
    root# mkdir /home/zdmuser/zdmbase
    root# chown -R zdmuser:zdm /home/zdmuser/

    --- 作成確認 ---
    root# ls -lR /home/zdmuser/
    --- 以下、出力例 ---
    /home/zdmuser/:
    合計 0
    drwxr-xr-x. 2 zdmuser zdm 6 5月 2 01:36 zdmbase
    drwxr-xr-x. 2 zdmuser zdm 6 5月 2 01:36 zdmhome
    drwxr-xr-x. 2 zdmuser zdm 6 5月 2 01:36 zdminstall
    /home/zdmuser/zdmbase:
    合計 0
    /home/zdmuser/zdmhome:
    合計 0
    /home/zdmuser/zdminstall:
    合計 0

  3. 「zdminstall」ディレクトリにZDMのバイナリファイルを配置
    以下のコマンドで、配置したZDMのバイナリファイルの確認および権限変更を行います。
    ※「Oracle Zero Downtime Migration」のダウンロードはこちら

    --- ZDMバイナリファイルの配置 ---
    root# cd /home/zdmuser/zdminstall
    root# chown zdmuser:zdm /home/zdmuser/zdminstall/V1055491-01.zip
    root# ls -l /home/zdmuser/zdminstall
    -rw-r--r--. 1 zdmuser zdm 1125684981 5月 1 23:14 V1055491-01.zip

  4. 「zdmuser」の環境変数設定
    以下のコマンドで、「zdmuser」の環境変数を設定します。

    --- 環境変数設定 ---
    root# su - zdmuser
    zdmuser$ echo "export ORACLE_HOME=/home/zdmuser/zdmhome" >> /home/zdmuser/.bash_profile
    zdmuser$ echo "export ORACLE_BASE=/home/zdmuser/zdmbase" >> /home/zdmuser/.bash_profile
    zdmuser$ echo "export ZDM_HOME=/home/zdmuser/zdmhome" >> /home/zdmuser/.bash_profile
    zdmuser$ echo "export ZDM_BASE=/home/zdmuser/zdmbase" >> /home/zdmuser/.bash_profile
    zdmuser$ echo "export ZDM_INSTALL_LOC=/home/zdmuser/zdminstall" >> /home/zdmuser/.bash_profile
    zdmuser$ echo "export PATH=$ZDM_HOME/bin:$PATH" >> /home/zdmuser/.bash_profile
    zdmuser$ echo "export LD_LIBRARY_PATH=$ZDM_HOME/lib:$LD_LIBRARY_PATH" >> /home/zdmuser/.bash_profile

    --- 設定確認 ---
    zdmuser$ cat /home/zdmuser/.bash_profile
    --- 以下、出力例 ---
    ~前略~
    # User specific environment and startup programs
    export ORACLE_HOME=/home/zdmuser/zdmhome
    export ORACLE_BASE=/home/zdmuser/zdmbase
    export ZDM_HOME=/home/zdmuser/zdmhome
    export ZDM_BASE=/home/zdmuser/zdmbase
    export ZDM_INSTALL_LOC=/home/zdmuser/zdminstall
    export PATH=$ZDM_HOME/bin:$PATH
    export LD_LIBRARY_PATH=$ZDM_HOME/lib:$LD_LIBRARY_PATH

  5. ZDMのインストール
    以下のコマンドで、ZDMソフトウェアをインストールします。
     ・「ZDM service setup finished successfully...」が出力されることを確認します。

    --- ZIPファイルのunzip ---
    zdmuser$ cd /home/zdmuser/zdminstall
    zdmuser$ unzip ./V1055491-01.zip

    --- ZDMのインストール
    ---
    zdmuser$ export LC_ALL=C
    zdmuser$ cd /home/zdmuser/zdminstall/zdm26.1/
    zdmuser$ ./zdminstall.sh setup oraclehome=$ZDM_HOME oraclebase=$ZDM_BASE ziploc=./zdm_home.zip -zdm
    --- 以下、出力例 ---
    ZDM kit home: /home/zdmuser/zdminstall/zdm26.1
    /home/zdmuser/zdminstall/zdm26.1
    ---------------------------------------
    Validating zip file...
    ---------------------------------------
    ~中略~
    ---------------------------------------
    Adding java jre to ZDM
    ---------------------------------------
    ZDM service setup finished successfully...

  6. ZDMの起動
    以下のコマンドで、ZDMを起動します。
     ・「zdmservice start」において、「Server started successfully.」が出力されることを確認します。
     ・「zdmservice status」において、Runningの項目が「true」であることを確認します。

    --- ZDMの起動 ---
    zdmuser$ $ZDM_HOME/bin/zdmservice start
    --- 以下、出力例 ---
    No instance detected, starting zdmservice
    Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
    Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
    Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
    Java HotSpot(TM) 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.
    Server started successfully.

    --- ZDMの起動確認 ---
    zdmuser$ $ZDM_HOME/bin/zdmservice status
    --- 以下、出力例 ---
    ---------------------------------------
    Service Status
    ---------------------------------------
    Running: true
    Tranferport:
    Conn String: jdbc:derby:/home/zdmuser/zdmbase/derbyRepo;create=true
    Repo Path: /home/zdmuser/zdmbase/derbyRepo
    RMI port: 8897
    HTTP port: 8898
    SSH port: 22
    Wallet path: /home/zdmuser/zdmbase/crsdata/kuno-zdmserver/security

  7. レスポンスファイルの作成
    本検証で作成したレスポンスファイルの一例を以下に記載します。

    --- レスポンスファイルの作成 ---
    zdmuser$ cat zdm_migration.rsp
    --- 以下、出力例 ---

    #-------------------------------------------------------------------------------#
    # A. 基本設定 (Migration Method & Transfer)
    #-------------------------------------------------------------------------------#
    MIGRATION_METHOD=ONLINE_LOGICAL
    DATATRANSFERMEDIUM=OSS
    #-------------------------------------------------------------------------------#
    # B. 接続ユーザー
    #-------------------------------------------------------------------------------#
    TARGETDATABASE_ADMINUSERNAME=sys as sysdba
    SOURCEDATABASE_ADMINUSERNAME=sys as sysdba

    #-------------------------------------------------------------------------------#
    # C. ターゲットDBの情報
    #-------------------------------------------------------------------------------#
    TARGETDATABASE_CONNECTIONDETAILS_HOST=zdmtarget
    TARGETDATABASE_CONNECTIONDETAILS_PORT=1521
    TARGETDATABASE_OCID=ocid1.database.oc1.ap-tokyo-1.<ターゲットDBのOCID>
    TARGETDATABASE_CONNECTIONDETAILS_SERVICENAME=targetpdb1.sbprivate.zdmvcn.oraclevcn.com
    WALLET_TARGETADMIN=/home/zdmuser/zdm_wallets/tgt_sys
    WALLET_TARGETGGADMIN=/home/zdmuser/zdm_wallets/tgt_gg

    #-------------------------------------------------------------------------------#
    # D. ソースDBの情報
    #-------------------------------------------------------------------------------#
    SOURCEDATABASE_CONNECTIONDETAILS_HOST=zdmsource
    SOURCEDATABASE_CONNECTIONDETAILS_PORT=1521
    SOURCEDATABASE_CONNECTIONDETAILS_SERVICENAME=sourcedb
    WALLET_SOURCEADMIN=/home/zdmuser/zdm_wallets/src_sys
    WALLET_SOURCEGGADMIN=/home/zdmuser/zdm_wallets/src_gg

    #-------------------------------------------------------------------------------#
    # E. Data Pump設定
    #-------------------------------------------------------------------------------#
    DATAPUMPSETTINGS_JOBMODE=SCHEMA
    DATAPUMPSETTINGS_SCHEMABATCH-1=SCHEMA_A,SCHEMA_B
    TABLESPACEDETAILS_AUTOCREATE=TRUE
    DATAPUMPSETTINGS_EXPORTDIRECTORYOBJECT_NAME=ZDM_DATAPUMP
    DATAPUMPSETTINGS_IMPORTDIRECTORYOBJECT_NAME=ZDM_DATAPUMP
    DATAPUMPSETTINGS_DATAPUMPPARAMETERS_ENCRYPTION=NONE
    #-------------------------------------------------------------------------------#
    # F. GoldenGate Hub設定
    #-------------------------------------------------------------------------------#
    GOLDENGATEHUB_ADMINUSERNAME=oggadmin
    GOLDENGATEHUB_URL=https://10.X.X.X
    GOLDENGATEHUB_SOURCEDEPLOYMENTNAME=zdmGoldenGate
    GOLDENGATEHUB_TARGETDEPLOYMENTNAME=zdmGoldenGate
    WALLET_OGGSERVICEADMIN=/home/zdmuser/zdm_wallets/ogg_hub
    GOLDENGATESETTINGS_REPLICAT_PERFORMANCEPROFILE=LOW
    GOLDENGATEHUB_ALLOWSELFSIGNEDCERTIFICATE=TRUE
    GOLDENGATEHUB_COMPUTEID=ocid1.instance.oc1.ap-tokyo-1.<GoldenGate HubのOCID>
    SOURCEDATABASE_GGADMINUSERNAME=GGADMIN
    TARGETDATABASE_GGADMINUSERNAME=GGADMIN
    #-------------------------------------------------------------------------------#
    # G. Object Storage設定
    #-------------------------------------------------------------------------------#
    DATAPUMPSETTINGS_DATABUCKET_NAMESPACENAME=nr6rghi1lhm3
    DATAPUMPSETTINGS_DATABUCKET_BUCKETNAME=zdm-bucket
    OCIAUTHENTICATIONDETAILS_REGIONID=ap-tokyo-1
    OCIAUTHENTICATIONDETAILS_USERPRINCIPAL_userId=ocid1.user.oc1..<API実行ユーザーのOCID>
    OCIAUTHENTICATIONDETAILS_USERPRINCIPAL_tenantId=ocid1.tenancy.oc1..<テナントのOCID>
    OCIAUTHENTICATIONDETAILS_USERPRINCIPAL_fingerprint=<APIキーのフィンガープリント>
    OCIAUTHENTICATIONDETAILS_USERPRINCIPAL_privateKeyFile=/home/zdmuser/.oci/zdm_oci_api_key.pem
    WALLET_OCIAUTHTOKEN=/home/zdmuser/zdm_wallets/oss_token

【構築】ソースDBサーバ

サーバの基本情報については、下図を参照ください。
※本記事では、OracleソフトウェアのインストールやDatabase作成の手順についてはスキップします。
 ソースDBサーバ基本情報.png

以下、ZDMの「論理オンライン方式」を利用する際のソースDB側の詳細設定手順を記載します。

  1. FORCE LOGGINGの有効化
    以下のコマンドで、FORCE LOGGINGを有効化します。

    --- FORCE LOGGINGの有効化 ---
    oracle$ sqlplus / as sysdba
    SQL> alter database force logging;
    データベースが変更されました。

    --- 有効化確認 ---
    SQL> select force_logging from v$database;
    FORCE_LOGGING
    --------------------
    YES

  2. サプリメンタル・ログの有効化
    以下のコマンドで、サプリメンタル・ログを有効化します。

    --- SUPPLEMENTAL LOGの有効化 ---
    SQL> alter database add supplemental log data;
    データベースが変更されました。

    --- 有効化確認 ---
    SQL> select supplemental_log_data_min from v$database;
    SUPPLEMENTAL_LOG_DATA_MIN
    -------------------------------------
    YES

  3. 初期化パラメータの設定変更
    以下、2つの初期化パラメータについて設定値を変更します。
     ・ENABLE_GOLDENGATE_REPLICATION
     ・STREAMS_POOL_SIZE

    --- 初期化パラメータの設定変更 ---

    SQL> alter system set enable_goldengate_replication=TRUE SCOPE=BOTH;
    システムが変更されました。

    SQL> alter system set streams_pool_size=2G SCOPE=BOTH;
    システムが変更されました。

    --- 設定変更確認 ---
    SQL> show parameter enable_goldengate_replication;
    NAME                            TYPE      VALUE
    ------------------------------- --------- ------------------------------
    enable_goldengate_replication   boolean   TRUE

    SQL> show parameter streams_pool_size;
    NAME                TYPE          VALUE
    ------------------- ------------- ------------------------------
    streams_pool_size   big integer   2G
  4. GoldenGate用ユーザの作成
    以下のコマンドにてGoldenGate用ユーザを作成します。

    --- GoldenGate用ユーザの作成 ---
    SQL> create tablespace zdm_logical datafile size 1G autoextend off;
    表領域が作成されました。

    SQL> create user ggadmin identified by <任意のパスワード> default tablespace zdm_logical temporary tablespace temp;
    ユーザーが作成されました。

    --- 作成確認 ---
    SQL> select username, default_tablespace, account_status, created from dba_users where username='GGADMIN';

    USERNAME             DEFAULT_TABLESPACE   ACCOUNT_ST CREATED
    -------------------- -------------------- ---------- ----------
    GGADMIN              ZDM_LOGICAL          OPEN       26-04-28
  5. GoldenGate用ユーザへの権限付与
    以下のコマンドにてGoldenGate用ユーザへ権限付与します。

    --- GoldenGate用ユーザへの権限付与 ---
    SQL> grant connect, resource to ggadmin;
    SQL> grant dba to ggadmin;
    SQL> grant datapump_exp_full_database to ggadmin;
    SQL> grant unlimited tablespace to ggadmin;
    SQL> grant select any dictionary to ggadmin;
    SQL> grant select any table to ggadmin;
    SQL> grant create view to ggadmin;
    SQL> grant logmining to ggadmin;
    SQL> grant execute on dbms_lock to ggadmin;
    SQL> grant execute on dbms_streams_adm to ggadmin;
    権限付与が成功しました。

    SQL> exec dbms_goldengate_auth.GRANT_ADMIN_PRIVILEGE('ggadmin');
    PL/SQLプロシージャが正常に完了しました。

    --- 権限確認 ---
    SQL> select grantee, granted_role from dba_role_privs where grantee='GGADMIN';

    GRANTEE      GRANTED_ROLE
    ------------ ------------------------------
    GGADMIN      DATAPUMP_EXP_FULL_DATABASE
    GGADMIN      DBA
    GGADMIN      SELECT_CATALOG_ROLE
    GGADMIN      CONNECT
    GGADMIN      RESOURCE


    SQL> select grantee, privilege from dba_sys_privs where grantee='GGADMIN' order by privilege;

    GRANTEE      PRIVILEGE
    ------------ ------------------------------
    GGADMIN      ALTER ANY TABLE
    GGADMIN      ALTER SESSION
    GGADMIN      CREATE EVALUATION CONTEXT
    GGADMIN      CREATE JOB
    GGADMIN      CREATE RULE
    GGADMIN      CREATE RULE SET
    GGADMIN      CREATE VIEW
    GGADMIN      DEQUEUE ANY QUEUE
    GGADMIN      EXECUTE ANY RULE SET
    GGADMIN      FLASHBACK ANY TABLE
    GGADMIN      LOGMINING
    GGADMIN      SELECT ANY DICTIONARY
    GGADMIN      SELECT ANY TABLE
    GGADMIN      UNLIMITED TABLESPACE


    SQL> exit

  6. ディレクトリオブジェクトの作成
    以下のコマンドにてディレクトリオブジェクトを作成します。

    --- ディレクトリの作成 ---
    root# mkdir -p /zdm_datapump
    root# chown -R oracle:oinstall /zdm_datapump
    root# chmod -R 775 /zdm_datapump
    root# ls -ld /zdm_datapump
    drwxrwxr-x 2 oracle oinstall 6 5月 1 10:12 /zdm_datapump

    --- ディレクトリオブジェクトの作成 ---
    root# su - oracle
    oracle$ sqlplus / as sysdba
    SQL> create directory zdm_datapump as '/zdm_datapump';
    ディレクトリが作成されました。

    SQL> grant read, write on directory zdm_datapump to ggadmin;
    権限付与が成功しました。

    --- 作成確認
    ---
    SQL> select owner, directory_name, directory_path from dba_directories where table_name='ZDM_DATAPUMP';

    OWNER      DIRECTORY_NAME       DIRECTORY_PATH
    ---------- -------------------- ---------------------
    SYS        ZDM_DATAPUMP         /zdm_datapump


    SQL> select grantee, table_name, privilege from dba_tab_privs where table_name='ZDM_DATAPUMP';

    GRANTEE         TABLE_NAME           PRIVILEGE
    --------------- -------------------- ---------------
    GGADMIN         ZDM_DATAPUMP         READ
    GGADMIN         ZDM_DATAPUMP         WRITE

【構築】ターゲットDBサーバ

サーバの基本情報については、下図を参照ください。
※本記事では、BaseDBの作成手順についてはスキップします。
 ターゲットDBサーバ基本情報.png

以下、ZDMの「論理オンライン方式」を利用する際のソースDB側の詳細設定手順を記載します。

  1. 初期化パラメータの設定変更
    以下の初期化パラメータについて設定値を変更します。
     ・ENABLE_GOLDENGATE_REPLICATION

    --- 初期化パラメータの設定変更 ---
    oracle$ sqlplus / as sysdba
    SQL> alter session set container=targetpdb1;
    SQL> alter system set enable_goldengate_replication=TRUE SCOPE=BOTH;
    システムが変更されました。

    --- 設定変更確認 ---
    SQL> show parameter enable_goldengate_replication;
    NAME                            TYPE      VALUE
    ------------------------------- --------- ------------------------------
    enable_goldengate_replication   boolean   TRUE
  2. GoldenGate用ユーザの作成
    以下のコマンドにてGoldenGate用ユーザを作成します。

    --- GoldenGate用ユーザの作成 ---
    SQL> create tablespace zdm_logical datafile size 1G autoextend off;
    表領域が作成されました。

    SQL> create user ggadmin identified by <任意のパスワード> default tablespace zdm_logical temporary tablespace temp;
    ユーザーが作成されました。

    --- 作成確認 ---
    SQL> select username, default_tablespace, account_status, created from dba_users where username='GGADMIN';

    USERNAME             DEFAULT_TABLESPACE   ACCOUNT_ST CREATED
    -------------------- -------------------- ---------- ----------
    GGADMIN              ZDM_LOGICAL          OPEN       26-04-28
  3. GoldenGate用ユーザへの権限付与
    以下のコマンドにてGoldenGate用ユーザへ権限付与します。

    --- GoldenGate用ユーザへの権限付与 ---
    SQL> grant connect, resource to ggadmin;
    SQL> grant dba to ggadmin;
    SQL> grant OGG_APPLY to ggadmin;
    SQL> grant unlimited tablespace to ggadmin;
    SQL> grant select any dictionary to ggadmin;
    SQL> grant select any table to ggadmin;
    SQL> grant insert any table to ggadmin;
    SQL> grant update any table to ggadmin;
    SQL> grant delete any table to ggadmin;
    SQL> grant create view to ggadmin;
    SQL> grant logmining to ggadmin;
    SQL> grant datapump_imp_full_database to ggadmin;
    SQL> grant execute on dbms_lock to ggadmin;
    権限付与が成功しました。

    --- 権限確認 ---
    SQL> select grantee, granted_role from dba_role_privs where grantee='GGADMIN';

    GRANTEE      GRANTED_ROLE
    ------------ ------------------------------
    GGADMIN      CONNECT
    GGADMIN      DATAPUMP_IMP_FULL_DATABASE
    GGADMIN      DBA
    GGADMIN      OGG_APPLY
    GGADMIN      RESOURCE

    SQL> select grantee, privilege from dba_sys_privs where grantee='GGADMIN' order by privilege;
    GRANTEE      PRIVILEGE
    ------------ ------------------------------
    GGADMIN      CREATE VIEW
    GGADMIN      DELETE ANY TABLE
    GGADMIN      INSERT ANY TABLE
    GGADMIN      LOGMINING
    GGADMIN      SELECT ANY DICTIONARY
    GGADMIN      SELECT ANY TABLE
    GGADMIN      UNLIMITED TABLESPACE
    GGADMIN      UPDATE ANY TABLE


    SQL> exit

  4. ディレクトリオブジェクトの作成
    以下のコマンドにてディレクトリオブジェクトを作成します。

    --- ディレクトリの作成 ---
    root# mkdir -p /zdm_datapump
    root# chown -R oracle:oinstall /zdm_datapump
    root# chmod -R 775 /zdm_datapump
    root# ls -ld /zdm_datapump
    drwxrwxr-x 2 oracle oinstall 6 5月 1 10:12 /zdm_datapump

    --- ディレクトリオブジェクトの作成 ---
    root# su - oracle
    oracle$ sqlplus / as sysdba
    SQL> create directory zdm_datapump as '/zdm_datapump';
    ディレクトリが作成されました。

    SQL> grant read, write on directory zdm_datapump to ggadmin;
    権限付与が成功しました。

    --- 作成確認
    ---
    SQL> select owner, directory_name, directory_path from dba_directories where table_name='ZDM_DATAPUMP';

    OWNER      DIRECTORY_NAME       DIRECTORY_PATH
    ---------- -------------------- ---------------------
    SYS        ZDM_DATAPUMP         /zdm_datapump


    SQL> select grantee, table_name, privilege from dba_tab_privs where table_name='ZDM_DATAPUMP';

    GRANTEE         TABLE_NAME           PRIVILEGE
    --------------- -------------------- ---------------
    GGADMIN         ZDM_DATAPUMP         READ
    GGADMIN         ZDM_DATAPUMP         WRITE

【構築】GoldenGate Hubサーバ

サーバの基本情報については、下図を参照ください。
 GGHubサーバ基本情報.png

GoldenGate Hubサーバについては、OCI上のマーケットプレイスよりインスタンス作成を行います。

  1. OCIコンソール「マーケットプレイス」→「すべてのアプリケーション」を選択後、「Oracle GoldenGate」で検索します。
    「Oracle GoldenGate - Database Migrations」を選択します。
    GoldenGate-1.png
  2. 「スタックの起動」を選択します。
    GoldenGate-2.png
  3. コンポーネントとZDMのバージョンを入力した後、「スタックの起動」を選択します。
    GoldenGate-3.png
  4. スタックの名前や説明を入力した後、「Next」を選択します。
    GoldenGate-4.png
  5. インスタンスの名前や詳細情報等を入力した後、「Next」を選択します。
    GoldenGate-5.png
    GoldenGate-7.png
  6. 入力した情報に誤りがないことを確認した後、「適用の実行」にチェックを入れて「作成」を選択します。
    GoldenGate-8.png
  7. スタックによるインスタンス作成が問題なく完了していることを確認します。
    GoldenGate-9.png

  8. スタックによって作成されたインスタンスにSSH接続でログインし、GoldenGateサービス・マネージャのユーザ名とパスワードを確認します。

    --- ユーザ名とパスワードの確認 ---
    opc$ cat ~/ogg-credentials.json
    {"username": "oggadmin", "credential": "<自動生成された初期パスワード>"}


【データ移行】ZDMによる論理オンライン方式

  1. 【ソースDBサーバ】移行対象となるテストデータ確認
    ソースDBサーバにSSH接続して、移行元テストデータを確認します。
    本検証では、以下のスキーマオブジェクトを移行対象とします。
     ・スキーマ:SCHEMA_A, SCHEMA_B
     ・テーブル:TEST_DATA_A, TEST_DATA_B
     ・インデックス:SYS_C007293, SYS_C007294
     ・ビュー:VIEW_TEST_B

    --- 移行対象データの確認 ---
    zdmuser$ ssh oracle@<ソースDBサーバのIPアドレス>
    oracle$ sqlplus / as sysdba
    SQL> select username, account_status, created from dba_users where username in ('SCHEMA_A', 'SCHEMA_B');

    USERNAME    ACCOUNT_STATUS   CREATED
    ---------- ----------------- ---------------------
    SCHEMA_A   OPEN              26-04-28
    SCHEMA_B   OPEN              26-04-28

    SQL> select owner, object_name, object_type from dba_objects where owner in ('SCHEMA_A', 'SCHEMA_B') order by owner, object_type, object_name

    OWNER      OBJECT_NAME                OBJECT_TYPE 
    ---------- -------------------------- ------------
    SCHEMA_A   SYS_C007293                INDEX
    SCHEMA_A   TEST_DATA_A                TABLE
    SCHEMA_B   SYS_C007294                INDEX
    SCHEMA_B   TEST_DATA_B                TABLE
    SCHEMA_B   VIEW_TEST_B                VIEW

    SQL> select owner, status, count(*) from dba_objects where owner in ('SCHEMA_A', 'SCHEMA_B') group by owner, status order by owner, status;

    OWNER            STATUS    COUNT(*)
    --------------- ---------- -----------
    SCHEMA_A        VALID      2
    SCHEMA_B        VALID      3

    SQL> select owner, table_name, num_rows, last_analyzed from dba_tables where owner in ('SCHEMA_A', 'SCHEMA_B') order by owner, num_rows desc;

    OWNER            TABLE_NAME    NUM_ROWS
    --------------- ------------- -----------
    SCHEMA_A        TEST_DATA_A   1,000,000
    SCHEMA_B        TEST_DATA_B   2,000,000
  2. 【ZDMサービス・ホスト】移行前にZDMの評価コマンドを実行する
    移行コマンドである「zdmcli migrate database」に -eval オプションを付与することで、移行の可否を評価します。

    --- 移行対象データの確認 ---
    zdmuser$ zdmcli migrate database \
    > -rsp /home/zdmuser/zdm_rsp/zdm_migration.rsp \
    > -sourcedb sourcedb \
    > -sourcenode zdmsource \
    > -srcauth zdmauth \
    > -srcarg1 user:oracle \
    > -srcarg2 identity_file:/home/zdmuser/.ssh/id_rsa \
    > -srcarg3 sudo_location:/usr/bin/sudo \
    > -targetnode zdmtarget \
    > -tgtauth zdmauth \
    > -tgtarg1 user:opc \
    > -tgtarg2 identity_file:/home/zdmuser/.ssh/id_rsa \
    > -tgtarg3 sudo_location:/usr/bin/sudo \
    > -eval
    操作"zdmcli migrate database"がジョブID "XX"でスケジュールされました。

    zdmuser$ zdmcli query job -jobid XX
    ---以下、出力例---
    kuno-zdmserver: 監査ID: 765
    ジョブID: 15
    ユーザー: zdmuser
    クライアント: kuno-zdmserver
    ジョブ・タイプ: "EVAL"
    スケジュール済ジョブ・コマンド: "zdmcli migrate database -rsp /home/zdmuser/zdm_rsp/zdm_migration.rsp -sourcedb sourcedb -sourcenode zdmsource -srcauth zdmauth -srcarg1 user:oracle -srcarg2 identity_file:/home/zdmuser/.ssh/id_rsa -srcarg3 sudo_location:/usr/bin/sudo -targetnode zdmtarget -tgtauth zdmauth -tgtarg1 user:opc -tgtarg2 identity_file:/home/zdmuser/.ssh/id_rsa -tgtarg3 sudo_location:/usr/bin/sudo -eval"
    スケジュール済ジョブの実行開始時間: 2026-05-11T13:58:16+09。対応するローカル時間: 2026-05-11 13:58:16
    現在のステータス: SUCCEEDED
    結果ファイル・パス: "/home/zdmuser/zdmbase/chkbase/scheduled/job-14-2026-05-11-13:58:32.log"
    メトリック・ファイル・パス: "/home/zdmuser/zdmbase/chkbase/scheduled/job-14-2026-05-11-13:58:32.json"
    除外されたオブジェクト・ファイル・パス: "/home/zdmuser/zdmbase/chkbase/scheduled/job-14-filtered-objects-2026-05-11T13:58:47.118736062.json"
    ジョブの実行開始時間: 2026-05-11 13:58:32
    ジョブの実行終了時間: 2026-05-11 14:01:57
    ジョブの実行経過時間: 3分 24秒
    ZDM_VALIDATE_TGT ...................... COMPLETED
    ZDM_VALIDATE_SRC ...................... COMPLETED
    ZDM_SETUP_SRC ......................... COMPLETED
    ZDM_PRE_MIGRATION_ADVISOR ............. COMPLETED
    ZDM_VALIDATE_GG_HUB ................... COMPLETED
    ZDM_VALIDATE_DATAPUMP_SETTINGS_SRC .... COMPLETED
    ZDM_VALIDATE_DATAPUMP_SETTINGS_TGT .... COMPLETED
    ZDM_PREPARE_DATAPUMP_SRC .............. COMPLETED
    ZDM_DATAPUMP_ESTIMATE_SRC ............. COMPLETED
    ZDM_CLEANUP_SRC ....................... COMPLETED

  3. 【ZDMサービス・ホスト】ZDMの移行コマンドを実行する
    zdmcli migrate database」の評価コマンドから-evalを外して実行します。
    すべてのチェック項目において、「COMPLETED」と出力されることを確認します。

    --- 移行対象データの確認 ---
    zdmuser$ zdmcli migrate database \
    > -rsp /home/zdmuser/zdm_rsp/zdm_migration.rsp \
    > -sourcedb sourcedb \
    > -sourcenode zdmsource \
    > -srcauth zdmauth \
    > -srcarg1 user:oracle \
    > -srcarg2 identity_file:/home/zdmuser/.ssh/id_rsa \
    > -srcarg3 sudo_location:/usr/bin/sudo \
    > -targetnode zdmtarget \
    > -tgtauth zdmauth \
    > -tgtarg1 user:opc \
    > -tgtarg2 identity_file:/home/zdmuser/.ssh/id_rsa \
    > -tgtarg3 sudo_location:/usr/bin/sudo \
    操作"zdmcli migrate database"がジョブID "XX"でスケジュールされました。

    zdmuser$ zdmcli query job -jobid XX
    ---以下、出力例---
    zdmserver: 監査ID: 913
    ユーザー: zdmuser
    クライアント: zdmserver
    ジョブ・タイプ: "MIGRATE"
    スケジュール済ジョブ・コマンド: "zdmcli migrate database -rsp /home/zdmuser/zdm_rsp/zdm_migration.rsp -sourcedb sourcedb -sourcenode zdmsource -srcauth zdmauth -srcarg1 user:oracle -srcarg2 identity_file:/home/zdmuser/.ssh/id_rsa -srcarg3 sudo_location:/usr/bin/sudo -targetnode zdmtarget -tgtauth zdmauth -tgtarg1 user:opc -tgtarg2 identity_
    スケジュール済ジョブの実行開始時間: 2026-05-11T14:25:18+09。対応するローカル時間: 2026-05-11 14:25:18
    現在のステータス: SUCCEEDED
    結果ファイル・パス: "/home/zdmuser/zdmbase/chkbase/scheduled/job-16-2026-05-11-14:25:32.log"
    メトリック・ファイル・パス: "/home/zdmuser/zdmbase/chkbase/scheduled/job-16-2026-05-11-14:25:32.json"
    除外されたオブジェクト・ファイル・パス: "/home/zdmuser/zdmbase/chkbase/scheduled/job-16-filtered-objects-2026-05-11T14:25:50.011042738.json"
    ジョブの実行開始時間: 2026-05-11 14:25:32
    ジョブの実行終了時間: 2026-05-11 14:45:53
    ジョブの実行経過時間: 20分 20秒
    ダンプ接頭辞: ZDM_16_DP_EXPORT_863088_BATCH1_dmp
    ZDM_VALIDATE_TGT ...................... COMPLETED
    ZDM_VALIDATE_SRC ...................... COMPLETED
    ZDM_SETUP_SRC ......................... COMPLETED
    ZDM_PRE_MIGRATION_ADVISOR ............. COMPLETED
    ZDM_VALIDATE_GG_HUB ................... COMPLETED
    ZDM_VALIDATE_DATAPUMP_SETTINGS_SRC .... COMPLETED
    ZDM_VALIDATE_DATAPUMP_SETTINGS_TGT .... COMPLETED
    ZDM_PREPARE_DATAPUMP_SRC .............. COMPLETED
    ZDM_DATAPUMP_ESTIMATE_SRC ............. COMPLETED
    ZDM_PREPARE_GG_HUB .................... COMPLETED
    ZDM_ADD_HEARTBEAT_SRC ................. COMPLETED
    ZDM_ADD_SCHEMA_TRANDATA_SRC ........... COMPLETED
    ZDM_CREATE_GG_EXTRACT_SRC ............. COMPLETED
    ZDM_PREPARE_DATAPUMP_TGT .............. COMPLETED
    ZDM_PARALLEL_EXPORT_IMPORT ............ COMPLETED
    ZDM_POST_DATAPUMP_SRC ................. COMPLETED
    ZDM_POST_DATAPUMP_TGT ................. COMPLETED
    ZDM_ADD_HEARTBEAT_TGT ................. COMPLETED
    ZDM_ADD_CHECKPOINT_TGT ................ COMPLETED
    ZDM_CREATE_GG_REPLICAT_TGT ............ COMPLETED
    ZDM_START_GG_REPLICAT_TGT ............. COMPLETED
    ZDM_MONITOR_GG_LAG .................... COMPLETED
    ZDM_PREPARE_SWITCHOVER_APP ............ COMPLETED
    ZDM_RELOAD_PARALLEL_EXPORT_IMPORT ..... COMPLETED
    ZDM_ADVANCE_SEQUENCES ................. COMPLETED
    ZDM_REFRESH_MVIEW_TGT ................. COMPLETED
    ZDM_SWITCHOVER_APP .................... COMPLETED
    ZDM_POST_SWITCHOVER_TGT ............... COMPLETED
    ZDM_RM_GG_EXTRACT_SRC ................. COMPLETED
    ZDM_RM_GG_REPLICAT_TGT ................ COMPLETED
    ZDM_DELETE_SCHEMA_TRANDATA_SRC ........ COMPLETED
    ZDM_RM_HEARTBEAT_SRC .................. COMPLETED
    ZDM_RM_CHECKPOINT_TGT ................. COMPLETED
    ZDM_RM_HEARTBEAT_TGT .................. COMPLETED
    ZDM_CLEAN_GG_HUB ...................... COMPLETED
    ZDM_POST_ACTIONS ...................... COMPLETED
    ZDM_CLEANUP_SRC ....................... COMPLETED

  4. 【ターゲットDBサーバ】移行対象となるテストデータ確認
    ターゲットDBサーバにSSH接続して、移行先テストデータを確認します。
    本検証では、オンプレ側のテストデータがOCI側に問題なくクラウドリフトしていることを確認します。
    ※インデックス名については、Oracle自動命名のため、データ移行時に新しい名前が振りなおされています。

    --- 移行対象データの確認 ---
    zdmuser$ ssh oracle@<ターゲットDBサーバのIPアドレス>
    oracle$ sqlplus / as sysdba
    SQL> select username, account_status, created from dba_users where username in ('SCHEMA_A', 'SCHEMA_B');

    USERNAME    ACCOUNT_STATUS   CREATED
    ---------- ----------------- ---------------------
    SCHEMA_A   OPEN              26-05-11
    SCHEMA_B   OPEN              26-05-11

    SQL> select owner, object_name, object_type from dba_objects where owner in ('SCHEMA_A', 'SCHEMA_B') order by owner, object_type, object_name

    OWNER      OBJECT_NAME                OBJECT_TYPE 
    ---------- -------------------------- ------------
    SCHEMA_A   SYS_C008581                INDEX
    SCHEMA_A   TEST_DATA_A                TABLE
    SCHEMA_B   SYS_C008582                INDEX
    SCHEMA_B   TEST_DATA_B                TABLE
    SCHEMA_B   VIEW_TEST_B                VIEW

    SQL> select owner, status, count(*) from dba_objects where owner in ('SCHEMA_A', 'SCHEMA_B') group by owner, status order by owner, status;

    OWNER            STATUS    COUNT(*)
    --------------- ---------- -----------
    SCHEMA_A        VALID      2
    SCHEMA_B        VALID      3

    SQL> select owner, table_name, num_rows, last_analyzed from dba_tables where owner in ('SCHEMA_A', 'SCHEMA_B') order by owner, num_rows desc;

    OWNER            TABLE_NAME    NUM_ROWS
    --------------- ------------- -----------
    SCHEMA_A        TEST_DATA_A   1,000,000
    SCHEMA_B        TEST_DATA_B   2,000,000

まとめ

本記事では、Oracle Zero Downtime Migration (ZDM) の「論理オンライン方式」を用いた、オンプレミスからOCIへのクラウドリフト検証について解説しました。
実際に検証を通じて、以下の2点がZDMを利用する大きなメリットであると感じました。

  1. 複雑な工程の自動化
    本来であれば、Data Pumpによる初期ロード、SCNの同期、GoldenGateの各種プロセス(Extract/Replicat)の構築など、多くの手作業が必要な工程を、ZDMが1つのジョブとして統合・自動実行してくれる点は非常に強力です。

  2. 柔軟なフェーズ管理
    ジョブ実行中に各フェーズが細かく分かれており、同期状態を確認しながら任意のタイミングで切り替え(Switchover)を行えるため、計画停止時間のコントロールが容易です。

検証を終えてのアドバイス

論理移行を成功させるポイントは、「事前準備(前提条件)の徹底」に尽きます。 今回ご紹介した LC_ALL=C の設定や、ソースDB側でのサプリメンタル・ログの有効化、そしてggadminユーザへの適切な権限付与が一つでも漏れると、ジョブの評価フェーズや初期セットアップでエラーとなります。
本記事の構築手順が、ZDMを利用した際のスムーズなクラウドリフトの一助となれば幸いです。

最後までお読みいただきありがとうございました。

この記事をシェアする

  • Facebook
  • X
  • Pocket
  • Line
  • Hatena
  • Linkedin

資料請求・お問い合わせはこちら

ページトップへ戻る