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
コメント
コメントを投稿