Oracle RDSからAutonomous DatabaseへのZDM論理オンライン移行 (2025/09/30)
Oracle RDSからAutonomous DatabaseへのZDM論理オンライン移行 (2025/09/30)
https://database-heartbeat.com/2025/09/30/zdm-logical-online-rds-adb-aws/

はじめに
このブログ記事では、Oracle Zero Downtime Migration (ZDM) 論理オンライン方式を用いて Oracle RDS から Autonomous Database に移行する手順について説明します。この方式では、データのエクスポートとインポートに Oracle Data Pump を活用し、Data Pump ダンプファイルの保存には Amazon S3 オブジェクトストレージを使用します。さらに、Oracle GoldenGate を使用してソース・データベースとターゲット・データベースの同期を維持し、ダウンタイムを最小限に抑えた移行を実現します。
環境
- ソースデータベース: Oracle RDS
- ターゲットデータベース: Autonomous Database
- 中間ストレージの場所: 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: AKIA2PCQOXHEFKTB6SU2Secret access key: 7MymZxpyL3NDJeNpMrfuDE8FJ1fp70BNpsP2Le9b |
ステップ3: RDSインスタンスがS3バケットにアクセスできるようにする
条件を確認し、 AWS ドキュメントの手順に従って、RDS インスタンスが S3 バケットにアクセスできるようにします。
ステップ4: Autonomous DatabaseからS3バケットへのアクセスを確認する
S3オブジェクトにアクセスするための認証情報として、DBMS_CLOUD PL/SQLパッケージを使用します。手順2で取得したアクセスキーを使用します。
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => '<Crednedial_Name>', username => '<Access_Key_ID>', password => '<Secret_Access_Key>' );END;/ -- in this exampleSQL> BEGIN DBMS_CLOUD.CREATE_CREDENTIAL( credential_name => 'AWSCRED', username => 'AKIA2PCQOXHEFKTB6SU2', password => '7MymZxpyL3NDJeNpMrfuDE8FJ1fp70BNpsP2Le9b' ); END; / PL/SQL procedure successfully completed. |
S3 バケットへのアクセスをテストするには、DBMS_CLOUD パッケージの LIST_OBJECTS 関数を使用してファイルを一覧表示します。
set lines 300col OBJECT_NAME for a50select OBJECT_NAME from dbms_cloud.list_objects('AWSCRED', 'https://s3zdm.s3.us-east-1.amazonaws.com'); |
ステップ5: PodmanにOracle GoldenGateをインストールする
このドキュメントの「Oracle GoldenGate on Podman」セクションで説明されている手順に従って、EC2 VM インスタンス上の Podman コンテナに Oracle GoldenGate をダウンロードしてインストールします。
ステップ6: GoldenGateのソースRDSデータベースを構成する
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 NOADMIN 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 のドキュメントを参照してください。
ステップ7: GoldenGate用のターゲットAutonomous Databaseを構成する
次のコマンドを実行します。
alter user ggadmin identified by your_password account unlock; |
ステップ8: ZDMレスポンスファイルを作成する
ZDMホスト上に新しいレスポンスファイルを作成します。以下は、必要最小限のパラメータのみを指定した例です。zdmuserとして実行します。
[zdmuser@zdmhost ~]$ vi logical_online.rsp# migration methodMIGRATION_METHOD=ONLINE_LOGICALDATA_TRANSFER_MEDIUM=AMAZONS3# AWS RDS OracleSOURCEDATABASE_ENVIRONMENT_NAME=AMAZONSOURCEDATABASE_ENVIRONMENT_DBTYPE=RDS_ORACLESOURCEDATABASE_ADMINUSERNAME=adminSOURCEDATABASE_CONNECTIONDETAILS_HOST=orards2.cvi2oskioo1c.us-east-1.rds.amazonaws.comSOURCEDATABASE_CONNECTIONDETAILS_SERVICENAME=ORCLSOURCEDATABASE_CONNECTIONDETAILS_PORT=1521SOURCEDATABASE_GGADMINUSERNAME=ggadmin# data pumpDATAPUMPSETTINGS_EXPORTDIRECTORYOBJECT_NAME=DATA_PUMP_DIRDATAPUMPSETTINGS_JOBMODE=SCHEMADATAPUMPSETTINGS_METADATAREMAPS-1=type:REMAP_TABLESPACE,oldValue:USERS,newValue:DATAINCLUDEOBJECTS-1=owner:HR# target dbTARGETDATABASE_OCID=ocid1.autonomousdatabase.oc1.iad.xxxTARGETDATABASE_ADMINUSERNAME=ADMINTARGETDATABASE_GGADMINUSERNAME=ggadmin# oci cliOCIAUTHENTICATIONDETAILS_USERPRINCIPAL_USERID=ocid1.user.oc1..xxxOCIAUTHENTICATIONDETAILS_USERPRINCIPAL_TENANTID=ocid1.tenancy.oc1..xxxOCIAUTHENTICATIONDETAILS_USERPRINCIPAL_FINGERPRINT=43:05:e5:1f:63:8a:29:f3:02:67:ff:56:57:e3:bc:33OCIAUTHENTICATIONDETAILS_USERPRINCIPAL_PRIVATEKEYFILE=/home/zdmuser/.oci/oci_api_key.pemOCIAUTHENTICATIONDETAILS_REGIONID=us-ashburn-1# s3 credentialsDUMPTRANSFERDETAILS_S3BUCKET_NAME=s3zdmDUMPTRANSFERDETAILS_S3BUCKET_REGION=us-east-1DUMPTRANSFERDETAILS_S3BUCKET_ACCESSKEY=AKIA2PCQOXHEFKTB6SU2# GoldenGateGOLDENGATEHUB_ADMINUSERNAME=oggadminGOLDENGATEHUB_SOURCEDEPLOYMENTNAME=LocalGOLDENGATEHUB_TARGETDEPLOYMENTNAME=Local# Private IP of the VM where Podman is runningGOLDENGATEHUB_URL=https://172.31.45.112 GOLDENGATEHUB_ALLOWSELFSIGNEDCERTIFICATE=TRUE |
OCI CLIパラメータは、ZDMがAutonomous Databaseの資格情報(ウォレットファイル)をダウンロードするために必要です。ZDMホストにOCI CLIをインストールしていない場合、またはOCI RESTエンドポイントへのポート443経由のHTTPS呼び出しができない場合は、Autonomous Databaseの資格情報ウォレットをダウンロードし、ZDMホストで解凍してください。パラメータファイルの内容は次のとおりです。
# skip the following parametersTARGETDATABASE_OCIDOCIAUTHENTICATIONDETAILS_*# and add the following parametersTARGETDATABASE_DBTYPE=ADBCCTARGETDATABASE_CONNECTIONDETAILS_HOST=example.adb.us-ashburn-1.oraclecloud.comTARGETDATABASE_CONNECTIONDETAILS_PORT=1521TARGETDATABASE_CONNECTIONDETAILS_SERVICENAME=adbzdm_high.atp.oraclecloud.comTARGETDATABASE_CONNECTIONDETAILS_TLSDETAILS_CREDENTIALSLOCATION=/home/zdmuser/adbwalletTABLESPACEDETAILS_EXCLUDE=UNDOTBS1,UNDO_2 |
ステップ9: 移行を評価する
ZDM ホストで、zdmuser として:
[zdmuser@zdmhost ~]$ $ZDMHOME/bin/zdmcli migrate database -rsp logical_online.rsp -eval |
RDS および Autonomous Database 管理ユーザーのパスワードと、S3 バケット アクセスのパスワード (シークレット アクセス キー、この例では 7MymZxpyL3NDJeNpMrfuDE8FJ1fp70BNpsP2Le9b) を入力するよう対話的に求められます。
ジョブのステータスを確認します。ZDMホストでzdmuserとして実行します。
[zdmuser@zdmhost ~]$ $ZDMHOME/bin/zdmcli query job -jobid 1Job ID: 1Job Type: "EVAL"Current status: SUCCEEDEDZDM_VALIDATE_TGT ...................... COMPLETEDZDM_VALIDATE_SRC ...................... COMPLETEDZDM_VALIDATE_GG_HUB ................... COMPLETEDZDM_VALIDATE_DATAPUMP_SETTINGS_SRC .... COMPLETEDZDM_VALIDATE_DATAPUMP_SETTINGS_TGT .... COMPLETEDZDM_PREPARE_DATAPUMP_SRC .............. COMPLETEDZDM_DATAPUMP_ESTIMATE_SRC ............. COMPLETED |
ステップ10: 移行を開始する
評価のために同じコマンドを実行しますが、今回は -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 2Job ID: 2Job Type: "MIGRATE"Current status: PAUSEDZDM_VALIDATE_TGT ...................... COMPLETEDZDM_VALIDATE_SRC ...................... COMPLETEDZDM_VALIDATE_GG_HUB ................... COMPLETEDZDM_VALIDATE_DATAPUMP_SETTINGS_SRC .... COMPLETEDZDM_VALIDATE_DATAPUMP_SETTINGS_TGT .... COMPLETEDZDM_PREPARE_DATAPUMP_SRC .............. COMPLETEDZDM_DATAPUMP_ESTIMATE_SRC ............. COMPLETEDZDM_PREPARE_GG_HUB .................... COMPLETEDZDM_ADD_HEARTBEAT_SRC ................. COMPLETEDZDM_ADD_SCHEMA_TRANDATA_SRC ........... COMPLETEDZDM_CREATE_GG_EXTRACT_SRC ............. COMPLETEDZDM_PREPARE_DATAPUMP_TGT .............. COMPLETEDZDM_DATAPUMP_EXPORT_SRC ............... COMPLETEDZDM_TRANSFER_DUMPS_SRC ................ COMPLETEDZDM_DATAPUMP_IMPORT_TGT ............... COMPLETEDZDM_POST_DATAPUMP_SRC ................. COMPLETEDZDM_POST_DATAPUMP_TGT ................. COMPLETEDZDM_ADD_HEARTBEAT_TGT ................. COMPLETEDZDM_ADD_CHECKPOINT_TGT ................ COMPLETEDZDM_CREATE_GG_REPLICAT_TGT ............ COMPLETEDZDM_START_GG_REPLICAT_TGT ............. COMPLETEDZDM_MONITOR_GG_LAG .................... COMPLETEDZDM_PREPARE_SWITCHOVER_APP ............ PENDINGZDM_ADVANCE_SEQUENCES ................. PENDINGZDM_REFRESH_MVIEW_TGT ................. PENDINGZDM_SWITCHOVER_APP .................... PENDINGZDM_POST_SWITCHOVER_TGT ............... PENDINGZDM_RM_GG_EXTRACT_SRC ................. PENDINGZDM_RM_GG_REPLICAT_TGT ................ PENDINGZDM_DELETE_SCHEMA_TRANDATA_SRC ........ PENDINGZDM_RM_HEARTBEAT_SRC .................. PENDINGZDM_RM_CHECKPOINT_TGT ................. PENDINGZDM_RM_HEARTBEAT_TGT .................. PENDINGZDM_CLEAN_GG_HUB ...................... PENDINGZDM_POST_ACTIONS ...................... PENDING |
ステップ11: 移行を完了する
移行を完了するには、ZDM ジョブを再開します。
[zdmuser@zdmhost ~]$ $ZDMHOME/bin/zdmcli resume job -jobid 2 |
ステータスを確認します:
[zdmuser@zdmhost ~]$ $ZDMHOME/bin/zdmcli query job -jobid 2Job ID: 2Job Type: "MIGRATE"Current status: SUCCEEDEDZDM_VALIDATE_TGT ...................... COMPLETEDZDM_VALIDATE_SRC ...................... COMPLETEDZDM_VALIDATE_GG_HUB ................... COMPLETEDZDM_VALIDATE_DATAPUMP_SETTINGS_SRC .... COMPLETEDZDM_VALIDATE_DATAPUMP_SETTINGS_TGT .... COMPLETEDZDM_PREPARE_DATAPUMP_SRC .............. COMPLETEDZDM_DATAPUMP_ESTIMATE_SRC ............. COMPLETEDZDM_PREPARE_GG_HUB .................... COMPLETEDZDM_ADD_HEARTBEAT_SRC ................. COMPLETEDZDM_ADD_SCHEMA_TRANDATA_SRC ........... COMPLETEDZDM_CREATE_GG_EXTRACT_SRC ............. COMPLETEDZDM_PREPARE_DATAPUMP_TGT .............. COMPLETEDZDM_DATAPUMP_EXPORT_SRC ............... COMPLETEDZDM_TRANSFER_DUMPS_SRC ................ COMPLETEDZDM_DATAPUMP_IMPORT_TGT ............... COMPLETEDZDM_POST_DATAPUMP_SRC ................. COMPLETEDZDM_POST_DATAPUMP_TGT ................. COMPLETEDZDM_ADD_HEARTBEAT_TGT ................. COMPLETEDZDM_ADD_CHECKPOINT_TGT ................ COMPLETEDZDM_CREATE_GG_REPLICAT_TGT ............ COMPLETEDZDM_START_GG_REPLICAT_TGT ............. COMPLETEDZDM_MONITOR_GG_LAG .................... COMPLETEDZDM_PREPARE_SWITCHOVER_APP ............ COMPLETEDZDM_ADVANCE_SEQUENCES ................. COMPLETEDZDM_REFRESH_MVIEW_TGT ................. COMPLETEDZDM_SWITCHOVER_APP .................... COMPLETEDZDM_POST_SWITCHOVER_TGT ............... COMPLETEDZDM_RM_GG_EXTRACT_SRC ................. COMPLETEDZDM_RM_GG_REPLICAT_TGT ................ COMPLETEDZDM_DELETE_SCHEMA_TRANDATA_SRC ........ COMPLETEDZDM_RM_HEARTBEAT_SRC .................. COMPLETEDZDM_RM_CHECKPOINT_TGT ................. COMPLETEDZDM_RM_HEARTBEAT_TGT .................. COMPLETEDZDM_CLEAN_GG_HUB ...................... COMPLETEDZDM_POST_ACTIONS ...................... COMPLETED |
コメント
コメントを投稿