Oracle RDSからExadata Database ServiceへのZDM論理オンライン移行 (2025/10/02)

Oracle RDSからExadata Database ServiceへのZDM論理オンライン移行 (2025/10/02)

https://database-heartbeat.com/2025/10/02/zdm-logical-online-rds-exadbd-aws/

はじめに

このブログ記事では、Oracle Zero Downtime Migration (ZDM) 論理オンライン方式を用いて Oracle RDS から Exadata Database Service に移行する手順について説明します。この方式では、データのエクスポートとインポートに Oracle Data Pump を活用し、Data Pump のダンプファイルの保存には Amazon S3 オブジェクトストレージを使用します。さらに、Oracle GoldenGate を使用してソース・データベースとターゲット・データベースの同期を維持し、ダウンタイムを最小限に抑えた移行を実現します。

Base Database Service や Exadata Exascale Cloud Service などの別の共同管理 Oracle Database Cloud Service に移行する場合も、同じ手順が適用されます。

環境

  • ソース データベース: Oracle RDS
  • ターゲット データベース: Exadata データベース サービス
  • 中間ストレージの場所: Amazon S3 オブジェクト ストレージ バケット。
  • Oracle ZDM: RHEL 8 を搭載した AWS EC2 VM インスタンスにインストールされます。
  • Oracle GoldenGate: RHEL 8 を搭載した AWS EC2 VM インスタンス上の Podman コンテナにインストールされます。

ステップ1:Oracle ZDMをダウンロードしてインストールする

「Zero Downtime Migration ソフトウェアのセットアップ」または「パート 1/5: Zero Downtime Migration (ZDM) – 概要とインストール」の手順に従って、AWS EC2 VM インスタンスに Oracle ZDM ソフトウェアをダウンロードしてインストールします

ステップ2: S3バケットのアクセスキーとシークレットキーを取得する

Data Pump エクスポート ファイルをオブジェクト ストレージ バケットにアップロードするには、S3 への ZDM アクセスを提供する必要があります。

AWSドキュメント、またはこのブログ記事の手順1と2のに従って、アクセスキーID と シークレットアクセスキーを取得します。これらは以下のようになります。

Access key ID: AKIA2PCQOXHEFKTB6SU2
Secret access key: 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

ステップ3: RDSインスタンスがS3バケットにアクセスできるようにする

条件を確認し、 AWS ドキュメントの手順に従って、RDS インスタンスが S3 バケットにアクセスできるようにします。

ステップ4: PodmanにOracle GoldenGateをインストールする

このドキュメントの「Oracle GoldenGate on Podman」セクションで説明されている手順に従って、   EC2 VM インスタンス上の Podman コンテナに Oracle GoldenGate をダウンロードしてインストールします。

ステップ5: GoldenGateのソースRDSデータベースを構成する

オンライン論理移行中のデータポンプのパフォーマンスを最適化するには、STREAMS_POOL_SIZEデータベースパラメータを最低2GBに設定することをお勧めします。  統合抽出ごとに1GBのSTREAMS_POOL_SIZEに25%を加えたサイズが推奨値です。詳細はドキュメントをご覧ください。

RDS パラメータグループで次のパラメータを設定します。

STREAMS_POOL_SIZE=2147483648  --(=2GB)
ENABLE_GOLDENGATE_REPLICATION=true

次のコマンドを実行します。

EXEC rdsadmin.rdsadmin_util.alter_supplemental_logging(p_action => 'ADD');
EXEC rdsadmin.rdsadmin_util.force_logging(p_enable => true);
EXEC rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours',24);
  
CREATE TABLESPACE administrator;
CREATE USER ggadmin  IDENTIFIED BY "your_password" DEFAULT TABLESPACE ADMINISTRATOR TEMPORARY TABLESPACE TEMP;
ALTER USER ggadmin QUOTA UNLIMITED ON administrator;
GRANT CREATE SESSION, ALTER SESSION TO ggadmin;
GRANT RESOURCE TO ggadmin;
GRANT SELECT ANY DICTIONARY TO ggadmin;
GRANT FLASHBACK ANY TABLE TO ggadmin;
GRANT SELECT ANY TABLE TO ggadmin;
  
--Check the RDS_MASTER_ROLE:
SELECT * FROM sys.dba_role_privs WHERE granted_role = 'RDS_MASTER_ROLE';
GRANTEE              GRANTED_ROLE    ADM DEL DEF COM INH
-------------------- --------------- --- --- --- --- ---
SYS                  RDS_MASTER_ROLE YES NO  YES NO  NO
ADMIN                RDS_MASTER_ROLE NO  NO  YES NO  NO
--In this case, “SYS” and “ADMIN”. Use these two values in the following GRANT commands:
GRANT SELECT_CATALOG_ROLE TO SYS WITH ADMIN OPTION;
GRANT SELECT_CATALOG_ROLE TO ADMIN WITH ADMIN OPTION;
  
EXEC rdsadmin.rdsadmin_util.grant_sys_object ('DBA_CLUSTERS', 'GGADMIN');
GRANT EXECUTE ON DBMS_FLASHBACK TO ggadmin;
GRANT SELECT ON SYS.V_$DATABASE TO ggadmin;
GRANT ALTER ANY TABLE TO ggadmin;
EXEC rdsadmin.rdsadmin_dbms_goldengate_auth.grant_admin_privilege (grantee => 'ggadmin', privilege_type=> 'capture', grant_select_privileges => true, do_grants=> TRUE);
grant connect, resource to ggadmin;
grant unlimited tablespace to ggadmin;
grant create view to ggadmin;
grant create table to ggadmin;

Amazon RDS 上の Oracle GoldenGate で使用するためのソース データベースの設定については、RDS のドキュメントを参照してください 

ステップ6: ターゲットのExadata VMクラスタノードを準備する

ZDMホスト( パート1のタスク1後に作成)から zdmuser のSSH公開鍵を、ログインに使用するユーザー(この場合はopc )のターゲット・データベース・ホスト上の .ssh/authorized_keys ファイルにコピーします。このSSH公開鍵をすべてのExadata VMクラスタ・ノードにコピーします。

#on ZDM host as zdmuser
[zdmuser@zdmhost ~]$ cat .ssh/id_rsa.pub
#on the target database host as user opc
[opc@exavm1 ~]$ vi .ssh/authorized_keys
#insert the public key and save the changes
[opc@exavm2 ~]$ vi .ssh/authorized_keys
#insert the public key and save the changes

ステップ7: GoldenGate用のターゲットExadataデータベースを構成する

SYS ユーザーとして:

-- in the CDB
alter system set streams_pool_size = 2G;
alter system set ENABLE_GOLDENGATE_REPLICATION=TRUE scope=both;
-- in the PDB
alter session set container=pdb01;
create user ggadmin identified by "your_password" default tablespace users temporary
grant connect, resource to ggadmin;
grant unlimited tablespace to ggadmin;
grant select any dictionary to ggadmin;
grant create view to ggadmin;
grant select any table to ggadmin;
grant insert any table to ggadmin;
grant update any table to ggadmin;
grant delete any table to ggadmin;
grant execute on dbms_lock to ggadmin;
-- 19c
exec dbms_goldengate_auth.grant_admin_privilege('ggadmin');
-- 23ai
grant OGG_APPLY to ggadmin;

ステップ8: DZMサービスホストを準備する

ターゲットデータベースサーバーのホスト名とIPアドレスを/etc/hostsファイルに追加します。rootユーザーとして以下のコマンドを実行します。

[root@zdmhost ~]# vi /etc/hosts
#add the following entries
10.10.0.1 exavm1
10.10.0.2 exavm2

SSH特権ユーザーに対してTTYが無効になっていることを確認してください。TTYが無効になっている場合、次のコマンドはリモートホストからのデータをエラーなしで返します。

[zdmuser@zdmhost ~]$ ssh -i /home/zdmuser/.ssh/id_rsa opc@exavm1 "/usr/bin/sudo /bin/sh -c date"
Thu Oct  2 09:25:17 GMT 2025
  
[zdmuser@zdmhost ~]$ ssh -i /home/zdmuser/.ssh/id_rsa opc@exavm2 "/usr/bin/sudo /bin/sh -c date"
Thu Oct  2 09:25:29 GMT 2025

ステップ9: ZDMレスポンスファイルを作成する

ZDMホスト上に新しいレスポンスファイルを作成します。以下は、必要最小限のパラメータのみを指定した例です。zdmuserとして実行します。

[zdmuser@zdmhost ~]$ vi logical_online.rsp
# migration method
MIGRATION_METHOD=ONLINE_LOGICAL
DATA_TRANSFER_MEDIUM=AMAZONS3
# AWS RDS Oracle
SOURCEDATABASE_ENVIRONMENT_NAME=AMAZON
SOURCEDATABASE_ENVIRONMENT_DBTYPE=RDS_ORACLE
SOURCEDATABASE_ADMINUSERNAME=admin
SOURCEDATABASE_CONNECTIONDETAILS_HOST=orards2.cvi2oskioo1c.us-east-1.rds.amazonaws.com
SOURCEDATABASE_CONNECTIONDETAILS_SERVICENAME=ORCL
SOURCEDATABASE_CONNECTIONDETAILS_PORT=1521
SOURCEDATABASE_GGADMINUSERNAME=ggadmin
# data pump
DATAPUMPSETTINGS_EXPORTDIRECTORYOBJECT_NAME=DATA_PUMP_DIR
DATAPUMPSETTINGS_JOBMODE=SCHEMA
DATAPUMPSETTINGS_METADATAREMAPS-1=type:REMAP_TABLESPACE,oldValue:USERS,newValue:DATA
INCLUDEOBJECTS-1=owner:HR
DATAPUMPSETTINGS_IMPORTDIRECTORYOBJECT_NAME=DATA_PUMP_DIR
DATAPUMPSETTINGS_IMPORTDIRECTORYOBJECT_PATH=/u02/app/oracle/product/19.0.0.0/dbhome_1/rdbms/log/39035FC9A0DD562BE063240181AC869C
# target db
TARGETDATABASE_OCID=ocid1.database.oc1.iad.xxx
TARGETDATABASE_CONNECTIONDETAILS_SERVICENAME=pdb01.client.odb1.oraclevcn.com
TARGETDATABASE_CONNECTIONDETAILS_HOST=exavm1
TARGETDATABASE_CONNECTIONDETAILS_PORT=1521
TARGETDATABASE_ADMINUSERNAME=SYSTEM
TARGETDATABASE_GGADMINUSERNAME=ggadmin
# oci cli
OCIAUTHENTICATIONDETAILS_USERPRINCIPAL_USERID=ocid1.user.oc1..xxx
OCIAUTHENTICATIONDETAILS_USERPRINCIPAL_TENANTID=ocid1.tenancy.oc1..xxx
OCIAUTHENTICATIONDETAILS_USERPRINCIPAL_FINGERPRINT=43:05:e5:1f:63:8a:29:f3:02:67:ff:56:57:e3:bc:33
OCIAUTHENTICATIONDETAILS_USERPRINCIPAL_PRIVATEKEYFILE=/home/zdmuser/.oci/oci_api_key.pem
OCIAUTHENTICATIONDETAILS_REGIONID=us-ashburn-1
# s3 credentials
DUMPTRANSFERDETAILS_S3BUCKET_NAME=s3zdm
DUMPTRANSFERDETAILS_S3BUCKET_REGION=us-east-1
DUMPTRANSFERDETAILS_S3BUCKET_ACCESSKEY=AKIA2PCQOXHEFKTB6SU2
# GoldenGate
GOLDENGATEHUB_ADMINUSERNAME=oggadmin
GOLDENGATEHUB_SOURCEDEPLOYMENTNAME=Local
GOLDENGATEHUB_TARGETDEPLOYMENTNAME=Local
# Private IP of the VM where Podman is running
GOLDENGATEHUB_URL=https://172.31.45.112
GOLDENGATEHUB_ALLOWSELFSIGNEDCERTIFICATE=TRUE

ステップ10: 移行を評価する

ZDM ホストで、zdmuser として:

[zdmuser@zdmhost ~]$ $ZDMHOME/bin/zdmcli migrate database -rsp logical_online.rsp -eval

RDS および Exadata データベース管理者ユーザーのパスワードを対話的に入力するよう求められます。

ジョブのステータスを確認します。ZDMホストでzdmuserとして実行します。

[zdmuser@zdmhost ~]$ $ZDMHOME/bin/zdmcli query job -jobid 1
Job ID: 1
Job Type: "EVAL"
Current status: SUCCEEDED
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

ステップ11: 移行を開始する

評価のために同じコマンドを実行しますが、今回は -eval パラメータを指定しません。  -pauseafter ZDM_MONITOR_GG_LAGパラメータを追加して、ソースデータベースとターゲットデータベースの同期が維持された直後に移行を一時停止します。その後、アプリケーションのスイッチオーバーの準備ができたら、 zdmcli resume jobコマンド を使用してジョブを再開できます  。

ZDM ホストで、zdmuser として:

[zdmuser@zdmhost ~]$ $ZDMHOME/bin/zdmcli migrate database -rsp logical_online.rsp -pauseafter ZDM_MONITOR_GG_LAG

ジョブのステータスを確認します。ZDMホストでzdmuserとして実行します。

[zdmuser@zdmhost ~]$ $ZDMHOME/bin/zdmcli query job -jobid 2
Job ID: 2
Job Type: "MIGRATE"
Current status: PAUSED
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_DATAPUMP_EXPORT_SRC ............... COMPLETED
ZDM_TRANSFER_DUMPS_SRC ................ COMPLETED
ZDM_DATAPUMP_IMPORT_TGT ............... 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 ............ PENDING
ZDM_ADVANCE_SEQUENCES ................. PENDING
ZDM_REFRESH_MVIEW_TGT ................. PENDING
ZDM_SWITCHOVER_APP .................... PENDING
ZDM_POST_SWITCHOVER_TGT ............... PENDING
ZDM_RM_GG_EXTRACT_SRC ................. PENDING
ZDM_RM_GG_REPLICAT_TGT ................ PENDING
ZDM_DELETE_SCHEMA_TRANDATA_SRC ........ PENDING
ZDM_RM_HEARTBEAT_SRC .................. PENDING
ZDM_RM_CHECKPOINT_TGT ................. PENDING
ZDM_RM_HEARTBEAT_TGT .................. PENDING
ZDM_CLEAN_GG_HUB ...................... PENDING
ZDM_POST_ACTIONS ...................... PENDING
ZDM_CLEANUP_SRC ....................... PENDING

ステップ12: 移行を完了する

移行を完了するには、ZDM ジョブを再開します。

[zdmuser@zdmhost ~]$ $ZDMHOME/bin/zdmcli resume job -jobid 2

ステータスを確認します:

[zdmuser@zdmhost ~]$ $ZDMHOME/bin/zdmcli query job -jobid 2
Job ID: 2
Job Type: "MIGRATE"
Current status: SUCCEEDED
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_DATAPUMP_EXPORT_SRC ............... COMPLETED
ZDM_TRANSFER_DUMPS_SRC ................ COMPLETED
ZDM_DATAPUMP_IMPORT_TGT ............... 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_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

トラブルシューティング

問題が発生した場合は、次のログ ファイルを確認してください。

  • ZDM サーバー ログ: $ZDM_BASE/crsdata/<zdm_service_node>/rhp/rhpserver.log.0
  • ターゲット サーバー ログ:<oracle_base>/zdm/zdm_<tgt_db_name>_<job_id>/zdm/log

さらに読む

コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

Oracle GoldenGate 23aiでMicrosoft Fabricでのオープン・ミラーリングがサポートされるようになりました (2024/11/19)

OCIサービスを利用したWebサイトの作成 その4~Identity Cloud Serviceでサイトの一部を保護 (2021/12/30)