{"id":31203,"date":"2024-02-25T21:06:27","date_gmt":"2024-02-25T20:06:27","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=31203"},"modified":"2024-04-06T21:40:15","modified_gmt":"2024-04-06T19:40:15","slug":"physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/","title":{"rendered":"Physical Online Migration to ExaCC with Oracle Zero Downtime Migration (ZDM)"},"content":{"rendered":"\n<p>A while ago I had been testing and blogging about ZDM, see my previous articles. And I finally had the chance to implement it at one of our customer to migrate on-premise databases to Exadata Cloud @Customer. After having been implementing Logical Offline migration with ZDM, see my previous article,  <a href=\"https:\/\/www.dbi-services.com\/blog\/logical-offline-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/\">https:\/\/www.dbi-services.com\/blog\/logical-offline-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/<\/a>, I had the opportunity to implement a Physical Online Migration and testing it with one database taken as pilot. In this article I would like to share with you my experience I could get from migrating an on-premises database to ExaCC using ZDM Physical Online Migration. This method will use Data Guard and we can then only use it to migrate Oracle Enterprise Edition databases. We call it Physical Online, because ZDM will create a Standby database either through a backup or with Direct Data Transfer (active duplication with rman or restore from service) and synchronise it with the primary. During all the preparation the database is still available for the application, and the maintenance windows will be shorter with less downtime. It will just be needed for the switchover operation. Of course ZDM can include non-cdb to pdb conversion which will make it a little bit longer. The Physical Online is the only ZDM method including fallback. We intended to use this method at customer side, as mandatory one for Large Oracle EE databases, and preferred one for Small Oracle EE databases.<\/p>\n\n\n<a class=\"wp-block-read-more\" href=\"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/\" target=\"_self\">Read more<span class=\"screen-reader-text\">: Physical Online Migration to ExaCC with Oracle Zero Downtime Migration (ZDM)<\/span><\/a>\n\n\n<h2 class=\"wp-block-heading\" id=\"h-introduction\">Introduction<\/h2>\n\n\n\n<p>The on-premise databases are single-tenant (non-cdb) database running for all version 19.10.<\/p>\n\n\n\n<p>The target databases are Oracle RAC databases running on ExaCC with Oracle version 19.21.<\/p>\n\n\n\n<p>The Oracle Net port used on the on-premise site is 13000 and the Oracle Net port used on the ExaCC is 1521.<\/p>\n\n\n\n<p>We will use ZDM to migrate the on-premise single-tenant database, to a PDB within a CDB. ZDM will then be in charge of migrating the database to the exacc using Data Guard, run datapatch, convert non-cdb database to pdb within a target cdb, upgrade Time Zone. The creation of the standby database will be done through a direct connection. Without any backup.<\/p>\n\n\n\n<p>Of course I have anonymised all outputs to remove customer infrastructure names. So let\u2019s take following convention.<\/p>\n\n\n\n<p>ExaCC Cluster 01 node 01 : ExaCC-cl01n1<br>ExaCC Cluster 01 node 02 : ExaCC-cl01n2<br>On premises Source Host : vmonpr<br>Target db_unique_name on the ExaCC : ONPR_RZ2<br>Database Name to migrate : ONPR<br>ZDM Host : zdmhost<br>ZDM user : zdmuser<br>Domain : domain.com<br>ExaCC PDB to migrate to : ONPRZ_APP_001T<\/p>\n\n\n\n<p>We will then migrate on-premise Single-Tenant database, named ONPR, to a PDB on the ExaCC. The PDB will be named ONPRZ_APP_001T.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-ports\">Ports<\/h2>\n\n\n\n<p>It is important to mention that following ports are needed:<\/p>\n\n\n\n<figure class=\"wp-block-table\">\n    <table><tbody>\n        <tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Source<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Destination<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Port<\/strong><\/td><\/tr>\n        <tr><td class=\"has-text-align-center\" data-align=\"center\">ZDM Host<\/td><td class=\"has-text-align-center\" data-align=\"center\">On-premise Host<\/td><td class=\"has-text-align-center\" data-align=\"center\">22<\/td><\/tr>\n        <tr><td class=\"has-text-align-center\" data-align=\"center\">ZDM Host<\/td><td class=\"has-text-align-center\" data-align=\"center\">ExaCC VM (both nodes)<\/td><td class=\"has-text-align-center\" data-align=\"center\">22<\/td><\/tr>\n        <tr><td class=\"has-text-align-center\" data-align=\"center\">On-premise Host<\/td><td class=\"has-text-align-center\" data-align=\"center\">ExaCC VM (scan listener and vip)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Oracle Net (1521)<\/td><\/tr>\n        <tr><td class=\"has-text-align-center\" data-align=\"center\">ExaCC<\/td><td class=\"has-text-align-center\" data-align=\"center\">On-premise Host<\/td><td class=\"has-text-align-center\" data-align=\"center\">Oracle Net<\/td><\/tr>\n    <\/tbody><\/table>\n<\/figure>\n\n\n\n<p>If Oracle Net ports are for example not opened from the Exacc to the on-premise host, the migration evaluation will immediately stopped at one of the first steps named ZDM_PRECHECKS_TGT, and following errors will be found in the log file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PRGZ-1132 : -eval failed for the phase ZDM_PRECHECKS_TGT with exception\nPRGZ-3176 : a database connection cannot be established from target node ExaCC-cl01n1 to source node vmonpr\nPRCC-1021 : One or more of the submitted commands did not execute successfully.\nPRCZ-2103 : Failed to execute command \"\/u02\/app\/oracle\/product\/19.0.0.0\/dbhome_2\/bin\/tnsping\" on node \"ExaCC-cl01n1\" as user \"root\". Detailed error:\nTNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 06-FEB-2024 10:06:37\n\nCopyright (c) 1997, 2023, Oracle.  All rights reserved.\n\nUsed parameter files:\n\nUsed HOSTNAME adapter to resolve the alias\nAttempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=tcp)(HOST=X.X.X.15)(PORT=13000)))\nTNS-12535: TNS:operation timed out\nPRCC-1025 : Command submitted on node ExaCC-cl01n2 timed out after 60 seconds..<\/code><\/pre>\n\n\n\n<p>If Oracle Net ports are for example not opened from the on-premise host to ExaCC, the migration evaluation will immediately stopped at one of the other steps named ZDM_PRECHECKS_SRC, and following errors will be found in the log file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PRGZ-1132 : -eval failed for the phase ZDM_PRECHECKS_SRC with exception\nPRGZ-3130 : failed to establish connection to target listener from nodes &#091;vmonpr]\nPRCC-1021 : One or more of the submitted commands did not execute successfully.\nPRCC-1025 : Command submitted on node vmonpr timed out after 15 seconds...<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-requirements-to-be-known-before-starting\">Requirements&#8230; To be known before starting<\/h2>\n\n\n\n<p>There are few requirements that are needed.<\/p>\n\n\n\n<h4>ZDM Host<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SSH connection allowed between Source and Target host<\/li>\n\n\n\n<li>SSH authentication key pairs without passphrase should be established and tested for the user between ZDM host and both source and target database<\/li>\n<\/ul>\n\n\n\n<h4>Source Database<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Both source and target need to be on the same release version.<\/li>\n\n\n\n<li>Transparent Data Encryption (TDE) wallet must be configured (even if source database is not encrypted)<\/li>\n\n\n\n<li>WALLET_TYPE should be set to either AUTOLOGIN or PASSWORD<\/li>\n\n\n\n<li>Wallet STATUS should be OPEN<\/li>\n\n\n\n<li>Wallet should be opened on all PDB in case the source is a container Database<\/li>\n\n\n\n<li>The master key must be set for all the PDB and the container database<\/li>\n\n\n\n<li>In case the source database is a RAC database, SNAPSHOT CONTROLFILE must be configured on a shared location on all cluster nodes<\/li>\n\n\n\n<li>SCAN listener\/listener connections allowed on both source and target DB<\/li>\n\n\n\n<li>DB_UNIQUE_NAME parameter must be different than target database<\/li>\n\n\n\n<li>SYSPASSWORD must be the same on the source and target database<\/li>\n<\/ul>\n\n\n\n<h4>Target Database<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Database must be created prior the migration<\/li>\n\n\n\n<li>Database release version should match source version.<\/li>\n\n\n\n<li>The target database patch level should also be the same or higher than the source database. In case the target database patch level is higher, ZDM can be configured to run datapatch on the target database. Target database patch level can not be lower than source database.<\/li>\n\n\n\n<li>For Oracle RAC databases, SSH connectivity between nodes for the oracle user should be setup<\/li>\n\n\n\n<li>Storage size should be sufficient (same as source database)<\/li>\n\n\n\n<li>DB_NAME parameter must be the same than the source database<\/li>\n\n\n\n<li>DB_UNIQUE_NAME parameter must be different than the one on the source database<\/li>\n\n\n\n<li>Automatic backups should be disabled (for ExaC@C section configure backups, option backup destination, none should be selected)<\/li>\n\n\n\n<li>TDE should be activated<\/li>\n\n\n\n<li>Wallet should be open and WALLET_TYPE should be set to either AUTOLOGIN or PASSWORD<\/li>\n\n\n\n<li>SYSPASSWORD must be the same on the source and target database<\/li>\n<\/ul>\n\n\n\n<h4>Others<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ensure that all ports have been opened.<\/li>\n\n\n\n<li>Oracle NET Services should be configured and tested on both source and target database for Data Guard synchronisation and deployment of the standby database with active duplication<\/li>\n\n\n\n<li>We will need to go through a temporary multitenant database on the ExaCC which will have same DB_NAME than the source and different DB_UNIQUE_NAME. This CDB will host the final PDB.<\/li>\n\n\n\n<li>The final PDB can then be relocated to the appropriate final CDB on the ExaCC laster on.<\/li>\n\n\n\n<li>ZDM will create its own temporary database with DB_NAME as source database and DB_UNIQUE_NAME as final PDB name to build the Data Guard and will remove it during cleanup phase<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-prepare-zdm-physical-online-response-file\">Prepare ZDM Physical Online Response file<\/h2>\n\n\n\n<p>We will prepare the ZDM response file that will be used, by copying the template provided by ZDM:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[zdmuser@zdmhost migration]$ cp -p \/u01\/app\/oracle\/product\/zdm\/rhp\/zdm\/template\/zdm_template.rsp .\/zdm_ONPR_physical_online.rsp\n<\/pre>\n<\/br>\n\n\n\n<p>The main parameters to take care of are :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table style=\", Courier, monospace;font-size:9pt\"><tbody>\n<tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Parameter<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Explanation<\/strong><\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\"><span lang=\"EN-GB\" style=\"text-align: start;font-size: 9pt;, serif\">TGT_DB_UNIQUE_NAME<\/span><span style=\"font-family: -webkit-standard;font-size: medium;text-align: start\"><\/span><\/td><td class=\"has-text-align-center\" data-align=\"center\">Target database DB_UNIQUE_NAME.<br>For Cloud type Exadata Cloud at Customer (EXACC) Gen2, Exadata Cloud Service (EXACS)<br>\u2022\tdb_name &#8211; The target database db_name should be the same as the source database db_name<br>\u2022\tdb_unique_name: The target database db_unique_name parameter value must be unique to ensure that Oracle Data Guard can identify the target as a different database from the source database<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">MIGRATION_METHOD<\/td><td class=\"has-text-align-center\" data-align=\"center\">Specifies if the migration will uses Oracle Data Guard (online) or backup and restore (offline). We are here using online migration so parameter will need to be setup with ONLINE_PHYSICAL value.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">DATA_TRANSFER_MEDIUM<\/td><td class=\"has-text-align-center\" data-align=\"center\">Specifies the media used to create the standby database either through a backup using NFS or ZDLRA for example or a direct connection where the standby will be instantiated directly from source using SQL*Net connectivity (duplicate from active or restore from service).<br>Choose DIRECT as we are doing Physical Direct Data Transfer<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">PLATFORM_TYPE<\/td><td class=\"has-text-align-center\" data-align=\"center\">Target Platform Type.<br>To be EXACC in our case.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">SRC_PDB_NAME<\/td><td class=\"has-text-align-center\" data-align=\"center\">Source database PDB Name.<br>Not needed here as all our on-premises database are Single Tenant.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">SRC_DB_LISTENER_PORT<\/td><td class=\"has-text-align-center\" data-align=\"center\">To be used when there is Standalone Database (no Grid Infrastructure) configured with non-default SCAN listener port other than 1521.<br>To be 13000 in our case.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">NONCDBTOPDB_CONVERSION<\/td><td class=\"has-text-align-center\" data-align=\"center\">Specifies to convert a non-CDB source to PDB.<br>To be TRUE as we wan to convert our on-premises database to PDB during ZDM migration.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">NONCDBTOPDB_SWITCHOVER<\/td><td class=\"has-text-align-center\" data-align=\"center\">For a physical migration using Data Guard switchover, indicates whether the switchover operations will be executed during a migration job with non-CDB to PDB conversion enabled.<br>Default is TRUE, to be kept as TRUE in our case.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">SKIP_FALLBACK<\/td><td class=\"has-text-align-center\" data-align=\"center\">If setup to FALSE, the redo logs will be shipped from the new primary (ExaCC) once the switchover is completed, to the standby (on-premise database) in case of fallback is needed.<br>To be FALSE as we want fallback.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">TGT_RETAIN_DB_UNIQUE_NAME<\/td><td class=\"has-text-align-center\" data-align=\"center\">Allow to add a new phase ZDM_RETAIN_DBUNIQUENAME_TGT (can also be ZDM_MODIFY_DBUNIQUENAME_TGT). Need to pause before this phase to keep the ZDM temporary database after the PDB conversion and in case fallback is needed. Resume the job once all is ok and the fallback will need to be removed.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">TGT_SKIP_DATAPATCH<\/td><td class=\"has-text-align-center\" data-align=\"center\">If set to FALSE ZDM will run datapatch on the target database as part of the post-migration tasks. Useful in case Target patch is in a higher version than source patch.<br>To be FALSE as we target version is higher than source and we want ZDM to run datapatch.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">SHUTDOWN_SRC<\/td><td class=\"has-text-align-center\" data-align=\"center\">Specifies to shutdown or not the source database after the migration completes.<br>To be FALSE.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">SRC_RMAN_CHANNELS<\/td><td class=\"has-text-align-center\" data-align=\"center\">Number of RMAN channel on the source<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">TGT_RMAN_CHANNELS<\/td><td class=\"has-text-align-center\" data-align=\"center\">Number of RMAN channel on the destination<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">ZDM_SKIP_DG_CONFIG_CLEANUP<\/td><td class=\"has-text-align-center\" data-align=\"center\">If FALSE ZDM will deconfigure DataGuard parameters configured for migration on the source and target database at the end of the migration.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">ZDM_RMAN_DIRECT_METHOD<\/td><td class=\"has-text-align-center\" data-align=\"center\">RMAN method to use for ONLINE_PHYISCAL direct data transfer, either using RMAN active duplicate or restore from service.<br>We kept default RESTORE FROM SERVICE.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">ZDM_USE_DG_BROKER<\/td><td class=\"has-text-align-center\" data-align=\"center\">If TRUE ZDM will use Data Guard Broker for managing Data Guard configuration.<br>To be TRUE.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">ZDM_NONCDBTOPDB_PDB_NAME<\/td><td class=\"has-text-align-center\" data-align=\"center\">When migrating non-CDB source to CDB target as a PDB, the PDB name to be used.<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">ZDM_TGT_UPGRADE_TIMEZONE<\/td><td class=\"has-text-align-center\" data-align=\"center\">Upgrade target database time zone. Will required downtime for the database<br>To be TRUE<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">ZDM_APPLY_LAG_MONITORING_INTERVAL<\/td><td class=\"has-text-align-center\" data-align=\"center\">Apply lag monitoring interval to verify both source and target for switchover ready.<br>Keep NONE.<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p>Note that there is no parameter for the listener port on the target (ExaCC) so assuming this is hard coded to use default 1521 port.<\/p>\n\n\n\n<p>Also note that as we configured SHUTDOWN_SRC as FALSE, additionnal steps will be required to ensure that application do not use the SOURCE (on-premise) database any more.<\/p>\n\n\n\n<p>Updated ZDM response file compared to ZDM template for the migration we are going to run:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[zdmuser@zdmhost migration]$ diff zdm_ONPR_physical_online.rsp \/u01\/app\/oracle\/product\/zdm\/rhp\/zdm\/template\/zdm_template.rsp\n24c24\n&lt; TGT_DB_UNIQUE_NAME=ONPR_RZ2\n---\n&gt; TGT_DB_UNIQUE_NAME=\n32c32\n&lt; MIGRATION_METHOD=ONLINE_PHYSICAL\n---\n&gt; MIGRATION_METHOD=\n63c63\n&lt; DATA_TRANSFER_MEDIUM=DIRECT\n---\n&gt; DATA_TRANSFER_MEDIUM=\n75c75\n&lt; PLATFORM_TYPE=EXACC\n---\n&gt; PLATFORM_TYPE=\n119c119\n&lt; SRC_DB_LISTENER_PORT=13000\n---\n&gt; SRC_DB_LISTENER_PORT=\n230c230\n&lt; NONCDBTOPDB_CONVERSION=TRUE\n---\n&gt; NONCDBTOPDB_CONVERSION=FALSE\n252c252\n&lt; SKIP_FALLBACK=FALSE\n---\n&gt; SKIP_FALLBACK=\n268c268\n&lt; TGT_RETAIN_DB_UNIQUE_NAME=TRUE\n---\n&gt; TGT_RETAIN_DB_UNIQUE_NAME=\n312c312\n&lt; SHUTDOWN_SRC=FALSE\n---\n&gt; SHUTDOWN_SRC=\n333c333\n&lt; SRC_RMAN_CHANNELS=3\n---\n&gt; SRC_RMAN_CHANNELS=\n340c340\n&lt; TGT_RMAN_CHANNELS=6\n---\n&gt; TGT_RMAN_CHANNELS=\n526c526\n&lt; ZDM_USE_DG_BROKER=TRUE\n---\n&gt; ZDM_USE_DG_BROKER=\n574c574\n&lt; ZDM_NONCDBTOPDB_PDB_NAME=ONPRZ_APP_001T\n---\n&gt; ZDM_NONCDBTOPDB_PDB_NAME=\n595c595\n&lt; ZDM_TGT_UPGRADE_TIMEZONE=TRUE\n---\n&gt; ZDM_TGT_UPGRADE_TIMEZONE=FALSE\n<\/pre>\n<\/br>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-zdm-build-version\">ZDM Build Version<\/h2>\n\n\n\n<p>We are using ZDM build version 21.4:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[zdmuser@zdmhost migration]$ \/u01\/app\/oracle\/product\/zdm\/bin\/zdmcli -build\nversion: 21.0.0.0.0\nfull version: 21.4.0.0.0\npatch version: 21.4.1.0.0\nlabel date: 221207.25\nZDM kit build date: Jul 31 2023 14:24:25 UTC\nCPAT build version: 23.7.0\n<\/pre>\n<\/br>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-passwordless-login\">Passwordless Login<\/h2>\n\n\n\n<p>Passwordless Login needs to be configured between ZDM Host, the Source Host and Target Host. See my previous blog : <a href=\"https:\/\/www.dbi-services.com\/blog\/oracle-zdm-migration-java-security-invalidkeyexception-invalid-key-format\/\">https:\/\/www.dbi-services.com\/blog\/oracle-zdm-migration-java-security-invalidkeyexception-invalid-key-format\/<\/a><\/p>\n\n\n\n<p>If Passwordless Login is not configured with one node, you will see such error in the log file during migration evaluation:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PRCZ-2006 : Unable to establish SSH connection to node \"ExaCC-cl01n2\" to execute command \"\/u02\/app\/oracle\/product\/19.0.0.0\/dbhome_2\/bin\/tnsping vmonpr:13000\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-creation-of-the-target-database\">Creation of the target database<\/h2>\n\n\n\n<p>As explained in the requirements, we must create a target CDB on the ExaCC with same DB_NAME as the source database to be migrated but other DB_UNIQUE_NAME. In our case it will be ONPR for the DB_NAME and ONPR_RZ2 for the DB_UNIQUE_NAME. This database must exist before the migration is started with ZDM. ZDM will create another temporary database taking the final PDB name and will use this target CDB as a template.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-tde-transparent-data-encryption-configuration\">TDE (Transparent Data Encryption) configuration<\/h2>\n\n\n\n<p>The source database doesn\u2019t need to be encrypted. The target database will be encrypted in any case. ZDM supports the migration of an encrypted and non-encrypted source database. The target database encryption will be taken in account during migration process. Even if the source database is not encrypted a TDE wallet still needs to be configured prior the migration as ZDM will use it to encrypt data to the target.<\/p>\n\n\n\n<p>We need to note that a downtime is needed to reboot the database when wallet_root parameter needs to be configured.<\/p>\n\n\n\n<p>Also until the migration is completed it is more than recommended that the wallet is part of the backup strategy.<\/p>\n\n\n\n<h4>Configure instance parameter<\/h4>\n\n\n\n<p>Check that the WALLET directory exits otherwise create it:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,4]\">\nSQL&gt; !ls \/u00\/app\/oracle\/admin\/ONPR\/wallet\nls: cannot access \/u00\/app\/oracle\/admin\/ONPR\/wallet: No such file or directory\n\nSQL&gt; !mkdir \/u00\/app\/oracle\/admin\/ONPR\/wallet\n<\/pre>\n<\/br>\n\n\n\n<p>Configure instance parameter for the database wallet and restart the database:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,5]\">\nSQL&gt; alter system set WALLET_ROOT='\/u00\/app\/oracle\/admin\/ONPR\/wallet' scope=spfile;\n\nSQL&gt; shutdown immediate\n\nSQL&gt; startup\n<\/pre>\n<\/br>\n\n\n\n<p>Check the wallet.  No WRL_PARAMETER should be displayed. WALLET_TYPE should be unknown and STATUS not_available.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; select WRL_PARAMETER, WRL_TYPE,WALLET_TYPE, status from V$ENCRYPTION_WALLET;\n\nWRL_PARAMETER                  WRL_TYPE             WALLET_TYPE          STATUS\n------------------------------ -------------------- -------------------- ---------------------------\n                               FILE                 UNKNOWN              NOT_AVAILABLE\n<\/pre>\n<\/br>\n\n\n\n<p>Configure TDE:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; alter system set tde_configuration='keystore_configuration=FILE' scope=both;\n\nSystem altered.\n<\/pre>\n<\/br>\n\n\n\n<p>Check the Wallet.  WRL_PARAMETER should be displayed with the wallet location. WALLET_TYPE should still be unknown and STATUS not_available.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; select WRL_PARAMETER, WRL_TYPE,WALLET_TYPE, status from V$ENCRYPTION_WALLET;\n\nWRL_PARAMETER                            WRL_TYPE             WALLET_TYPE          STATUS\n---------------------------------------- -------------------- -------------------- -----------------\n\/u00\/app\/oracle\/admin\/ONPR\/wallet\/tde\/   FILE                 UNKNOWN              NOT_AVAILABLE\n<\/pre>\n<\/br>\n\n\n\n<h4>Create keystore<\/h4>\n\n\n\n<p>Create the keystore using appropriate ExaCC password. We recommend to use the same one for source and target, albeit they can be different.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY \"*********************\"\n\nkeystore altered.\n<\/pre>\n<\/br>\n\n\n\n<p>We now can see that we have a wallet file in the TDE wallet directory:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; !ls -ltrh \/u00\/app\/oracle\/admin\/ONPR\/wallet\/tde\/\ntotal 4.0K\n-rw-------. 1 oracle dba 2.5K Feb  9 16:11 ewallet.p12\n<\/pre>\n<\/br>\n\n\n\n<p>And if we check the wallet status, we can see it is still UNKNOWN for the WALLET_TYPE, but now STATUS is set to CLOSED.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; select WRL_PARAMETER, WRL_TYPE,WALLET_TYPE, status from V$ENCRYPTION_WALLET;\n\nWRL_PARAMETER                            WRL_TYPE             WALLET_TYPE          STATUS\n---------------------------------------- -------------------- -------------------- ------------------------------\n\/u00\/app\/oracle\/admin\/ONPR\/wallet\/tde\/   FILE                 UNKNOWN              CLOSED\n<\/pre>\n<\/br>\n\n\n\n<h4>Open the keystore<\/h4>\n\n\n\n<p>The keystore can now be opened.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY \"***************\";\n\nkeystore altered.\n<\/pre>\n<\/br>\n\n\n\n<p>And the wallet type is now set to PASSWORD and status is OPEN_NO_MASTER_KEY.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; select WRL_PARAMETER, WRL_TYPE,WALLET_TYPE, status from V$ENCRYPTION_WALLET;\n\nWRL_PARAMETER                            WRL_TYPE             WALLET_TYPE          STATUS\n---------------------------------------- -------------------- -------------------- ------------------------------\n\/u00\/app\/oracle\/admin\/ONPR\/wallet\/tde\/   FILE                 PASSWORD             OPEN_NO_MASTER_KEY\n<\/pre>\n<\/br>\n\n\n\n<h4>Create and activate the master encryption key<\/h4>\n\n\n\n<p>Using same password we can now create and activate the master encryption key using backup option. This will set the database encryption key into the wallet.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY \"*************\" with backup;\n\nkeystore altered.\n<\/pre>\n<\/br>\n\n\n\n<p>If you are running version 19.10, as we are here, you will face following error:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ORA-28374: typed master key not found in wallet<\/code><\/pre>\n\n\n\n<p>This is related to following bug:<\/p>\n\n\n\n<p><a href=\"https:\/\/eur03.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fsupport.oracle.com%2Fepmos%2Ffaces%2FBugDisplay%3Fid%3D31500699%26parent%3DSrDetailText%26sourceId%3D3-35735537621&amp;data=05%7C02%7CMarc.Wagner%40baloise.com%7Cdd0be9cbcbca413a3d2508dc2d546ea1%7Ceb3c68b90935404685508bcaa4167e2e%7C1%7C0%7C638435087845106188%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&amp;sdata=IpeBHCzx1W9bfGyrlySz4g%2FMct7b8z7OsZ1cqeDvGGQ%3D&amp;reserved=0\" target=\"_blank\" rel=\"noreferrer noopener\">Bug 31500699<\/a>&nbsp;&#8211; ORA-28374: typed master key not found in wallet after tablespace TDE Enabled (&nbsp;<a href=\"https:\/\/eur03.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fsupport.oracle.com%2Fepmos%2Ffaces%2FDocumentDisplay%3Fparent%3DSrDetailText%26sourceId%3D3-35735537621%26id%3D31500699.8&amp;data=05%7C02%7CMarc.Wagner%40baloise.com%7Cdd0be9cbcbca413a3d2508dc2d546ea1%7Ceb3c68b90935404685508bcaa4167e2e%7C1%7C0%7C638435087845116226%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&amp;sdata=CgCxbuxxJKLhAKs4mutU4WRMK2k6w9FRWhIA5BA6cLw%3D&amp;reserved=0\" target=\"_blank\" rel=\"noreferrer noopener\">Doc ID 31500699.8<\/a>&nbsp;)<\/p>\n\n\n\n<p>This is not an issue, we can move forward as the master encryption key has been anyhow created and added in the wallet. The only problem would be that it will impossible to encrypt any data. We do not care as we are not encrypting the source on-premise database and we should not, as we are not licensed with Oracle Advanced Security.<\/p>\n\n\n\n<p>We now have a new wallet and a backup one:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; !ls -ltrh \/u00\/app\/oracle\/admin\/ONPR\/wallet\/tde\/\ntotal 8.0K\n-rw-------. 1 oracle dba 2.5K Feb  9 16:16 ewallet_2024020915161059.p12\n-rw-------. 1 oracle dba 4.0K Feb  9 16:16 ewallet.p12\n<\/pre>\n<\/br>\n\n\n\n<h4>Set autologin Wallet<\/h4>\n\n\n\n<p>We will change the wallet type from password to autologin using the same password, in order for the wallet to be opened automatically.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,5]\">\nSQL&gt; ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '\/u00\/app\/oracle\/admin\/ONPR\/wallet\/tde\/' IDENTIFIED BY \"************\";\n\nkeystore altered.\n\nSQL&gt; ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY \"******************\";\n\nkeystore altered.\n<\/pre>\n<\/br>\n\n\n\n<p>And we can check that all has been configured appropriately for the wallet:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; select WRL_PARAMETER, WRL_TYPE,WALLET_TYPE, status from V$ENCRYPTION_WALLET;\n\nWRL_PARAMETER                            WRL_TYPE             WALLET_TYPE          STATUS\n---------------------------------------- -------------------- -------------------- ------------------------------\n\/u00\/app\/oracle\/admin\/ONPR\/wallet\/tde\/   FILE                 AUTOLOGIN            OPEN\n<\/pre>\n<\/br>\n\n\n\n<p>And we can see that we have now an autologin cwallet.sso file:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; !ls -ltrh \/u00\/app\/oracle\/admin\/ONPR\/wallet\/tde\/\ntotal 14K\n-rw-------. 1 oracle dba 4.0K Feb  9 17:07 ewallet.p12\n-rw-------. 1 oracle dba 5.7K Feb  9 17:07 cwallet.sso\n-rw-------. 1 oracle dba 2.5K Feb  9 16:16 ewallet_2024020915161059.p12\n<\/pre>\n<\/br>\n\n\n\n<h4>Change tablespace_encryption instance parameter to decrypt_only<\/h4>\n\n\n\n<p>If we do not have any Oracle Advanced Security License on our on-premise environment, it is really mandatory to make sure not to encrypt any new tablespace created on the source (on-premise) once TDE is configured, otherwise Oracle Advanced Security License will be activated. It is also mandatory to decrypt the encrypted redo coming from the ExaCC and applied on the on-premise database. TABLESPACE_ENCRYPTION parameter is an alternative to the ENCRYPT_NEW_TABLESPACES parameter. After ZDM switchover steps will be completed, the primary database will be running on the ExaCC, and tablespaces will be encrypted on the ExaCC. The generated redo logs that need to be applied on the standby database running on the on-premise environment will be encrypted as well. If we are not licensed with Oracle Advanced Security on the on-premise environment, we also need to have this TABLESPACE_ENCRYPTION parameter set to decrypt_only to be able to decrypt the redo before applying them.<\/p>\n\n\n\n<p>ENCRYPT_NEW_TABLESPACES is also an important parameter:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If set to CLOUD_ONLY and new tablespace is created on the Oracle Cloud, the tablespace is transparently encrypted even if the ENCRYPTION \u2026 ENCRYPT clause for the SQL CREATE TABLESPACE statement is not specified.<\/li>\n\n\n\n<li>If set to CLOUD_ONLY and new tablespace is created in an on-premises database, the tablespace is only encrypted if especially mentioned in the ENCRYPTION \u2026 ENCRYPT clause for the SQL CREATE TABLESPACE statement.<\/li>\n\n\n\n<li>If set to ALWAYS, either we are in the Oracle Cloud or on on-premises, the new tablespace will be transparently encrypted, even if the ENCRYPTION \u2026 ENCRYPT clause for the SQL CREATE TABLESPACE statement is not specified. As we do not have any Oracle Advanced Security Licences on our on-premise, this value should never be set on the on-premise databases.<\/li>\n\n\n\n<li>If set to DDL, either we are in the Oracle Cloud or on on-premise, the new tablespace create statement will tell if the tablespace will be encrypted or not. If no ENCRYPTION clause is specified, then the new tablespace will not be encrypted. The new tablespace will only be encrypted if especially mentioned in the ENCRYPTION \u2026 ENCRYPT clause for the SQL CREATE TABLESPACE statement.<\/li>\n<\/ul>\n\n\n\n<p>See Oracle documentation:<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/refrn\/TABLESPACE_ENCRYPTION.html#GUID-42408BFB-1A3F-4BAA-B0E9-1AA0CD48FA5A\">Oracle documentation for TABLESPACE_ENCRYPTION<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/19\/refrn\/ENCRYPT_NEW_TABLESPACES.html#GUID-44EF2AAC-1313-4437-B0F3-A427F45016F2\">Oracle documentation for ENCRYPT_NEW_TABLESPACES<\/a><\/p>\n\n\n\n<p><strong>In our case, knowing we do not have any Oracle Advanced Security License for our on-premise, we will ensure to set the TABLESPACE_ENCRYPTION instance parameter to DECRYPT_ONLY value and ensure to set the ENCRYPT_NEW_TABLESPACES on either CLOUD_ONLY or DDL value.<\/strong><\/p>\n\n\n\n<p>Unfortunately the parameter tablespace_encryption came only with Oracle 19.16 version. So if you are running an older version on the source on-premise database, you do not have the possibility to use this parameter.<\/p>\n\n\n\n<p>This means that you will need to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Deactivate fallback possibility. You will only be able, in this situation, to use ZDM to migrate the database but without any fallback possibilities. Bad situation&#8230;<\/li>\n\n\n\n<li>You will need to ensure the parameter ENCRYPT_NEW_TABLESPACES is set to DDL and ensure no ENCRYPTION clause is specified in the statement for any new created tablespace<\/li>\n<\/ul>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,6,8,12,17,28,33]\">\nSQL&gt; show parameter encry\n\nNAME                                 TYPE        VALUE\n------------------------------------ ----------- ------------------------------\nencrypt_new_tablespaces              string      CLOUD_ONLY\ntablespace_encryption                string      MANUAL_ENABLE\n\nSQL&gt; alter system set tablespace_encryption='decrypt_only' scope=spfile;\n\nSystem altered.\n\nSQL&gt; shutdown immediate\nDatabase closed.\nDatabase dismounted.\nORACLE instance shut down.\n\nSQL&gt; startup\nORACLE instance started.\n\nTotal System Global Area 3.7581E+10 bytes\nFixed Size                 23061704 bytes\nVariable Size            5100273664 bytes\nDatabase Buffers         3.2346E+10 bytes\nRedo Buffers              111153152 bytes\nDatabase mounted.\nDatabase opened.\n\nSQL&gt; show parameter encry\n\nNAME                                 TYPE        VALUE\n------------------------------------ ----------- ------------------------------\nencrypt_new_tablespaces              string      DDL\ntablespace_encryption                string      DECRYPT_ONLY\n<\/pre>\n<\/br>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-update-sys-user-password-on-the-on-premise-database\">Update SYS user password on the on-premise database<\/h2>\n\n\n\n<p>Both source and target SYS users password should match.<\/p>\n\n\n\n<p>Update the source one with the same ExaCC one you are using:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; alter user sys identified by \"********\";\n<\/pre>\n<\/br>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-update-source-listener-ora-with-static-entry\">Update source listener.ora with static entry<\/h2>\n\n\n\n<p>If the on-premise source database is not running on oracle restart (grid infra), you will have to add a static entry for DGMGRL service on the appropriate listener. Unfortunately ZDM does not do it.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SID_LIST_&lt;listener_name&gt; =\n  (SID_LIST =\n    (SID_DESC = \n      (GLOBAL_DBNAME = &lt;dbname&gt; _DGMGRL.&lt;domain&gt;) \n      (ORACLE_HOME = &lt;ORACLE_HOME&gt;) \n      (SID_NAME = &lt;SID&gt;)\n    )\n  )\n<\/code><\/pre>\n\n\n\n<p>If you do not do so and you will resume the migration, you will have the ZDM switchover steps, ZDM_SWITCHOVER_SRC, failing with following error:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PRGZ-3605 : Oracle Data Guard Broker switchover to database \"ONPRZ_APP_001T\" on database \"ONPR\" failed.\nONPRZ_APP_001T\nDGMGRL for Linux: Release 19.0.0.0.0 - Production on Thu Feb 22 09:46:57 2024\nVersion 19.10.0.0.0\n\nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\n\nWelcome to DGMGRL, type \"help\" for information.\nConnected to \"ONPR\"\nConnected as SYSDG.\nDGMGRL&gt; Performing switchover NOW, please wait...\nOperation requires a connection to database \"onprz_app_001t\"\nConnecting ...\nConnected to \"ONPRZ_APP_001T\"\nConnected as SYSDBA.\nNew primary database \"onprz_app_001t\" is opening...\nOperation requires start up of instance \"ONPR\" on database \"onpr\"\nStarting instance \"ONPR\"...\nUnable to connect to database using (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=vmONPR.domain.com)(Port=13000))(CONNECT_DATA=(SERVICE_NAME=ONPR_DGMGRL.domain.com)(INSTANCE_NAME=ONPR)(SERVER=DEDICATED)))\nORA-12514: TNS:listener does not currently know of service requested in connect descriptor<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-archived-log-backup-on-the-source\">Archived log backup on the source<\/h2>\n\n\n\n<p>You will have to ensure that the source database archived log deletion policy is set appropriately and ensure not to remove any archived log that would not be applied on the standby. This all to ensure no source archived log is missing for Data Guard.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-convert-target-database-to-single-instance\">Convert target database to single instance<\/h2>\n\n\n\n<p>I have converted the target database on the ExaCC used during ZDM migration (the one taken as template by ZDM and where the final PDB will be hosted), from RAC to single instance. And this for 2 reasons:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The first one, as we will see later, ZDM will create the standby database on a new instance, using PDB final name as ORACLE_SID. And this temporary database is any how single instance<\/li>\n\n\n\n<li>If the target database is RAC, ZDM will create a second UNDO tablespace in the single instance source database. I do not want to make any change in the source database. Also as I&#8217;m running version 19.10 on the source, the UNDO will be encrypted and more over I will face bug 31500699 and ZDM migration will fail in error.<\/li>\n<\/ul>\n\n\n\n<h4>Update cluster_database instance parameter<\/h4>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,10,11,12,13,20]\">\noracle@ExaCC-cl01n1:~\/ [ONPR1 (CDB$ROOT)] sqh\n\nSQL&gt; show parameter cluster_database\n\nNAME                                 TYPE        VALUE\n------------------------------------ ----------- ------------------------------\ncluster_database                     boolean     TRUE\ncluster_database_instances           integer     2\n\nSQL&gt; set line 300\nSQL&gt; col name for a30\nSQL&gt; col value for a30\nSQL&gt; select inst_id, name, value from gv$parameter where lower(name)='cluster_database';\n\n   INST_ID NAME                           VALUE\n---------- ------------------------------ ------------------------------\n         2 cluster_database               TRUE\n         1 cluster_database               TRUE\n\nSQL&gt; alter system set cluster_database=FALSE scope=spfile sid='*';\n\nSystem altered.\n<\/pre>\n<\/br>\n\n\n\n<h4>Stop cluster database<\/h4>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,5,7]\">\noracle@ExaCC-cl01n1:~\/ [ONPR1 (CDB$ROOT)] srvctl status database -d ONPR_RZ2\nInstance ONPR1 is running on node ExaCC-cl01n1\nInstance ONPR2 is running on node ExaCC-cl01n2\n\noracle@ExaCC-cl01n1:~\/ [ONPR1 (CDB$ROOT)] srvctl stop database -d ONPR_RZ2\n\noracle@ExaCC-cl01n1:~\/ [ONPR1 (CDB$ROOT)] srvctl status database -d ONPR_RZ2\nInstance ONPR1 is not running on node ExaCC-cl01n1\nInstance ONPR2 is not running on node ExaCC-cl01n2\n<\/pre>\n<\/br>\n\n\n\n<h4>Change grid infrastructure configuration<\/h4>\n\n\n\n<p>We will remove second instance.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,32,36]\">\noracle@ExaCC-cl01n1:~\/ [ONPR1 (CDB$ROOT)] srvctl config database -d ONPR_RZ2\nDatabase unique name: ONPR_RZ2\nDatabase name: ONPR\nOracle home: \/u02\/app\/oracle\/product\/19.0.0.0\/dbhome_2\nOracle user: oracle\nSpfile: +DATAC1\/ONPR_RZ2\/PARAMETERFILE\/spfile.634.1160214211\nPassword file: +DATAC1\/ONPR_RZ2\/PASSWORD\/pwdonpr_rz2.562.1160213439\nDomain: domain.com\nStart options: open\nStop options: immediate\nDatabase role: PRIMARY\nManagement policy: AUTOMATIC\nServer pools:\nDisk Groups: DATAC1\nMount point paths: \/acfs01\nServices:\nType: RAC\nStart concurrency:\nStop concurrency:\nOSDBA group: dba\nOSOPER group: racoper\nDatabase instances: ONPR1,ONPR2\nConfigured nodes: ExaCC-cl01n1,ExaCC-cl01n2\nCSS critical: no\nCPU count: 0\nMemory target: 0\nMaximum memory: 0\nDefault network number for database services:\nDatabase is administrator managed\noracle@ExaCC-cl01n1:~\/ [ONPR1 (CDB$ROOT)]\n\noracle@ExaCC-cl01n1:~\/ [ONPR1 (CDB$ROOT)] srvctl remove instance -d ONPR_RZ2 -i ONPR2\nRemove instance from the database ONPR_RZ2? (y\/[n]) y\noracle@ExaCC-cl01n1:~\/ [ONPR1 (CDB$ROOT)]\n\noracle@ExaCC-cl01n1:~\/ [ONPR1 (CDB$ROOT)] srvctl config database -d ONPR_RZ2\nDatabase unique name: ONPR_RZ2\nDatabase name: ONPR\nOracle home: \/u02\/app\/oracle\/product\/19.0.0.0\/dbhome_2\nOracle user: oracle\nSpfile: +DATAC1\/ONPR_RZ2\/PARAMETERFILE\/spfile.634.1160214211\nPassword file: +DATAC1\/ONPR_RZ2\/PASSWORD\/pwdonpr_rz2.562.1160213439\nDomain: domain.com\nStart options: open\nStop options: immediate\nDatabase role: PRIMARY\nManagement policy: AUTOMATIC\nServer pools:\nDisk Groups: DATAC1\nMount point paths: \/acfs01\nServices:\nType: RAC\nStart concurrency:\nStop concurrency:\nOSDBA group: dba\nOSOPER group: racoper\nDatabase instances: ONPR1\nConfigured nodes: ExaCC-cl01n1\nCSS critical: no\nCPU count: 0\nMemory target: 0\nMaximum memory: 0\nDefault network number for database services:\nDatabase is administrator managed\n<\/pre>\n<\/br>\n\n\n\n<h4>Start target database ONPR on ExaCC<\/h4>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3]\">\noracle@ExaCC-cl01n1:~\/ [ONPR1 (CDB$ROOT)] srvctl start database -d ONPR_RZ2\n\noracle@ExaCC-cl01n1:~\/ [ONPR1 (CDB$ROOT)] srvctl status database -d ONPR_RZ2\nInstance ONPR1 is running on node ExaCC-cl01n1\n<\/pre>\n<\/br>\n\n\n\n<p>As we can see, only one instance is running. This can also be double checked with the instance parameter.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,4,5,6]\">\noracle@ExaCC-cl01n1:~\/ [ONPR1 (CDB$ROOT)] sqh\n\nSQL&gt; set lines 300 pages 500\nSQL&gt; col name for a30\nSQL&gt; col value for a30\nSQL&gt; select inst_id, name, value from gv$parameter where lower(name)='cluster_database';\n\n   INST_ID NAME                           VALUE\n---------- ------------------------------ ------------------------------\n         1 cluster_database               FALSE\n<\/pre>\n<\/br>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-evaluating-zdm-migration\">Evaluating ZDM Migration<\/h2>\n\n\n\n<p>We are now all ready to evaluate ZDM Migration. We will first run zdmcli with the -eval option to evaluate the migration and test if all is ok.<\/p>\n\n\n\n<p>We need to provide some arguments :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table style=\", Courier, monospace;font-size:9pt\"><tbody>\n    <tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Argument<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Value<\/strong><\/td><\/tr>\n    <tr><td class=\"has-text-align-center\" data-align=\"center\">-sourcesid<\/td><td class=\"has-text-align-center\" data-align=\"center\">Database Name of the source database in case the source database is a single instance deployed on a non Grid Infrastructure environment<\/td><\/tr>\n    <tr><td class=\"has-text-align-center\" data-align=\"center\">-rsp<\/td><td class=\"has-text-align-center\" data-align=\"center\">ZDM response file<\/td><\/tr>\n    <tr><td class=\"has-text-align-center\" data-align=\"center\">-sourcenode<\/td><td class=\"has-text-align-center\" data-align=\"center\">Source host<\/td><\/tr>\n    <tr><td class=\"has-text-align-center\" data-align=\"center\">-srcauth with 3 sub-arguments:<br>\n-srcarg1<br>\n-srcarg2<br>\n-srcarg3\n<\/td><td class=\"has-text-align-center\" data-align=\"center\">Name of the source authentication plug-in with 3 sub-arguments:<br>\n1st argument: user. Should be oracle<br>\n2nd argument: ZDM private RSA Key<br>\n3rd argument: sudo location\n<\/td><\/tr>\n    <tr><td class=\"has-text-align-center\" data-align=\"center\">-targetnode<\/td><td class=\"has-text-align-center\" data-align=\"center\">Target host<\/td><\/tr>\n    <tr><td class=\"has-text-align-center\" data-align=\"center\">-tgtauth with 3 sub-arguments:<br>\n        -tgtarg1<br>\n        -tgtarg2<br>\n        -tgtarg3\n        <\/td><td class=\"has-text-align-center\" data-align=\"center\">Name of the target authentication plug-in with 3 sub-arguments:<br>\n            1st argument: user. Should be opc<br>\n            2nd argument: ZDM private RSA Key<br>\n            3rd argument: sudo location\n            <\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">-tdekeystorepasswd<\/td><td class=\"has-text-align-center\" data-align=\"center\">Source database TDE keystore password<\/td><\/tr>\n<tr><td class=\"has-text-align-center\" data-align=\"center\">-tgttdekeystorepasswd<\/td><td class=\"has-text-align-center\" data-align=\"center\">Target container database TDE keystore password<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p>All steps done for evaluation have been completed successfully:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,9]\">\n[zdmuser@zdmhost migration]$ \/u01\/app\/oracle\/product\/zdm\/bin\/zdmcli migrate database -sourcesid ONPR -rsp \/home\/zdmuser\/migration\/zdm_ONPR_physical_online.rsp -sourcenode vmonpr -srcauth zdmauth -srcarg1 user:oracle -srcarg2 identity_file:\/home\/zdmuser\/.ssh\/id_rsa -srcarg3 sudo_location:\/usr\/bin\/sudo -targetnode ExaCC-cl01n1 -tgtauth zdmauth -tgtarg1 user:opc -tgtarg2 identity_file:\/home\/zdmuser\/.ssh\/id_rsa -tgtarg3 sudo_location:\/usr\/bin\/sudo -tdekeystorepasswd -tgttdekeystorepasswd -eval\nzdmhost.domain.com: Audit ID: 428\nEnter source database ONPR SYS password:\nEnter source database ONPR TDE keystore password:\nEnter target container database TDE keystore password:\nzdmhost: 2024-02-14T13:18:19.773Z : Processing response file ...\nOperation \"zdmcli migrate database\" scheduled with the job ID \"39\".\n\n[zdmuser@zdmhost migration]$ \/u01\/app\/oracle\/product\/zdm\/bin\/zdmcli query job -jobid 39\nzdmhost.domain.com: Audit ID: 434\nJob ID: 39\nUser: zdmuser\nClient: zdmhost\nJob Type: \"EVAL\"\nScheduled job command: \"zdmcli migrate database -sourcesid ONPR -rsp \/home\/zdmuser\/migration\/zdm_ONPR_physical_online.rsp -sourcenode vmonpr -srcauth zdmauth -srcarg1 user:oracle -srcarg2 identity_file:\/home\/zdmuser\/.ssh\/id_rsa -srcarg3 sudo_location:\/usr\/bin\/sudo -targetnode ExaCC-cl01n1 -tgtauth zdmauth -tgtarg1 user:opc -tgtarg2 identity_file:\/home\/zdmuser\/.ssh\/id_rsa -tgtarg3 sudo_location:\/usr\/bin\/sudo -tdekeystorepasswd -tgttdekeystorepasswd -eval\"\nScheduled job execution start time: 2024-02-14T14:18:19+01. Equivalent local time: 2024-02-14 14:18:19\nCurrent status: SUCCEEDED\nResult file path: \"\/u01\/app\/oracle\/chkbase\/scheduled\/job-39-2024-02-14-14:18:29.log\"\nMetrics file path: \"\/u01\/app\/oracle\/chkbase\/scheduled\/job-39-2024-02-14-14:18:29.json\"\nJob execution start time: 2024-02-14 14:18:29\nJob execution end time: 2024-02-14 14:21:18\nJob execution elapsed time: 2 minutes 48 seconds\nZDM_GET_SRC_INFO ........... PRECHECK_PASSED\nZDM_GET_TGT_INFO ........... PRECHECK_PASSED\nZDM_PRECHECKS_SRC .......... PRECHECK_PASSED\nZDM_PRECHECKS_TGT .......... PRECHECK_PASSED\nZDM_SETUP_SRC .............. PRECHECK_PASSED\nZDM_SETUP_TGT .............. PRECHECK_PASSED\nZDM_PREUSERACTIONS ......... PRECHECK_PASSED\nZDM_PREUSERACTIONS_TGT ..... PRECHECK_PASSED\nZDM_VALIDATE_SRC ........... PRECHECK_PASSED\nZDM_VALIDATE_TGT ........... PRECHECK_PASSED\nZDM_POSTUSERACTIONS ........ PRECHECK_PASSED\nZDM_POSTUSERACTIONS_TGT .... PRECHECK_PASSED\nZDM_CLEANUP_SRC ............ PRECHECK_PASSED\nZDM_CLEANUP_TGT ............ PRECHECK_PASSED\n<\/pre>\n<\/br>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-run-the-migration-with-zdm\">Run the Migration with ZDM<\/h2>\n\n\n\n<p>We will run the migration adding a <strong>pause<\/strong> after the ZDM steps <strong>ZDM_CONFIGURE_DG_SRC<\/strong>. So ZDM will prepare all the environment (setting the environment, creating standby and configuring Data Guard). All this steps can be done without any downtime.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,10,18,19,58]\">\n[zdmuser@zdmhost migration]$ \/u01\/app\/oracle\/product\/zdm\/bin\/zdmcli migrate database -sourcesid ONPR -rsp \/home\/zdmuser\/migration\/zdm_ONPR_physical_online.rsp -sourcenode vmonpr -srcauth zdmauth -srcarg1 user:oracle -srcarg2 identity_file:\/home\/zdmuser\/.ssh\/id_rsa -srcarg3 sudo_location:\/usr\/bin\/sudo -targetnode ExaCC-cl01n1 -tgtauth zdmauth -tgtarg1 user:opc -tgtarg2 identity_file:\/home\/zdmuser\/.ssh\/id_rsa -tgtarg3 sudo_location:\/usr\/bin\/sudo -tdekeystorepasswd -tgttdekeystorepasswd -pauseafter ZDM_CONFIGURE_DG_SRC\nzdmhost.domain.com: Audit ID: 543\nEnter source database ONPR SYS password:\nEnter source database ONPR TDE keystore password:\nEnter target container database TDE keystore password:\nzdmhost: 2024-02-22T09:27:17.864Z : Processing response file ...\nOperation \"zdmcli migrate database\" scheduled with the job ID \"44\".\n[zdmuser@zdmhost migration]$\n\n[zdmuser@zdmhost migration]$ \/u01\/app\/oracle\/product\/zdm\/bin\/zdmcli query job -jobid 44\nzdmhost.domain.com: Audit ID: 551\nJob ID: 44\nUser: zdmuser\nClient: zdmhost\nJob Type: \"MIGRATE\"\nScheduled job command: \"zdmcli migrate database -sourcesid ONPR -rsp \/home\/zdmuser\/migration\/zdm_ONPR_physical_online.rsp -sourcenode vmonpr -srcauth zdmauth -srcarg1 user:oracle -srcarg2 identity_file:\/home\/zdmuser\/.ssh\/id_rsa -srcarg3 sudo_location:\/usr\/bin\/sudo -targetnode ExaCC-cl01n1 -tgtauth zdmauth -tgtarg1 user:opc -tgtarg2 identity_file:\/home\/zdmuser\/.ssh\/id_rsa -tgtarg3 sudo_location:\/usr\/bin\/sudo -tdekeystorepasswd -tgttdekeystorepasswd -pauseafter ZDM_CONFIGURE_DG_SRC\"\nScheduled job execution start time: 2024-02-22T10:27:17+01. Equivalent local time: 2024-02-22 10:27:17\nCurrent status: PAUSED\nCurrent Phase: \"ZDM_CONFIGURE_DG_SRC\"\nResult file path: \"\/u01\/app\/oracle\/chkbase\/scheduled\/job-44-2024-02-22-10:27:27.log\"\nMetrics file path: \"\/u01\/app\/oracle\/chkbase\/scheduled\/job-44-2024-02-22-10:27:27.json\"\nJob execution start time: 2024-02-22 10:27:27\nJob execution end time: 2024-02-22 10:39:38\nJob execution elapsed time: 12 minutes 11 seconds\nZDM_GET_SRC_INFO ................ COMPLETED\nZDM_GET_TGT_INFO ................ COMPLETED\nZDM_PRECHECKS_SRC ............... COMPLETED\nZDM_PRECHECKS_TGT ............... COMPLETED\nZDM_SETUP_SRC ................... COMPLETED\nZDM_SETUP_TGT ................... COMPLETED\nZDM_PREUSERACTIONS .............. COMPLETED\nZDM_PREUSERACTIONS_TGT .......... COMPLETED\nZDM_VALIDATE_SRC ................ COMPLETED\nZDM_VALIDATE_TGT ................ COMPLETED\nZDM_DISCOVER_SRC ................ COMPLETED\nZDM_COPYFILES ................... COMPLETED\nZDM_PREPARE_TGT ................. COMPLETED\nZDM_SETUP_TDE_TGT ............... COMPLETED\nZDM_RESTORE_TGT ................. COMPLETED\nZDM_RECOVER_TGT ................. COMPLETED\nZDM_FINALIZE_TGT ................ COMPLETED\nZDM_CONFIGURE_DG_SRC ............ COMPLETED\nZDM_SWITCHOVER_SRC .............. PENDING\nZDM_SWITCHOVER_TGT .............. PENDING\nZDM_POST_DATABASE_OPEN_TGT ...... PENDING\nZDM_DATAPATCH_TGT ............... PENDING\nZDM_MODIFY_DBUNIQUENAME_TGT ..... PENDING\nZDM_NONCDBTOPDB_PRECHECK ........ PENDING\nZDM_NONCDBTOPDB_CONVERSION ...... PENDING\nZDM_POST_MIGRATE_TGT ............ PENDING\nTIMEZONE_UPGRADE_PREPARE_TGT .... PENDING\nTIMEZONE_UPGRADE_TGT ............ PENDING\nZDM_POSTUSERACTIONS ............. PENDING\nZDM_POSTUSERACTIONS_TGT ......... PENDING\nZDM_CLEANUP_SRC ................. PENDING\nZDM_CLEANUP_TGT ................. PENDING\n\nPause After Phase: \"ZDM_CONFIGURE_DG_SRC\"\n<\/pre>\n<\/br>\n\n\n\n<p>We can see that all steps have been completed successfully, and ZDM has paused the migration after the Data Guard has been configured.<\/p>\n\n\n\n<p>I can review full ZDM log:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[zdmuser@zdmhost ~]$ cat \/u01\/app\/oracle\/chkbase\/scheduled\/job-44-2024-02-22-10:27:27.log\nzdmhost: 2024-02-22T09:27:27.341Z : Processing response file ...\nzdmhost: 2024-02-22T09:27:27.345Z : Processing response file ...\nzdmhost: 2024-02-22T09:27:32.418Z : Starting zero downtime migrate operation ...\nzdmhost: 2024-02-22T09:27:34.498Z : Executing phase ZDM_GET_SRC_INFO\nzdmhost: 2024-02-22T09:27:34.498Z : Retrieving information from source node \"vmonpr\" ...\nzdmhost: 2024-02-22T09:27:34.498Z : retrieving information about database \"ONPR\" ...\nzdmhost: 2024-02-22T09:27:38.793Z : Execution of phase ZDM_GET_SRC_INFO completed\nzdmhost: 2024-02-22T09:27:38.819Z : Executing phase ZDM_GET_TGT_INFO\nzdmhost: 2024-02-22T09:27:38.819Z : Retrieving information from target node \"ExaCC-cl01n1\" ...\nzdmhost: 2024-02-22T09:27:46.173Z : Determined value for parameter TGT_DATADG is '+DATAC1'\nzdmhost: 2024-02-22T09:27:46.173Z : Determined value for parameter TGT_REDODG is '+DATAC1'\nzdmhost: 2024-02-22T09:27:46.173Z : Determined value for parameter TGT_RECODG is '+RECOC1'\nzdmhost: 2024-02-22T09:27:46.284Z : Execution of phase ZDM_GET_TGT_INFO completed\nzdmhost: 2024-02-22T09:27:46.821Z : Executing phase ZDM_PRECHECKS_SRC\nzdmhost: 2024-02-22T09:27:46.821Z : Execution of phase ZDM_PRECHECKS_SRC completed\nzdmhost: 2024-02-22T09:27:47.080Z : Executing phase ZDM_PRECHECKS_TGT\nzdmhost: 2024-02-22T09:27:47.080Z : Execution of phase ZDM_PRECHECKS_TGT completed\nzdmhost: 2024-02-22T09:27:47.118Z : Executing phase ZDM_SETUP_SRC\nzdmhost: 2024-02-22T09:27:47.118Z : Setting up ZDM on the source node vmonpr ...\nvmonpr: 2024-02-22T09:28:49.592Z : TNS aliases successfully setup on the source node vmonpr...\nzdmhost: 2024-02-22T09:28:49.694Z : Execution of phase ZDM_SETUP_SRC completed\n####################################################################\nzdmhost: 2024-02-22T09:28:49.730Z : Executing phase ZDM_SETUP_TGT\nzdmhost: 2024-02-22T09:28:49.730Z : Setting up ZDM on the target node ExaCC-cl01n1 ...\nExaCC-cl01n1: 2024-02-22T09:29:12.976Z : TNS aliases successfully setup on the target node ExaCC-cl01n1...\nzdmhost: 2024-02-22T09:29:12.979Z : Execution of phase ZDM_SETUP_TGT completed\n####################################################################\nzdmhost: 2024-02-22T09:29:13.023Z : Executing phase ZDM_VALIDATE_SRC\nzdmhost: 2024-02-22T09:29:13.024Z : Validating source environment on node vmonpr ...\nvmonpr: 2024-02-22T09:29:23.649Z : Validating SYS account password specified..\nvmonpr: 2024-02-22T09:29:34.470Z : Validating source environment...\nvmonpr: 2024-02-22T09:29:34.470Z : Ensuring source database is running in ARCHIVELOG mode...\nvmonpr: 2024-02-22T09:29:34.871Z : Validating Oracle TDE setup\nvmonpr: 2024-02-22T09:29:37.474Z : Validating Oracle Password file\nvmonpr: 2024-02-22T09:29:38.476Z : Validating database ONPR role is PRIMARY...\nvmonpr: 2024-02-22T09:29:38.478Z : Source environment validated successfully\nzdmhost: 2024-02-22T09:29:38.487Z : Execution of phase ZDM_VALIDATE_SRC completed\n####################################################################\nzdmhost: 2024-02-22T09:29:38.521Z : Executing phase ZDM_VALIDATE_TGT\nzdmhost: 2024-02-22T09:29:38.521Z : Validating target environment on node ExaCC-cl01n1 ...\nzdmhost: 2024-02-22T09:29:38.573Z : Source database timezone file version 32 is less than target database timezone file version 42. Timezone upgrade operation will be performed on target database after completion of database migration.\nExaCC-cl01n1: 2024-02-22T09:29:50.315Z : Validating specified Oracle ASM storage locations...\nExaCC-cl01n1: 2024-02-22T09:29:54.219Z : validating target database size allocation...\nExaCC-cl01n1: 2024-02-22T09:29:56.922Z : Verifying SQL*Net connectivity to source database ...\nExaCC-cl01n1: 2024-02-22T09:29:57.223Z : verifying passwordless connectivity between target nodes\nExaCC-cl01n1: 2024-02-22T09:29:58.425Z : Target environment validated successfully\nzdmhost: 2024-02-22T09:29:58.433Z : Execution of phase ZDM_VALIDATE_TGT completed\n####################################################################\nzdmhost: 2024-02-22T09:29:58.455Z : Executing phase ZDM_DISCOVER_SRC\nzdmhost: 2024-02-22T09:29:58.455Z : Setting up the source node vmonpr for creating standby on the target node ExaCC-cl01n1 ...\nvmonpr: 2024-02-22T09:30:09.186Z : Enabling force logging on database ONPR...\nvmonpr: 2024-02-22T09:30:09.287Z : Creating standby logs on database ONPR...\nvmonpr: 2024-02-22T09:30:13.591Z : Source environment set up successfully\nzdmhost: 2024-02-22T09:30:13.700Z : Execution of phase ZDM_DISCOVER_SRC completed\n####################################################################\nzdmhost: 2024-02-22T09:30:13.729Z : Executing phase ZDM_COPYFILES\nzdmhost: 2024-02-22T09:30:13.729Z : Copying files from source node vmonpr to target node ExaCC-cl01n1 ...\nvmonpr: 2024-02-22T09:30:24.849Z : Source database \"ONPR\" credentials exported successfully on node \"vmonpr\"\nzdmhost: 2024-02-22T09:30:29.112Z : Execution of phase ZDM_COPYFILES completed\n####################################################################\nzdmhost: 2024-02-22T09:30:29.148Z : Executing phase ZDM_PREPARE_TGT\nzdmhost: 2024-02-22T09:30:29.148Z : Setting up standby on the target node ExaCC-cl01n1 ...\nExaCC-cl01n1: 2024-02-22T09:31:03.106Z : Target environment set up successfully\nzdmhost: 2024-02-22T09:31:03.115Z : Execution of phase ZDM_PREPARE_TGT completed\n####################################################################\nzdmhost: 2024-02-22T09:31:03.137Z : Executing phase ZDM_SETUP_TDE_TGT\nzdmhost: 2024-02-22T09:31:03.137Z : Setting up Oracle Transparent Data Encryption (TDE) keystore on the target node ExaCC-cl01n1 ...\nExaCC-cl01n1: 2024-02-22T09:31:13.880Z : target environment Oracle Transparent Data Encryption (TDE) set up successfully\nzdmhost: 2024-02-22T09:31:13.889Z : Execution of phase ZDM_SETUP_TDE_TGT completed\n####################################################################\nzdmhost: 2024-02-22T09:31:13.913Z : Executing phase ZDM_RESTORE_TGT\nzdmhost: 2024-02-22T09:31:13.913Z : Restoring database on the target node ExaCC-cl01n1 ...\nExaCC-cl01n1: 2024-02-22T09:31:36.483Z : database ONPRZ_APP_001T dropped successfully\nExaCC-cl01n1: 2024-02-22T09:31:54.048Z : Target database \"ONPRZ_APP_001T\" credentials staged successfully on node \"ExaCC-cl01n1\"\nExaCC-cl01n1: 2024-02-22T09:32:06.392Z : Restoring SPFILE ...\nExaCC-cl01n1: 2024-02-22T09:32:45.923Z : SPFILE restored to \/u02\/app\/oracle\/product\/19.0.0.0\/dbhome_2\/dbs\/spfileONPRZ_APP_001T1.ora successfully\nExaCC-cl01n1: 2024-02-22T09:32:59.196Z : Restoring control files ...\nExaCC-cl01n1: 2024-02-22T09:33:20.313Z : Control files restored successfully\nExaCC-cl01n1: 2024-02-22T09:33:31.775Z : Restoring and encrypting data files ...\nExaCC-cl01n1: 2024-02-22T09:34:38.628Z : Data files restored and encrypted successfully\nExaCC-cl01n1: 2024-02-22T09:34:38.629Z : Cleaning up any orphaned data ...\nExaCC-cl01n1: 2024-02-22T09:34:38.730Z : Orphaned files clean up successful\nExaCC-cl01n1: 2024-02-22T09:34:39.034Z : Data files restored successfully\nExaCC-cl01n1: 2024-02-22T09:34:51.398Z : Renaming TEMP files and online redo log files ...\nExaCC-cl01n1: 2024-02-22T09:35:03.909Z : TEMP files and online redo log files renamed successfully\nExaCC-cl01n1: 2024-02-22T09:35:16.374Z : Recovering data files ...\nExaCC-cl01n1: 2024-02-22T09:35:20.080Z : Data files recovered successfully\nzdmhost: 2024-02-22T09:35:20.094Z : Execution of phase ZDM_RESTORE_TGT completed\n####################################################################\nzdmhost: 2024-02-22T09:35:20.115Z : Executing phase ZDM_RECOVER_TGT\nzdmhost: 2024-02-22T09:35:20.115Z : Recovering database on the target node ExaCC-cl01n1 ...\nExaCC-cl01n1: 2024-02-22T09:35:37.674Z : Target database \"ONPRZ_APP_001T\" credentials staged successfully on node \"ExaCC-cl01n1\"\nExaCC-cl01n1: 2024-02-22T09:35:50.018Z : Restoring control files ...\nExaCC-cl01n1: 2024-02-22T09:36:31.849Z : Running RMAN crosscheck on database \"ONPRZ_APP_001T\" ...\nExaCC-cl01n1: 2024-02-22T09:36:36.354Z : RMAN crosscheck on database \"ONPRZ_APP_001T\" ran successfully\nExaCC-cl01n1: 2024-02-22T09:36:36.354Z : Running RMAN catalog ...\nExaCC-cl01n1: 2024-02-22T09:36:38.357Z : RMAN catalog ran successfully\nExaCC-cl01n1: 2024-02-22T09:36:38.357Z : Control files restored successfully\nExaCC-cl01n1: 2024-02-22T09:36:50.818Z : Starting incremental restore of data files ...\nExaCC-cl01n1: 2024-02-22T09:36:55.122Z : Incremental restore of data files executed successfully\nExaCC-cl01n1: 2024-02-22T09:36:55.123Z : Cleaning up any orphaned data ...\nExaCC-cl01n1: 2024-02-22T09:36:55.224Z : Orphaned files clean up successful\nExaCC-cl01n1: 2024-02-22T09:36:55.327Z : Data files restored successfully\nExaCC-cl01n1: 2024-02-22T09:37:07.696Z : Renaming TEMP files and online redo log files ...\nExaCC-cl01n1: 2024-02-22T09:37:20.207Z : TEMP files and online redo log files renamed successfully\nExaCC-cl01n1: 2024-02-22T09:37:32.669Z : Recovering data files ...\nExaCC-cl01n1: 2024-02-22T09:37:36.575Z : Data files recovered successfully\nzdmhost: 2024-02-22T09:37:36.590Z : Execution of phase ZDM_RECOVER_TGT completed\n####################################################################\nzdmhost: 2024-02-22T09:37:36.614Z : Executing phase ZDM_FINALIZE_TGT\nzdmhost: 2024-02-22T09:37:36.614Z : Finalizing creation of standby database on the target node ExaCC-cl01n1 ...\nExaCC-cl01n1: 2024-02-22T09:37:47.554Z : Updating database cluster resource dependency ...\nExaCC-cl01n1: 2024-02-22T09:38:30.389Z : Creating standby redo logs on target database ONPRZ_APP_001T\nExaCC-cl01n1: 2024-02-22T09:38:30.490Z : Enabling Oracle Data Guard Broker on \"ONPRZ_APP_001T\" ...\nExaCC-cl01n1: 2024-02-22T09:38:33.493Z : Oracle Data Guard Broker enabled successfully on \"ONPRZ_APP_001T\"\nExaCC-cl01n1: 2024-02-22T09:38:33.694Z : Target database updated successfully\nzdmhost: 2024-02-22T09:38:33.704Z : Execution of phase ZDM_FINALIZE_TGT completed\n####################################################################\nzdmhost: 2024-02-22T09:38:33.725Z : Executing phase ZDM_CONFIGURE_DG_SRC\nzdmhost: 2024-02-22T09:38:33.726Z : Finalize steps done on the source node vmonpr for creating standby on the target node ExaCC-cl01n1 ...\nvmonpr: 2024-02-22T09:38:44.648Z : Configuring Oracle Data Guard Broker on \"ONPR\" ...\nvmonpr: 2024-02-22T09:39:38.289Z : Oracle Data Guard Broker configured successfully on \"ONPR\"\nvmonpr: 2024-02-22T09:39:38.390Z : Source database updated successfully\nzdmhost: 2024-02-22T09:39:38.398Z : Execution of phase ZDM_CONFIGURE_DG_SRC completed\n####################################################################\nzdmhost: 2024-02-22T09:39:38.403Z : Job execution paused after phase \"ZDM_CONFIGURE_DG_SRC\".\n<\/pre>\n<\/br>\n\n\n\n<p>We can see ZDM will valide source and target, check SYS password, check and setup TDE, validate Oracle Net connections, validate ASM storage, create standby redo logs, creating standby database using direct transfer data method (the application tablespace will be encrypted), and configure Data Guard.<\/p>\n\n\n\n<p>We can check additional and detailed logs on the source database:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3]\">\noracle@vmonpr:\/home\/oracle\/ [ONPR] cd  \/u00\/app\/oracle\/zdm\/zdm_ONPR_44\/zdm\/log\/\n\noracle@vmonpr:\/u00\/app\/oracle\/zdm\/zdm_ONPR_44\/zdm\/log\/ [ONPR] ls -ltrh\ntotal 228K\n-rw-rw-rw-. 1 oracle dba  14K Feb 22 10:28 zdm_setup_tns_alias_src_12728.log\n-rwxrwxrwx. 1 oracle dba    0 Feb 22 10:29 default.log\n-rw-rw-rw-. 1 oracle dba  17K Feb 22 10:29 zdm_validate_sys_pass_src_13181.log\n-rw-rw-rw-. 1 root   root 57K Feb 22 10:29 zdm_validate_src_13240.log\n-rw-rw-rw-. 1 root   root 62K Feb 22 10:30 zdm_discover_src_13722.log\n-rw-rw-rw-. 1 root   root 22K Feb 22 10:30 zdm_export_db_cred_src_15024.log\n-rw-rw-rw-. 1 oracle dba  43K Feb 22 10:39 zdm_configure_dg_src_18159.log\n<\/pre>\n<\/br>\n\n\n\n<p>And on the target (ExaCC):<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3]\">\n[opc@ExaCC-cl01n1 ~]$ cd \/u02\/app\/oracle\/zdm\/zdm_ONPR_RZ2_44\/zdm\/log\/\n\n[opc@ExaCC-cl01n1 log]$ ls -ltrh\ntotal 516K\n-rw-rw-rw- 1 oracle root  33K Feb 22 10:29 zdm_setup_tns_alias_tgt_224683.log\n-rwxrwxrwx 1 oracle root    0 Feb 22 10:29 default.log\n-rw-rw-rw- 1 oracle root  29K Feb 22 10:29 zdm_validate_tgt_231351.log\n-rw-rw-rw- 1 root   root  59K Feb 22 10:31 zdm_prepare_tgt_239052.log\n-rw-rw-rw- 1 root   root 7.9K Feb 22 10:31 zdm_setup_tde_tgt_242739.log\n-rw-rw-rw- 1 root   root  16K Feb 22 10:31 zdm_oss_restore_tgt_dropdatabase_244302.log\n-rw-rw-rw- 1 root   root  21K Feb 22 10:31 zdm_import_db_cred_tgt_250414.log\n-rw-rw-rw- 1 root   root  24K Feb 22 10:32 zdm_oss_restore_tgt_restoreinit_252706.log\n-rw-rw-rw- 1 root   root  19K Feb 22 10:33 zdm_oss_restore_tgt_restorecntrl_260310.log\n-rw-rw-rw- 1 root   root  37K Feb 22 10:34 zdm_oss_restore_tgt_restoredb_263322.log\n-rw-rw-rw- 1 root   root  36K Feb 22 10:35 zdm_oss_restore_tgt_renametemp_279405.log\n-rw-rw-rw- 1 root   root  22K Feb 22 10:35 zdm_oss_restore_tgt_recoverdb_281523.log\n-rw-rw-rw- 1 root   root  22K Feb 22 10:35 zdm_import_db_cred_tgt_283595.log\n-rw-rw-rw- 1 root   root  28K Feb 22 10:36 zdm_oss_recover_tgt_restorecntrl_288735.log\n-rw-rw-rw- 1 root   root  37K Feb 22 10:36 zdm_oss_recover_tgt_restoredb_297044.log\n-rw-rw-rw- 1 root   root  36K Feb 22 10:37 zdm_oss_recover_tgt_renametemp_298270.log\n-rw-rw-rw- 1 root   root  22K Feb 22 10:37 zdm_oss_recover_tgt_recoverdb_300955.log\n-rw-rw-rw- 1 root   root  41K Feb 22 10:38 zdm_finalize_tgt_305026.log\n<\/pre>\n<\/br>\n\n\n\n<p>Finally I can check Data Guard configuration and see that my standby is synchronized (no gap).<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,9,13,21,22]\">\noracle@vmonpr:\/home\/oracle\/ [ONPR] dgmgrl\nDGMGRL for Linux: Release 19.0.0.0.0 - Production on Thu Feb 22 10:42:39 2024\nVersion 19.10.0.0.0\n\nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\n\nWelcome to DGMGRL, type \"help\" for information.\n\nDGMGRL&gt; connect \/\nConnected to \"ONPR\"\nConnected as SYSDG.\n\nDGMGRL&gt; show configuration lag\n\nConfiguration - ZDM_onpr\n\n  Protection Mode: MaxPerformance\n  Members:\n  onpr           - Primary database\n    onprz_app_001t - Physical standby database\n                     Transport Lag:      0 seconds (computed 1 second ago)\n                     Apply Lag:          0 seconds (computed 1 second ago)\n\nFast-Start Failover:  Disabled\n\nConfiguration Status:\nSUCCESS   (status updated 36 seconds ago)\n<\/pre>\n<\/br>\n\n\n\n<p>I can see that ZDM created a new instance on the ExaCC, called as the final PDB name:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\noracle@ExaCC-cl01n1:\/u02\/app\/oracle\/zdm\/zdm_ONPR_RZ2_38\/zdm\/log\/ [ONPR1 (CDB$ROOT)] ps -ef | grep [p]mon | grep -i ONPRZ_APP_001T1\noracle   236556      1  0 12:22 ?        00:00:00 ora_pmon_ONPRZ_APP_001T1\n<\/pre>\n<\/br>\n\n\n\n<p>If we connect to it, we can see that the instance name is as the final PDB name and the db name is matching the source database one to migrate. The db_unique_name will be the pdb name.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,15,16,22]\">\noracle@ExaCC-cl01n1:\/u02\/app\/oracle\/product\/19.0.0.0\/dbhome_2\/ [ONPR1 (CDB$ROOT)] export ORACLE_SID=ONPRZ_APP_001T1\n\noracle@ExaCC-cl01n1:\/u02\/app\/oracle\/product\/19.0.0.0\/dbhome_2\/ [ONPRZ_APP_001T1 (CDB$ROOT)] sqh\n\nSQL*Plus: Release 19.0.0.0.0 - Production on Wed Feb 14 13:22:42 2024\nVersion 19.21.0.0.0\n\nCopyright (c) 1982, 2022, Oracle.  All rights reserved.\n\n\nConnected to:\nOracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production\nVersion 19.21.0.0.0\n\nSQL&gt; set lines 300 pages 500\nSQL&gt; select instance_name from v$instance;\n\nINSTANCE_NAME\n------------------------------------------------\nONPRZ_APP_001T1\n\nSQL&gt; select name, db_unique_name, open_mode, database_role from v$database;\n\nNAME                        DB_UNIQUE_NAME                                                                             OPEN_MODE                                                    DATABASE_ROLE\n--------------------------- ------------------------------------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------\nONPR                        ONPRZ_APP_001T                                                                             MOUNTED                                                      PHYSICAL STANDBY\n<\/pre>\n<\/br>\n\n\n\n<p>And I could see that this temporary database was single instance database:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\nSQL&gt; show parameter cluster_database;\n\nNAME                                 TYPE                              VALUE\n------------------------------------ --------------------------------- ------------------------------\ncluster_database                     boolean                           FALSE\ncluster_database_instances           integer                           1\n<\/pre>\n<\/br>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-migration-maintenance-windows\">Migration &#8211; Maintenance Windows<\/h2>\n\n\n\n<p>Now we will have the maintenance windows and switch the database to the ExaCC. After the switchover, ZDM will run datapatch (to patch the database to the new version 19.21), convert the noncdb to pdb, upgrade the timezone and any other post migration tasks.<\/p>\n\n\n\n<p>For this we just need to resume the job. We could even resume it adding a new pause if we want to do each steps separately.<\/p>\n\n\n\n<p>To resume the job:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">\n[zdmuser@zdmhost migration]$ \/u01\/app\/oracle\/product\/zdm\/bin\/zdmcli resume job -jobid 44\nzdmhost.domain.com: Audit ID: 552\n<\/pre>\n<\/br>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-wrap-up\">Wrap up<\/h2>\n\n\n\n<p>ZDM is really a nice tool, and ZDM will mainly configure all for you. Albeit I was facing sometimes some problem that I had to troubleshoot, I could always find a solution. Oracle ZDM team is also very flexible and available to discuss. Knowing we have all the on-premises databases running 19.10, and as customer does not want to go without fallback, I could unfortunately not test the switchover and next conversion steps. I will blog later on it, once customer databases will be patched to last 19c version, and that I will be able to move forward with the test.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A while ago I had been testing and blogging about ZDM, see my previous articles. And I finally had the chance to implement it at one of our customer to migrate on-premise databases to Exadata Cloud @Customer. After having been implementing Logical Offline migration with ZDM, see my previous article, https:\/\/www.dbi-services.com\/blog\/logical-offline-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/, I had the opportunity [&hellip;]<\/p>\n","protected":false},"author":48,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[59],"tags":[],"type_dbi":[],"class_list":["post-31203","post","type-post","status-publish","format-standard","hentry","category-oracle"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Physical Online Migration to ExaCC with Oracle Zero Downtime Migration (ZDM) - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Physical Online Migration to ExaCC with Oracle Zero Downtime Migration (ZDM)\" \/>\n<meta property=\"og:description\" content=\"A while ago I had been testing and blogging about ZDM, see my previous articles. And I finally had the chance to implement it at one of our customer to migrate on-premise databases to Exadata Cloud @Customer. After having been implementing Logical Offline migration with ZDM, see my previous article, https:\/\/www.dbi-services.com\/blog\/logical-offline-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/, I had the opportunity [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-25T20:06:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-06T19:40:15+00:00\" \/>\n<meta name=\"author\" content=\"Marc Wagner\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marc Wagner\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\\\/\"},\"author\":{\"name\":\"Marc Wagner\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/225d9884b8467ead9a872823acb14628\"},\"headline\":\"Physical Online Migration to ExaCC with Oracle Zero Downtime Migration (ZDM)\",\"datePublished\":\"2024-02-25T20:06:27+00:00\",\"dateModified\":\"2024-04-06T19:40:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\\\/\"},\"wordCount\":3726,\"commentCount\":2,\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\\\/\",\"name\":\"Physical Online Migration to ExaCC with Oracle Zero Downtime Migration (ZDM) - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2024-02-25T20:06:27+00:00\",\"dateModified\":\"2024-04-06T19:40:15+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/225d9884b8467ead9a872823acb14628\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Physical Online Migration to ExaCC with Oracle Zero Downtime Migration (ZDM)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/225d9884b8467ead9a872823acb14628\",\"name\":\"Marc Wagner\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a873cc6e7fbdbbcbdbcaf5dbded14ad9a77b2ec2c3e03b4d724ed33d35d5f328?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a873cc6e7fbdbbcbdbcaf5dbded14ad9a77b2ec2c3e03b4d724ed33d35d5f328?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a873cc6e7fbdbbcbdbcaf5dbded14ad9a77b2ec2c3e03b4d724ed33d35d5f328?s=96&d=mm&r=g\",\"caption\":\"Marc Wagner\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/marc-wagner\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Physical Online Migration to ExaCC with Oracle Zero Downtime Migration (ZDM) - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/","og_locale":"en_US","og_type":"article","og_title":"Physical Online Migration to ExaCC with Oracle Zero Downtime Migration (ZDM)","og_description":"A while ago I had been testing and blogging about ZDM, see my previous articles. And I finally had the chance to implement it at one of our customer to migrate on-premise databases to Exadata Cloud @Customer. After having been implementing Logical Offline migration with ZDM, see my previous article, https:\/\/www.dbi-services.com\/blog\/logical-offline-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/, I had the opportunity [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/","og_site_name":"dbi Blog","article_published_time":"2024-02-25T20:06:27+00:00","article_modified_time":"2024-04-06T19:40:15+00:00","author":"Marc Wagner","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Marc Wagner","Est. reading time":"16 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/"},"author":{"name":"Marc Wagner","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/225d9884b8467ead9a872823acb14628"},"headline":"Physical Online Migration to ExaCC with Oracle Zero Downtime Migration (ZDM)","datePublished":"2024-02-25T20:06:27+00:00","dateModified":"2024-04-06T19:40:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/"},"wordCount":3726,"commentCount":2,"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/","url":"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/","name":"Physical Online Migration to ExaCC with Oracle Zero Downtime Migration (ZDM) - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2024-02-25T20:06:27+00:00","dateModified":"2024-04-06T19:40:15+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/225d9884b8467ead9a872823acb14628"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/physical-online-migration-to-exacc-with-oracle-zero-downtime-migration-zdm\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Physical Online Migration to ExaCC with Oracle Zero Downtime Migration (ZDM)"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/225d9884b8467ead9a872823acb14628","name":"Marc Wagner","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a873cc6e7fbdbbcbdbcaf5dbded14ad9a77b2ec2c3e03b4d724ed33d35d5f328?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a873cc6e7fbdbbcbdbcaf5dbded14ad9a77b2ec2c3e03b4d724ed33d35d5f328?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a873cc6e7fbdbbcbdbcaf5dbded14ad9a77b2ec2c3e03b4d724ed33d35d5f328?s=96&d=mm&r=g","caption":"Marc Wagner"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/marc-wagner\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/31203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/48"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=31203"}],"version-history":[{"count":64,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/31203\/revisions"}],"predecessor-version":[{"id":32346,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/31203\/revisions\/32346"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=31203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=31203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=31203"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=31203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}