Um eine Standby Datenbank in der OCI in der Hybrid Cloud Configuration aufzubauen, gibt es zwei offizielle Wege.
Dieser Artikel zeigt den Aufbau einer Data Guard Hybrid Cloud Configuration mittels Zero Downtime Migration (ZDM) und mittels dbaascli. Um eine Standby in der Hybrid Cloud Configuration aufzubauen sind ein paar Voraussetzungen zu erfüllen und Parameter zu konfigurieren. Die Konfiguration für die Hybrid Cloud Configuration ist in einem anderen Artikel bereits beschrieben.
Zero Downtime Migration (ZDM)
Um mit ZDM eine Migration mittels Data Guard durchführen zu können, müssen folgende Voraussetzungen erfüllt werden:
- Host mit ZDM Installation
- Verbindung vom ZDM Host zur Quelle und Ziel für ssh (Port 22)
- Verbindung zwischen Quelle und Ziel für sqlnet (z.B. Port 1521)
- Hostnamen müssen zwischen den 3 Parteien auflösbar sein
- Wallet mit Masterkey auf Quelle anlegen (für CDB und alle PDBs)
- Zieldatenbank in der OCI mit dem Cloud Tooling anlegen und konfigurieren (spfile Parameter)
Die einzelnen Schritte werden in diesem Artikel nicht behandelt. Sind die Voraussetzungen geschaffen, kann mit der Migration begonnen werden.
Um die Migration mittels ZDM durchzuführen, wird als erstes ein responsefile für die Datenbank angelegt:
MIGRATION_METHOD=ONLINE_PHYSICAL
PLATFORM_TYPE=VMDB
ZDM_USE_DG_BROKER=TRUE
DATA_TRANSFER_MEDIUM=DIRECT
ZDM_RMAN_DIRECT_METHOD=RESTORE_FROM_SERVICE
ZDM_SRC_DB_RESTORE_SERVICE_NAME=AGZDM_EXA
TGT_DB_UNIQUE_NAME=AGZDM_OCI
Die Migrationsmethode ONLINE_PHYSICAL bedeuted, dass für die Migration eine Standby Datenabenk mittels Data Guard aufegaut wird. Die Datenbank wird in dieser Konfiguration von der Aktiven Datenbank restored.
Evaluate
Bevor die Migration gestartet wird, sollte diese evaluiert werden, ob alle Voraussetzungen erfüllt sind.
Bei den Findings der Evaluierung kamen folgende Meldungen:
PRGZ-1132 : -eval failed for the phase ZDM_VALIDATE_TGT with exception
PRGT-1017 : The target Oracle Database home "/u01/app/oracle/product/19.0.0.0/dbhome_1" is missing the patches for bug numbers "35286895,...,8476681,9002767"
Um diese Warning zu umgehen, muss der Parameter -ignoremissingpatches verwendet werden.
Fehlt das Wallet mit dem Masterkey auf der Quelle, kommt es zu folgendem Fehler:
vm-zdm-host-ag: 2026-05-06T11:28:11.816Z : Job duration: 2 minutes and 21 seconds
PRGZ-1132 : -eval failed for the phase ZDM_VALIDATE_SRC with exception
PRGZ-3108 : Oracle Transparent Data Encryption (TDE) keystore is not set up for database "AGZDM_EXA".
Sind alle Voraussetzungen erfüllt, sollte der Job Output wie folgt aussehen:
[zdmuser@vm-zdm-host-ag ~]$ zdmcli query job -jobid 24
vm-zdm-host-ag.subnetag.vcnlabconnect.oraclevcn.com: Audit ID: 149
Job ID: 24
User: zdmuser
Client: vm-zdm-host-ag
Job Type: "EVAL"
Scheduled job command: "zdmcli migrate database -rsp /home/zdmuser/responsefiles/agzdm_dg.rsp -sourcedb AGZDM_EXA -sourcenode exa02dbadm01 -srcauth dbuser -srcarg1 user:oracle -srcarg2 identity_file:/home/zdmuser/.ssh/id_rsa -targetnode agzdm -tgtauth zdmauth -tgtarg1 user:opc -tgtarg2 identity_file:/home/zdmuser/.ssh/id_rsa -tgtarg3 sudo_location:/usr/bin/sudo -ignoremissingpatches 35286895,...,8476681,9002767 -tdekeystorepasswd -eval"
Scheduled job execution start time: 2026-05-21T11:34:21Z. Equivalent local time: 2026-05-21 11:34:21
Current status: SUCCEEDED
Result file path: "/u01/app/base/chkbase/scheduled/job-24-2026-05-21-11:34:43.log"
Metrics file path: "/u01/app/base/chkbase/scheduled/job-24-2026-05-21-11:34:43.json"
Job execution start time: 2026-05-21 11:34:43
Job execution end time: 2026-05-21 11:37:10
Job execution elapsed time: 2 minutes 26 seconds
ZDM_GET_SRC_INFO ........... PRECHECK_PASSED
ZDM_GET_TGT_INFO ........... PRECHECK_PASSED
ZDM_PRECHECKS_SRC .......... PRECHECK_PASSED
ZDM_PRECHECKS_TGT .......... PRECHECK_PASSED
ZDM_SETUP_SRC .............. PRECHECK_PASSED
ZDM_SETUP_TGT .............. PRECHECK_PASSED
ZDM_PREUSERACTIONS ......... PRECHECK_PASSED
ZDM_PREUSERACTIONS_TGT ..... PRECHECK_PASSED
ZDM_VALIDATE_SRC ........... PRECHECK_PASSED
ZDM_VALIDATE_TGT ........... PRECHECK_PASSED
ZDM_POSTUSERACTIONS ........ PRECHECK_PASSED
ZDM_POSTUSERACTIONS_TGT .... PRECHECK_PASSED
ZDM_CLEANUP_SRC ............ PRECHECK_PASSED
ZDM_CLEANUP_TGT ............ PRECHECK_PASSED
Migrate
Die Migration kann dann mit folgendem Befehl gestartet werden:
zdmcli migrate database \
-rsp /home/zdmuser/responsefiles/agzdm_dg.rsp \
-sourcedb AGZDM_EXA \
-sourcenode exa02dbadm01 \
-srcauth dbuser \
-srcarg1 user:oracle \
-srcarg2 identity_file:/home/zdmuser/.ssh/id_rsa \
-targetnode agzdm \
-tgtauth zdmauth \
-tgtarg1 user:opc \
-tgtarg2 identity_file:/home/zdmuser/.ssh/id_rsa \
-tgtarg3 sudo_location:/usr/bin/sudo
-ignoremissingpatches „35286895,…,8476681,9002767" \
-tdekeystorepasswd \
-pauseafter ZDM_CONFIGURE_DG_SRC
Mit dem Parameter -pauseafter ZDM_CONFIGURE_DG_SRC wird die Migration gestartet und dann gestoppt, sobald die neue Data Guard Standby aufgebaut und verfügbar ist. Es ist noch kein Switchover erfolgt, die Quell-Datenbank ist unverändert.
Logfile:

Hierbei ist zu sehen, dass die erstellte Ziel-Datenbank von ZDM gedroppt und dann von der Quelle neu aufgebaut wird. Der Restore from Servic
Die RMAN Befehle sind in zdm Logfiles auf dem Ziel zu finden:
logfile /u01/app/oracle/zdm/zdm_AGZDM_OCI_22/zdm/zdm_oss_restore_tgt_restoredb_96114.log:

ZDM führt mittels rman ein „restore database as encrypted from service“ aus. Somit werden die Datafiles auf dem Ziel verschlüsselt.
Die Migration läuft dann bis zum Abschluss der Phase ZDM_CONFIGURE_DG_SRC:
[zdmuser@vm-zdm-host-ag ~]$ zdmcli query job -jobid 22
vm-zdm-host-ag.subnetag.vcnlabconnect.oraclevcn.com: Audit ID: 131
Job ID: 22
User: zdmuser
Client: vm-zdm-host-ag
Job Type: "MIGRATE"
Scheduled job command: "zdmcli migrate database -rsp /home/zdmuser/responsefiles/agzdm_dg.rsp -sourcedb AGZDM_EXA -sourcenode exa02dbadm01 -srcauth dbuser -srcarg1 user:oracle -srcarg2 identity_file:/home/zdmuser/.ssh/id_rsa -targetnode agzdm -tgtauth zdmauth -tgtarg1 user:opc -tgtarg2 identity_file:/home/zdmuser/.ssh/id_rsa -tgtarg3 sudo_location:/usr/bin/sudo -ignoremissingpatches 35286895,...,8476681,9002767 -tdekeystorepasswd"
Scheduled job execution start time: 2026-05-08T09:31:45Z. Equivalent local time: 2026-05-08 09:31:45
Current status: PAUSED
Current Phase: "ZDM_CONFIGURE_DG_SRC"
Result file path: "/u01/app/base/chkbase/scheduled/job-22-2026-05-08-09:31:53.log"
Metrics file path: "/u01/app/base/chkbase/scheduled/job-22-2026-05-08-09:31:53.json"
Job execution start time: 2026-05-08 09:31:53
Job execution end time: 2026-05-12 10:06:44
Job execution elapsed time: 53 minutes 52 seconds
ZDM_GET_SRC_INFO ................ COMPLETED
ZDM_GET_TGT_INFO ................ COMPLETED
ZDM_PRECHECKS_SRC ............... COMPLETED
ZDM_PRECHECKS_TGT ............... COMPLETED
ZDM_SETUP_SRC ................... COMPLETED
ZDM_SETUP_TGT ................... COMPLETED
ZDM_PREUSERACTIONS .............. COMPLETED
ZDM_PREUSERACTIONS_TGT .......... COMPLETED
ZDM_VALIDATE_SRC ................ COMPLETED
ZDM_VALIDATE_TGT ................ COMPLETED
ZDM_DISCOVER_SRC ................ COMPLETED
ZDM_COPYFILES ................... COMPLETED
ZDM_PREPARE_TGT ................. COMPLETED
ZDM_SETUP_TDE_TGT ............... COMPLETED
ZDM_RESTORE_TGT ................. COMPLETED
ZDM_RECOVER_TGT ................. COMPLETED
ZDM_FINALIZE_TGT ................ COMPLETED
ZDM_CONFIGURE_DG_SRC ............ COMPLETED
ZDM_SWITCHOVER_SRC .............. PENDING
ZDM_SWITCHOVER_TGT .............. PENDING
ZDM_POST_DATABASE_OPEN_TGT ...... PENDING
ZDM_DATAPATCH_TGT ............... PENDING
ZDM_UPDATE_PLATFORM_METADATA .... PENDING
ZDM_POST_MIGRATE_TGT ............ PENDING
ZDM_POSTUSERACTIONS ............. PENDING
ZDM_POSTUSERACTIONS_TGT ......... PENDING
ZDM_CLEANUP_SRC ................. PENDING
ZDM_CLEANUP_TGT ................. PENDING
Pause After Phase: "ZDM_CONFIGURE_DG_SRC"
In diesem Status ist die Standby erstellt und der Data Guard Broker Config erstellt:

In dieser Phase kann dann z.B. mittels Snapshot Standby in der OCI getestet werden:
DGMGRL> convert database agzdm_oci to snapshot standby;
Converting database "agzdm_oci" to a Snapshot Standby database, please wait...
Database "agzdm_oci" converted successfully
DGMGRL> show configuration lag
Configuration - ZDM_agzdm_exa
Protection Mode: MaxPerformance
Members:
agzdm_exa - Primary database
agzdm_oci - Snapshot standby database
Transport Lag: 0 seconds (computed 0 seconds ago)
Apply Lag: 1 minute 20 seconds (computed 0 seconds ago)
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 40 seconds ago)
DGMGRL> convert database agzdm_oci to physical standby;
Converting database "agzdm_oci" to a Physical Standby database, please wait...
Oracle Clusterware is restarting database "agzdm_oci" ...
Connected to "AGZDM_OCI"
Continuing to convert database "agzdm_oci" ...
Database "agzdm_oci" converted successfully
DGMGRL> show configuration lag
Configuration - ZDM_agzdm_exa
Protection Mode: MaxPerformance
Members:
agzdm_exa - Primary database
agzdm_oci - Physical standby database
Transport Lag: 0 seconds (computed 0 seconds ago)
Apply Lag: 0 seconds (computed 0 seconds ago)
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 50 seconds ago)
Zum Zeitpunkt der Migration kann dann mittels zdmcli der Job wieder gestartet werden:
zdmcli resume job -jobid 22
ZDM führt den Switchover und einige Nacharbeiten aus:
[zdmuser@vm-zdm-host-ag ~]$ zdmcli query job -jobid 22
vm-zdm-host-ag.subnetag.vcnlabconnect.oraclevcn.com: Audit ID: 140
Job ID: 22
User: zdmuser
Client: vm-zdm-host-ag
Job Type: "MIGRATE"
Scheduled job command: "zdmcli migrate database -rsp /home/zdmuser/responsefiles/agzdm_dg.rsp -sourcedb AGZDM_EXA -sourcenode exa02dbadm01 -srcauth dbuser -srcarg1 user:oracle -srcarg2 identity_file:/home/zdmuser/.ssh/id_rsa -targetnode agzdm -tgtauth zdmauth -tgtarg1 user:opc -tgtarg2 identity_file:/home/zdmuser/.ssh/id_rsa -tgtarg3 sudo_location:/usr/bin/sudo -ignoremissingpatches 35286895,...,,8476681,9002767 -tdekeystorepasswd"
Scheduled job execution start time: 2026-05-08T09:31:45Z. Equivalent local time: 2026-05-08 09:31:45
Current status: SUCCEEDED
Result file path: "/u01/app/base/chkbase/scheduled/job-22-2026-05-08-09:31:53.log"
Metrics file path: "/u01/app/base/chkbase/scheduled/job-22-2026-05-08-09:31:53.json"
Job execution start time: 2026-05-08 09:31:53
Job execution end time: 2026-05-21 06:57:05
Job execution elapsed time: 1 hours 9 minutes 1 seconds
ZDM_GET_SRC_INFO ................ COMPLETED
ZDM_GET_TGT_INFO ................ COMPLETED
ZDM_PRECHECKS_SRC ............... COMPLETED
ZDM_PRECHECKS_TGT ............... COMPLETED
ZDM_SETUP_SRC ................... COMPLETED
ZDM_SETUP_TGT ................... COMPLETED
ZDM_PREUSERACTIONS .............. COMPLETED
ZDM_PREUSERACTIONS_TGT .......... COMPLETED
ZDM_VALIDATE_SRC ................ COMPLETED
ZDM_VALIDATE_TGT ................ COMPLETED
ZDM_DISCOVER_SRC ................ COMPLETED
ZDM_COPYFILES ................... COMPLETED
ZDM_PREPARE_TGT ................. COMPLETED
ZDM_SETUP_TDE_TGT ............... COMPLETED
ZDM_RESTORE_TGT ................. COMPLETED
ZDM_RECOVER_TGT ................. COMPLETED
ZDM_FINALIZE_TGT ................ COMPLETED
ZDM_CONFIGURE_DG_SRC ............ COMPLETED
ZDM_SWITCHOVER_SRC .............. COMPLETED
ZDM_SWITCHOVER_TGT .............. COMPLETED
ZDM_POST_DATABASE_OPEN_TGT ...... COMPLETED
ZDM_DATAPATCH_TGT ............... COMPLETED
ZDM_UPDATE_PLATFORM_METADATA .... COMPLETED
ZDM_POST_MIGRATE_TGT ............ COMPLETED
ZDM_POSTUSERACTIONS ............. COMPLETED
ZDM_POSTUSERACTIONS_TGT ......... COMPLETED
ZDM_CLEANUP_SRC ................. COMPLETED
ZDM_CLEANUP_TGT ................. COMPLETED
Wahlweise kann der Switchover auch manuell ausgeführt werden und dann die Phasen des Switchover beim resume Job übersprungen werden:
zdmcli resume job -jobid 22 -skip SWITCHOVER
ZDM übernimmt dann den Switchover und je nach Konfiguration im response file auch den Abbau der Data Guard Konfiguration. Möchte man diese beibehalten, kann im response file der Parameter ZDM_SKIP_DG_CONFIG_CLEANUP=TRUE angegeben werden. Damit ist dann ein Fallback nach der Migration möglich.
dbaascli
Eine weitere Methode für den Aufbau einer Standby in der Data Guard Hybrid Cloud Configuration ist das dbaascli. Dies ist jedoch nur für die Exa Data Cloud Services (ExaCS/ExaCC/Exa@Multicloud) verfügbar.
Das Vorgehen ist folgendes:
- Wallet auf Source erstellen
- dbcacli von der Exa Data Cloud Service auf Source onPrem kopieren
- Blob-file auf Source erzeugen
- Blob-file auf Target kopieren
- dbaascli Standby erzeugen
- Verschlüsseln der Datenbank
Das Vorgehen mit dbaascli unterscheidet sich in einigen Punkten von der Migration mittels ZDM:
- Es muss keine Datenbank in der Cloud vor der Migration angelegt und konfiguriert werden. Dies wird von dbaascli während des Standby Aufbaus übernommen.
- Die Standby wird identisch von der Primary aufgebaut. Somit ist keine Verschlüsselung aktiv.
- das Tool dbaascli ist nur für ExaCS/ExaCC verfügbar und kann somit nur für Migrationen auf einen ExaCS/ExaCC genutzt werden.
- dbaascli übernimmt den Aufbau der Standby, jedoch muss die Migration (Switchover) manuell gemacht werden.
Als erstes muss das Toolset dbcacli von der ExaCS auf den Source-Server kopiert werden.
Anschließend kann mit dem dbcacli die Vorbereitung auf der Quelle für den Aufbau der Standby getroffen werden:
/va/var/opt/oracle/dbaastools/dbaasca/bin/dbca \
-silent \
-oui_internal \
-configureDatabase \
-prepareForStandby \
-dgTNSNamesoraFilePath /acfs01 \
-sourceDB agzdm \
-standbyDBUniqueName agzdm_oci1 \
-standbyScanName agzdm-scan \
-standbyScanPort 1521 \
-blobFileLocation /tmp
Das dabei erzeugte Blob-file /tmp/agzdm1_2025-11-25_01-44-52-PM_83642.tar muss auf die Zielumgebung in der Cloud kopiert werden.
Das tar-file enthält wichtige Dateien und Informationen über die Quelle:
[oracle@agzdm]$ unzip -l agzdm_2025-11-03_01-32-28PM_173167.tar
Archive: agzdm_2025-11-03_01-32-28PM_173167.tar
Length Date Time Name
--------- ---------- ----- ----
3993 11-03-2025 13:33 ewallet.p12
8704 11-03-2025 13:33 orapwagzdm
14738 11-03-2025 13:33 tnsnames.ora
379 11-03-2025 13:33 agzdm_agzdm_exa_prepareForStandby_2025-11-03_01-32-28PM.json
189 11-03-2025 13:33 index.json
--------- -------
28003 5 files
[oracle@agzdm]$ cat index.json
{
"passwordFile" : "orapwagzdm",
"tdeWallet" : "ewallet.p12",
"dbInfoFile" : „agzdm_agzdm_exa_prepareForStandby_2025-11-03_01-32-28PM.json",
"tnsnamesFile" : "tnsnames.ora"
}
[oracle@agzdm]$ cat agzdm_agzdm_exa_prepareForStandby_2025-11-03_01-32-28PM.json
{
"standbyDBUniqueName" : „agzdm_oci",
"standbyDBDomain" : "",
"standbyHostName" : [ „agzdm-scan" ],
"standbyScanPort" : "1521",
"standbyServiceName" : „agzdm_oci",
"primaryHostName" : [ "10.10.10.1", "10.10.10.2", "10.10.10.3" ],
"primaryScanPort" : "1521",
"keyStoreType" : "FILE",
"kmsKeyOCID" : "",
"oracleHomeVersion" : "19.26.0.0.0„
}
Auf der Zielumgebung kann dann der Aufbaue der Standby initiiert werden:
dbaascli dataguard configureStandby \
--dbname agzdm1 \
--standbySID agzdm1 \
--datafileDestination +DATAC1 \
--fraDestination +RECOC1 \
--oracleHome /u02/app/oracle/product/19.0.0.0/dbhome_2 \
--standbyDBUniqueName agzdm1_oci1 \
--noDBDomain \
--primaryScanIPAddresses exa02dbadm-scan \
--primaryScanPort 1521 \
--primaryServiceName agzdm1_exa1 \
--protectionMode MAX_PERFORMANCE \
--transportType ASYNC \
--activeDG true \
--standbyScanIPAddresses agzdm-scan \
--standbyScanPort 1521 \
--standbyBlobFromPrimary /tmp/agzdm1_2025-11-25_01-44-52-PM_83642.tar \
--tdeKeyStoreType FILE \
--skipAWRConfiguration true \
--skipDRConfiguration true \
--waitForCompletion false
Mit der dbaascli Version 25.3.1.0.0 kommt es zu folgendem Warning bei der Hybrid Cloud Configuration:
SR dbaascli - bugg: "[FATAL] [DBAAS-60071] Operation has failed with following error message:\n
[FATAL] [DBT-17063] Tablespace encryption is not supported for the specified operation.\n
CAUSE: Transparent Data Encryption (TDE) initialization parameter 'TABLESPACE_ENCRYPTION' with value ''DECRYPT_ONLY' or 'ENCRYPT_NEW_TABLESPACES' with value 'DDL' is specified.\n
ACTION: Ensure that the supported initialization parameter value is specified for the encryption..",
Folgender Parameter muss beim dbaascli dataguard configureStandby Befehl hinzugefügt werden, damit die Hybrid Cloud Configuration wieder funktioniert:
--dbca_additional_args "-J-Dapplication.exceptions.severity=DBT-17063:WARNING"
Da von dbaascli die Datenbank in der Cloud nicht verschlüsselt wird, kann es folgende Meldungen im alert-log geben:
2026-04-08T18:05:24.079504+02:00
Warning: Oracle detects unencrypted tablespace SYSTEM (pdb 1) in the
Oracle Cloud. Oracle mandates all tablespaces to be
encrypted in the Cloud shortly after migration. Please refer
to the Oracle Database Advanced Security Administrator's
Guide to encrypt this tablespace.
Die Verschlüsselung der Standby muss anschließend manuell vorgenommen werden. Dies kann wie folgt durchgeführt werden:
SQL> alter system set dg_broker_start=false scope=both sid='*';
System altered.
SQL> alter tablespace DATA encryption offline encrypt;
Tablespace altered.
SQL> alter system set dg_broker_start=true scope=both sid='*';
System alterd.