{"id":23828,"date":"2023-03-23T01:25:51","date_gmt":"2023-03-23T00:25:51","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=23828"},"modified":"2023-04-03T10:04:40","modified_gmt":"2023-04-03T08:04:40","slug":"oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/","title":{"rendered":"Oracle Zero Downtime Migration : Offline logical database migration from on-premises to Autonomous DB\u00a0"},"content":{"rendered":"\n<p>I have recently written a blog introducing the Oracle ZDM (Zero Downtime Migration) tool :<a href=\"https:\/\/www.dbi-services.com\/blog\/zero-downtime-migration-zdm-to-oracle-cloud-infrastructure-oci\/\"> <\/a><a href=\"https:\/\/www.dbi-services.com\/blog\/zero-downtime-migration-zdm-to-oracle-cloud-infrastructure-oci\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.dbi-services.com\/blog\/zero-downtime-migration-zdm-to-oracle-cloud-infrastructure-oci\/<\/a><\/p>\n\n\n\n<p>I have also done some tests performing an offline logical database migration from a database running on an OCI VM (this would simulate an on-premises database) to an ADB (Autonomous DataBase) using a backup location in OCI. I would like through this blog to share my tests and demo. This demo will show all implementation details.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Create Source Database on an OCI VM<\/h2>\n\n\n\n<p>First of all I have created a database on an OCI VM, that would be my source database to migrate. This would simulate an on-premises database. I have deployed very easily the whole VM with a 19c multi-tenant database, named CDB01, using dbi services YAK software. YAK is a software that helps to easily deploy database instances and servers whatever the platform used is. YAK can be downloaded, as well as further explanation, on following web link : <a href=\"https:\/\/www.dbi-services.com\/products\/yak\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.dbi-services.com\/products\/yak\/<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"158\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022.png\" alt=\"\" class=\"wp-image-23913\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022.png 580w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022-300x82.png 300w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/figure>\n\n\n\n<p>What is further important to know is the exact name of my OCI AD. I can get this with the next command:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,7]\">mawcloud@cloudshell:~ (eu-zurich-1)$ oci iam availability-domain list\n{\n  \"data\": [\n    {\n      \"compartment-id\": \"ocid1.tenancy.oc1..aaaaaaaayt******************************************62na\",\n      \"id\": \"ocid1.availabilitydomain.oc1..aaaaaaaahcy******************************************a2ta\",\n      \"name\": \"NYRE:EU-ZURICH-1-AD-1\"\n    }\n  ]\n}\n<\/pre>\n<br>\n\n\n\n<p>YAK is executed within a container that I have started from my laptop using rancher. <\/p>\n\n\n\n<p>I have prepared my YAML variables file for my infrastructure after creating my environment root directory. This file contains informations about the cloud like the cloud provider, the compartment id where the VM needs to be created, the cloud user, the regions id, the AD name (we have just gathered in the previous command), the security list and the subnet id.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,5,7]\">yak@75b76d2b532a:~\/yak$ mkdir .\/configuration\/infrastructure\/oci_ace\n\nyak@75b76d2b532a:~\/yak$ cp  .\/configuration\/infrastructure_sample\/oci\/variables.yml  .\/configuration\/infrastructure\/oci_ace\n\nyak@75b76d2b532a:~\/yak$ vi .\/configuration\/infrastructure\/oci_ace\/variables.yml\n\nyak@1f88f85e427c:~\/yak$ cat .\/configuration\/infrastructure\/oci_ace\/variables.yml\n# Copyright: (c) 2022, dbi services, distributed without any warranty under the terms of the GNU General Public License v3\nis_cloud_environment: yes\nenvironment: oci_ace\nansible_user: opc\nprovider: oci\nregion_id: eu-zurich-1\ncompartment_id: ocid1.compartment.oc1..aaaaaaaa6c**********************************************74ktq\navailability_domain: NYRE:EU-ZURICH-1-AD-1\nsecurity_list: ocid1.securitylist.oc1.eu-zurich-1.aaaaaa**********************************************vtxq\nsubnet_id: ocid1.subnet.oc1.eu-zurich-1.aaaaaaaao**********************************************ccqa\n<\/pre>\n<br>\n\n\n\n<p>I can use following ansible command to check all my variables: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yak@75b76d2b532a:~\/yak$ ansible-inventory --graph --vars<\/code><\/pre>\n\n\n\n<p>I will declare the server YAML variables to define my server information as OS image, shape, ip and hostname.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,5,7]\">yak@75b76d2b532a:~\/yak$ mkdir .\/configuration\/infrastructure\/oci_ace\/sourcedb1\n\nyak@75b76d2b532a:~\/yak$ cp .\/configuration\/infrastructure_sample\/oci\/srv-linux-test-01\/variables.yml .\/configuration\/infrastructure\/oci_ace\/sourcedb1\n\nyak@75b76d2b532a:~\/yak$ vi .\/configuration\/infrastructure\/oci_ace\/sourcedb1\/variables.yml\n\nyak@44371bd79b97:~\/yak$ cat .\/configuration\/infrastructure\/oci_ace\/sourcedb1\/variables.yml\n# Copyright: (c) 2022, dbi services, distributed without any warranty under the terms of the GNU General Public License v3\nhostname: srv-source-zdm-01\nis_physical_server: no\nansible_user: opc\nhost_ip_access: public_ip\nprivate_ip:\n    mode: auto\npublic_ip:\n    mode: auto\noperating_system: Oracle-Linux-8.5-2022.01.24-0\nimage_id: ocid1.image.oc1.eu-zurich-1.aaaaaaaamtulj4fmm6cx6xq6delggc5jhfoy652lbxxj2xbnzzxik7sgsnva\nshape:\n    name: VM.Standard.E3.Flex\n    memory_in_gbs: 32\n    ocpus: 6\n<\/pre>\n<br>\n\n\n\n<p>I created some RSA key that I will be using to access the created VM. I will of course record them securely in my environment.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,5,7]\">yak@75b76d2b532a:~\/yak$ mkdir .\/configuration\/infrastructure\/oci_ace\/secrets\n\nyak@75b76d2b532a:~\/yak$ cd .\/configuration\/infrastructure\/oci_ace\/secrets\/\n\nyak@75b76d2b532a:~\/yak\/configuration\/infrastructure\/oci_ace\/secrets$ gen_secret\n\nyak@75b76d2b532a:~\/yak\/configuration\/infrastructure\/oci_ace\/secrets$ ls\nsshkey\tsshkey.pub\n<\/pre>\n<br>\n\n\n\n<p>I can check my inventory with following command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yak@44371bd79b97:~\/yak$ ansible-inventory --host oci_ace\/sourcedb1<\/code><\/pre>\n\n\n\n<p>I need to setup my OCI cloud authentication variable with following export commands:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: []\">export OCI_USER_ID=ocid1.user.oc1..aaaaaaaadl***********************************************sjiq\nexport OCI_USER_FINGERPRINT=2f:**:**:**:**:**:**:**:**:**:**:**:**:**:**:da\nexport OCI_TENANCY=ocid1.tenancy.oc1..aaaaaaaay***********************************************62na\nexport OCI_REGION=eu-zurich-1\nexport OCI_USER_KEY_FILE=$HOME\/.ssh\/oci_api_key.pem\nexport OCI_USE_NAME_AS_IDENTIFIER=true\n<\/pre>\n<br>\n\n\n\n<p>I have then defined and prepared my database YAML variables:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,5,8,10]\">yak@44371bd79b97:~\/yak\/components\/oracle_instance\/component_sample$ cp -R CDB01 \/workspace\/yak\/configuration\/infrastructure\/oci_ace\/sourcedb1\/\n\nyak@44371bd79b97:~\/yak\/configuration\/infrastructure\/oci_ace\/sourcedb1$ cd CDB01\n\nyak@44371bd79b97:~\/yak\/configuration\/infrastructure\/oci_ace\/sourcedb1\/CDB01$ ls\nvariables.yml\n\nyak@44371bd79b97:~\/yak\/configuration\/infrastructure\/oci_ace\/sourcedb1\/CDB01$ vi variables.yml\n\nyak@44371bd79b97:~\/yak\/configuration\/infrastructure\/oci_ace\/sourcedb1\/CDB01$ cat variables.yml\ncomponent_type: oracle_instance\nstorage: linux\/storage\/oracle_instance\n\ntemplates:\n  - { name: ofa,                       path: oracle_flexible_architecture }\n  - { name: rdbms_base_release_19c,    path: software\/rdbms_base_release_19c }\n  - { name: rdbms_patch_campaigns_19c, path: software\/rdbms_patch_campaigns_19c }\n  - { name: rdbms_compile_options_19c, path: software\/rdbms_compile_options_19c }\n  - { name: dmk_packages,              path: software\/dbi-services_dmk_packages }\n  - { name: oracle_database,           path: oracle_database }\n\nedition: EE\n#version: 19_12_210720_JVM_v0\n#version: 19_14_220118_JVM_v0\nversion: 19_17_221018_JVM_v0\n\ninstance_details:\n  sid: \"CDB01\"\n  db_unique_name: \"CDB01_SITE1\"\n  domain_name: \"\"\n  character_set: \"AL32UTF8\"\n  national_character_set: \"AL16UTF16\"\n  rman_connect_string: \"\/\" #connect \/ AS SYSDBA\n\ntns_details:\n  default_domain: \"\"\n  hostname:       \"{{ ansible_hostname }}\"\n  protocol:       \"TCP\"\n  port:           1521\n\nsqlnet_details:\n  default_domain: \"\"\n  encryption_server: true\n  encryption_client: true\n  crypto_checksum_server: true\n  crypto_checksum_client: true\n\nlistener_details:\n  name:     \"LISTENER\"\n  hostname: \"{{ ansible_hostname }}\"\n  protocol: \"TCP\"\n  port:     1521\n\ndmk_dbbackup_settings:\n  mail_title_customer_name: \"xChange\"\n  nosuccessmail: \"1\"\n  smtp_server: \"\"\n  mail_to: \"marc.wagner@dbi-services.com\"\n  mail_from: \"\"\n  dmk_rman:\n    catalog: \"nocatalog\"\n    channel_numbers: 4\n    recovery_window: 4\n    bck_path: \"\" #Default: $cda\/backup\n    schedules:\n      inc0:     { job_desc: \"Weekly inc0 backup\", rcv: \"bck_inc0_fra.rcv\", minute: 00, hour: 22   , mday: \"*\", month: \"*\", weekday: 0 }\n      inc1:     { job_desc: \"Daily  inc1 backup\", rcv: \"bck_inc1_fra.rcv\", minute: 00, hour: 22   , mday: \"*\", month: \"*\", weekday: \"1-6\" }\n      arch:     { job_desc: \"Archive log backup\", rcv: \"bck_arc_fra.rcv\" , minute: 00, hour: \"*\/2\", mday: \"*\", month: \"*\", weekday: \"*\" }\n      mnt_obs:  { job_desc: \"Manage obsoletes\",   rcv: \"mnt_obs.rcv\"     , minute: 00, hour: \"01\" , mday: \"*\", month: \"*\", weekday: \"*\" }\n<\/pre>\n<br>\n\n\n\n<p>And added the bucket name for the artifacts:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3]\">yak@44371bd79b97:~\/yak\/configuration\/infrastructure\/oci_ace$ vi variables.yml\n\nyak@44371bd79b97:~\/yak\/configuration\/infrastructure\/oci_ace$ cat variables.yml\n# Copyright: (c) 2022, dbi services, distributed without any warranty under the terms of the GNU General Public License v3\nis_cloud_environment: yes\nenvironment: oci_ace\nansible_user: opc\nprovider: oci\nregion_id: eu-zurich-1\ncompartment_id: ocid1.compartment.oc1..aaaaaaaa6c**********************************************74ktq\navailability_domain: NYRE:EU-ZURICH-1-AD-1\nsecurity_list: ocid1.securitylist.oc1.eu-zurich-1.aaaaaa**********************************************vtxq\nsubnet_id: ocid1.subnet.oc1.eu-zurich-1.aaaaaaaao**********************************************ccqa\n\nartifacts:\n  provider: aws_s3\n  variables:\n    bucket_name: \"dbi-services-yak-artifacts\"\n<\/pre>\n<br>\n\n\n\n<p>To access the artifacts stored in our dbi services AWS bucket, I had to set my AWS credentials:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: []\">export AWS_ACCESS_KEY_ID=\"ASI*************BE\"\nexport AWS_SECRET_ACCESS_KEY=\"8gR*******************************q7\"\nexport AWS_SESSION_TOKEN=\"IQoJ********************************************4RI\/K\/6\"\n<\/pre>\n<br>\n\n\n\n<p>And now I&#8217;m able to deploy my server (OCI VM):<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">yak@44371bd79b97:~\/yak$ apdp oci_ace\/sourcedb1\n\nPLAY [Check target type] *****************************************************************************************************************************************************************************************************\nTuesday 14 March 2023  18:09:51 +0000 (0:00:00.017)       0:00:00.017 *********\n [started TASK: ansible.builtin.assert on oci_ace\/sourcedb1]\n\nTASK [ansible.builtin.assert] ************************************************************************************************************************************************************************************************\nok: [oci_ace\/sourcedb1 -&gt; localhost] =&gt; {\n    \"changed\": false,\n    \"msg\": \"All assertions passed\"\n}\n\n...\n...\n...\n\nPLAY RECAP *******************************************************************************************************************************************************************************************************************\noci_ace\/sourcedb1          : ok=45   changed=14   unreachable=0    failed=0    skipped=17   rescued=0    ignored=0\n\nTuesday 14 March 2023  18:15:07 +0000 (0:00:06.018)       0:05:16.861 *********\n===============================================================================\nyak.core.oci_compute : Create instance ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 69.23s\nyak.core.os_prerequisites : Install LVM ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 69.12s\nyak.core.os_storage : Create volume attachment ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 37.16s\nyak.core.os_storage : Create volume ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 34.87s\nyak.core.os_storage : Perform a ISCSI discovery ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- 20.11s\nGathering Facts ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 19.17s\nyak.core.oci_compute : Wait for SSH to come up ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 18.60s\nyak.core.os_storage : Create a filesystem on logical volume ----------------------------------------------------------------------------------------------------------------------------------------------------------- 7.36s\nyak.core.os_storage : Create a logical volume ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 6.84s\nyak.core.os_storage : Mount logical volume ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 6.02s\nyak.core.os_storage : Get UUID for each FS ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 5.40s\nyak.core.os_storage : Login to ISCSI target --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 5.16s\nyak.core.os_prerequisites : Install XFS ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 4.40s\nyak.core.oci_compute : Get OCI instances facts ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 1.98s\nyak.core.os_storage : Get instances ID -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1.97s\nyak.core.oci_compute : Get OCI instances facts ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 1.79s\nyak.core.os_storage : Create a volume group --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1.74s\nyak.core.os_prerequisites : Define hostname to srv-source-zdm-01 ------------------------------------------------------------------------------------------------------------------------------------------------------ 1.60s\nyak.core.os_prerequisites : Set timezone to Europe\/Zurich ------------------------------------------------------------------------------------------------------------------------------------------------------------- 1.27s\nUpdate yak inventory -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 0.39s\nyak@44371bd79b97:~\/yak$\n<\/pre>\n<br>\n\n\n\n<p>And my database, CDB01 on my servers:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">yak@44371bd79b97:~\/yak$ ansible-playbook components\/oracle_instance\/playbooks\/linux\/deploy.yml -e target=oci_ace\/sourcedb1\/CDB01\n\nPLAY [Deploy Oracle database instance oci_ace\/sourcedb1\/CDB01] ***************************************************************************************************************************************************************\nTuesday 14 March 2023  19:46:41 +0000 (0:00:00.048)       0:00:00.049 *********\n [started TASK: Gathering Facts on oci_ace\/sourcedb1\/CDB01]\n\nTASK [Gathering Facts] *******************************************************************************************************************************************************************************************************\n[WARNING]: Platform linux on host oci_ace\/sourcedb1\/CDB01 is using the discovered Python interpreter at \/usr\/bin\/python3.6, but future installation of another Python interpreter could change the meaning of that path. See\nhttps:\/\/docs.ansible.com\/ansible-core\/2.13\/reference_appendices\/interpreter_discovery.html for more information.\nok: [oci_ace\/sourcedb1\/CDB01]\nTuesday 14 March 2023  19:47:00 +0000 (0:00:19.064)       0:00:19.113 *********\n [started TASK: assert on oci_ace\/sourcedb1\/CDB01]\n\n...\n...\n...\n\nPLAY RECAP *******************************************************************************************************************************************************************************************************************\noci_ace\/sourcedb1\/CDB01    : ok=138  changed=52   unreachable=0    failed=0    skipped=26   rescued=0    ignored=0\n\nTuesday 14 March 2023  20:56:17 +0000 (0:00:01.468)       1:09:35.402 *********\n===============================================================================\nlinux_ora_dmk_dbcreate : Create database using DBCA template (~50 minutes) ----------------------------------------------------------------------------------------------------------------------------------------- 3370.53s\nlinux_ora_rdbms_base : Copy\/Unzip Oracle Oracle RDBMS binaries ------------------------------------------------------------------------------------------------------------------------------------------------------ 266.80s\nlinux_ora_rdbms_base : Start runInstaller (Oracle RDBMS Edition EE) -------------------------------------------------------------------------------------------------------------------------------------------------- 99.69s\nyak.core.artifacts : Download artifact ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 58.88s\nlinux_ora_rdbms_combo_db_ovm_ru : Unzip Oracle Combo patch(es) ------------------------------------------------------------------------------------------------------------------------------------------------------- 47.89s\nlinux_ora_rdbms_os_tools : Install troubleshooting tools ------------------------------------------------------------------------------------------------------------------------------------------------------------- 22.23s\nyak.core.artifacts : Change artifacts ownership and group ------------------------------------------------------------------------------------------------------------------------------------------------------------ 19.63s\nGathering Facts ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 19.06s\nyak.core.artifacts : Creates directory layout ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 17.05s\nlinux_ora_rdbms_chopt : Disable - Oracle OLAP ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 13.49s\nlinux_ora_rdbms_chopt : Disable  - Oracle Advanced Analytics --------------------------------------------------------------------------------------------------------------------------------------------------------- 13.20s\nlinux_ora_rdbms_os_tools : Install htop ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 12.74s\nlinux_ora_rdbms_chopt : Disable - Oracle Partitioning ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 12.62s\nlinux_ora_rdbms_dmk_packages : Unzip DMK archives -------------------------------------------------------------------------------------------------------------------------------------------------------------------- 12.58s\nlinux_ora_rdbms_chopt : Disable - Oracle Real Application Testing ---------------------------------------------------------------------------------------------------------------------------------------------------- 12.12s\nlinux_ora_rdbms_os_tools : Install required libraries for htop installation ------------------------------------------------------------------------------------------------------------------------------------------- 8.95s\nlinux_ora_rdbms_chopt : Check Oracle RDBMS options status ------------------------------------------------------------------------------------------------------------------------------------------------------------- 5.33s\nlinux_ora_dmk_dbbackup : Add cronjobs for DMK_DBBACKUP dmk_rman.ksh --------------------------------------------------------------------------------------------------------------------------------------------------- 5.11s\nlinux_ora_rdbms_opatch : Unzip Opatch utility for version compare (indempodence - version context unknown) ------------------------------------------------------------------------------------------------------------ 4.95s\nlinux_ora_rdbms_interim_patch : List of patches installed on top of Oracle Home --------------------------------------------------------------------------------------------------------------------------------------- 4.67s\nyak@44371bd79b97:~\/yak$\n<\/pre>\n<br>\n\n\n\n<p>Once my OCI VM and CDB01 database have been both deployed I can access the servers. The public IP has been inserted in the YAML variables file and I can otherwise get it directly from OCI GUI too. I will access to it using my private key generated previously:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -i \/Users\/maw\/Documents\/Dokument\/pem_ssh_key\/Oracle_cloud_ace\/yak_source_vm\/ssh-key-VM-YAK-ace.key opc@140.XXX.XXX.4<\/code><\/pre>\n\n\n\n<p>After having connected to the OCI VM and CDB01 I have created a pluggable database, named pdb1.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,15,27,31,38,42,46,50,54,61,67]\">oracle@srv-source-zdm-01:\/home\/oracle\/ [rdbms19_17_221018_JVM_v0] CDB01\n********* dbi services Ltd. *********\nSTATUS                 : OPEN\nDB_UNIQUE_NAME         : CDB01_SITE1\nOPEN_MODE              : READ WRITE\nLOG_MODE               : ARCHIVELOG\nDATABASE_ROLE          : PRIMARY\nFLASHBACK_ON           : NO\nFORCE_LOGGING          : NO\nVERSION                : 19.17.0.0.0\nCDB Enabled            : YES\nList PDB(s)  READ ONLY : PDB$SEED\n*************************************\n\noracle@srv-source-zdm-01:\/home\/oracle\/ [CDB01] sqh\n\nSQL*Plus: Release 19.0.0.0.0 - Production on Wed Mar 15 07:02:08 2023\nVersion 19.17.0.0.0\n\nCopyright (c) 1982, 2022, Oracle.  All rights reserved.\n\n\nConnected to:\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\nVersion 19.17.0.0.0\n\nSQL&gt; create pluggable database pdb1 admin user admin identified by manager file_name_convert=('pdbseed','pdb1');\n\nPluggable database created.\n\nSQL&gt; show pdbs\n\n    CON_ID CON_NAME\t\t\t                  OPEN MODE  RESTRICTED\n---------- ------------------------------ ---------- ----------\n\t 2       PDB$SEED\t\t\t                  READ ONLY  NO\n\t 3       PDB1 \t\t\t                    MOUNTED\n\nSQL&gt; alter pluggable database pdb1 open;\n\nPluggable database altered.\n\nSQL&gt; select a.name,b.state from v$pdbs a , dba_pdb_saved_states b where a.con_id = b.con_id;\n\nno rows selected\n\nSQL&gt; SELECT con_name, instance_name, state FROM cdb_pdb_saved_states;\n\nno rows selected\n\nSQL&gt; alter pluggable database pdb1 save state;\n\nPluggable database altered.\n\nSQL&gt; show pdbs\n\n    CON_ID CON_NAME                       OPEN MODE  RESTRICTED\n---------- ------------------------------ ---------- ----------\n         2 PDB$SEED                       READ ONLY  NO\n         3 PDB1                           READ WRITE NO\n\nSQL&gt; select a.name,b.state from v$pdbs a , dba_pdb_saved_states b where a.con_id = b.con_id;\n\nNAME       STATE\n---------- --------------\nPDB1       OPEN\n\nSQL&gt; SELECT con_name, instance_name, state FROM cdb_pdb_saved_states;\n\nCON_NAME   INSTANCE_N STATE\n---------- ---------- --------------\nPDB1       CDB01      OPEN\n<\/pre>\n<br>\n\n\n\n<h2 class=\"wp-block-heading\">Create ZDM host<\/h2>\n\n\n\n<p>ZDM should be installed on a dedicated host. I have created a VM with oracle linux 7.9 Operating System as described in the next pictures.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"946\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_1-1024x946.png\" alt=\"\" class=\"wp-image-23844\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_1-1024x946.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_1-300x277.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_1-768x709.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_1.png 1189w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"945\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_2-1024x945.png\" alt=\"\" class=\"wp-image-23845\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_2-1024x945.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_2-300x277.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_2-768x708.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_2.png 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"407\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_3-1024x407.png\" alt=\"\" class=\"wp-image-23846\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_3-1024x407.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_3-300x119.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_3-768x305.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_3.png 1210w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_4-1-1024x683.png\" alt=\"\" class=\"wp-image-23849\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_4-1-1024x683.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_4-1-300x200.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_4-1-768x512.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_4-1-1536x1024.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/xChange_create_ZDM_host_instance_4-1.png 1809w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>To connect to the ZDM host I will use my private key:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -i \/Users\/maw\/Documents\/Dokument\/pem_ssh_key\/Oracle_cloud_ace\/VM\/ssh-key-VM-ace.key opc@140.XXX.XXX.59<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Install ZDM software on the ZDM host<\/h2>\n\n\n\n<p>The installation manual of ZDM can be found of the Oracle Web Site: <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/zero-downtime-migration\/21.4\/index.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/docs.oracle.com\/en\/database\/oracle\/zero-downtime-migration\/21.4\/index.html<\/a><\/p>\n\n\n\n<p>We first need to check if following packages are installed and otherwise we will need to install them:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>perl<\/li>\n\n\n\n<li>python36-oci-cli<\/li>\n\n\n\n<li>expect<\/li>\n\n\n\n<li>oraclelinux-developer-release-el7<\/li>\n\n\n\n<li>libaio<\/li>\n\n\n\n<li>glibc-devel<\/li>\n<\/ul>\n\n\n\n<p>This has been done now:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,4,5,25,26,42,45,48,51]\">[opc@zdm-host ~]$ which perl\n\/usr\/bin\/perl\n\n[opc@zdm-host ~]$ sudo rpm -qa | grep  python36-oci-cli\n[opc@zdm-host ~]$ sudo yum install python36-oci-cli\nLoaded plugins: langpacks, ulninfo\nol7_MySQL80      \n                                                                                                                                                                                                                      | 3.0 kB  00:00:00\n...\n...\n...                                                                                                                                                                                                    11\/11\n\nInstalled:\n  python36-oci-cli.noarch 0:3.23.2-1.el7\n\nDependency Installed:\n  python3-jmespath.noarch 0:0.10.0-1.el7                 python3-prompt-toolkit.noarch 0:3.0.29-1.0.2.el7        python36-arrow.noarch 0:1.1.1-1.el7         python36-dateutil.noarch 1:2.7.5-1.0.1.el7       python36-pyyaml.x86_64 0:5.4.1-1.0.1.el7\n  python36-terminaltables.noarch 0:3.1.0-1.0.1.el7       python36-typing-extensions.noarch 0:3.7.4.2-1.el7       python36-wcwidth.noarch 0:0.2.5-1.el7\n\nDependency Updated:\n  python36-oci-sdk.x86_64 0:2.93.1-1.el7\n\nComplete!\n\n[opc@zdm-host ~]$ sudo rpm -qa | grep  expect\n[opc@zdm-host ~]$ sudo yum install expect\nLoaded plugins: langpacks, ulninfo\nResolving Dependencies\n\n...\n...\n...                                                                                                                                                                                                              2\/2\n\nInstalled:\n  expect.x86_64 0:5.45-14.el7_1\n\nDependency Installed:\n  tcl.x86_64 1:8.5.13-8.el7\n\nComplete!\n\n[opc@zdm-host ~]$ sudo rpm -qa | grep  expect\nexpect-5.45-14.el7_1.x86_64\n\n[opc@zdm-host ~]$ sudo rpm -qa | grep oraclelinux-developer-release-el7\noraclelinux-developer-release-el7-1.0-6.el7.x86_64\n\n[opc@zdm-host ~]$ sudo rpm -qa | grep libaio\nlibaio-0.3.109-13.el7.x86_64\n\n[opc@zdm-host ~]$ sudo rpm -qa | grep glibc-devel\nglibc-devel-2.17-326.0.3.el7_9.x86_64\n<\/pre>\n<br>\n\n\n\n<p>We will now create ZDM group, user and folders:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: []\">[opc@zdm-host ~]$ sudo groupadd zdm\n[opc@zdm-host ~]$ sudo useradd -g zdm zdmuser\n\n[opc@zdm-host ~]$ sudo mkdir -p \/u01\/app\/zdmhome\n[opc@zdm-host ~]$ sudo mkdir \/u01\/app\/zdmbase\n[opc@zdm-host ~]$ sudo mkdir \/u01\/app\/zdmdownload\n[opc@zdm-host ~]$ sudo chown zdmuser:zdm \/u01\/app\/zdmhome\n[opc@zdm-host ~]$ sudo chown zdmuser:zdm \/u01\/app\/zdmbase\n[opc@zdm-host ~]$ sudo chown zdmuser:zdm \/u01\/app\/zdmdownload\n<\/pre>\n<br>\n\n\n\n<p>We can now download ZDM software from the following Web Site: <a href=\"https:\/\/www.oracle.com\/database\/technologies\/rac\/zdm-downloads.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.oracle.com\/database\/technologies\/rac\/zdm-downloads.html<\/a><\/p>\n\n\n\n<p>We will now upload it to the ZDM host with opc user:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">maw@DBI-LT-MAW2 Downloads % scp -i \/Users\/maw\/Documents\/Dokument\/pem_ssh_key\/Oracle_cloud_ace\/VM\/ssh-key-VM-ace.key V1034023-01.zip opc@140.XXX.XXX.59:\/home\/opc\nV1034023-01.zip \n<\/pre>\n<br>\n\n\n\n<p>We will unzip the software with ZDM user:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,2,4,5,6,8]\">[opc@zdm-host ~]$ sudo cp -p \/home\/opc\/V1034023-01.zip \/u01\/app\/zdmdownload\/\n[opc@zdm-host ~]$ sudo chown zdmuser:zdm \/u01\/app\/zdmdownload\/V1034023-01.zip\n\n[opc@zdm-host ~]$ sudo su - zdmuser\n[zdmuser@zdm-host ~]$ cd \/u01\/app\/zdmdownload\n[zdmuser@zdm-host zdmdownload]$ unzip -q V1034023-01.zip\n\n[zdmuser@zdm-host zdmdownload]$ ls -ltrh\ntotal 790M\ndrwxr-xr-x. 3 zdmuser zdm 4.0K Feb  7 18:13 zdm21.4\n-rw-r--r--. 1 zdmuser zdm 790M Mar 13 13:40 V1034023-01.zip\n<\/pre>\n<br>\n\n\n\n<p>And we can now install ZDM software:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,2]\">[zdmuser@zdm-host zdmdownload]$ cd zdm21.4\n[zdmuser@zdm-host zdm21.4]$ .\/zdminstall.sh setup oraclehome=\/u01\/app\/zdmhome oraclebase=\/u01\/app\/zdmbase ziploc=\/u01\/app\/zdmdownload\/zdm21.4\/zdm_home.zip -zdm\nZDM kit home: \/u01\/app\/zdmdownload\/zdm21.4\n\/u01\/app\/zdmdownload\/zdm21.4\n---------------------------------------\nValidating zip file...\n---------------------------------------\n       25  02-07-2023 18:11   rhp\/zdm.build\n---------------------------------------\nUnzipping shiphome to home...\n---------------------------------------\nUnzipping shiphome...\nShiphome unzipped successfully..\n---------------------------------------\n##### Performing GridHome Software Only Installation #####\n---------------------------------------\nInstallation log location: \/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/logs\/runInstaller_1678715692.out\nmaking dir \/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/conf\n---------------------------------------\nGenerating Preference file\n---------------------------------------\n\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/conf\/rhp.pref\nUsing port 8899 for MySQL\n---------------------------------------\nGenerating Root Certificate\n---------------------------------------\nCluster root certificate generated successfully.\n---------------------------------------\nGenerating CA CERTS file\n---------------------------------------\nspawn \/u01\/app\/zdmhome\/bin\/crskeytoolctl -copycacerts -filestore \/u01\/app\/zdmbase\/crsdata\/zdm-host\/security\nEnter JRE cacerts truststore password:\nJRE cacerts copied to file [\/u01\/app\/zdmbase\/crsdata\/zdm-host\/security\/cacerts].\n---------------------------------------\nGenerating nogi.enabled file\n---------------------------------------\nnogi.enabled file generated sucessfully\n---------------------------------------\nGenerating standalone_config.properties file\n---------------------------------------\nSetting base folder permissions\n---------------------------------------\nCopying service script to bin folder in Oracle Home\nlabel_date is: 221207.9\n---------------------------------------\nStoring to wallet\n---------------------------------------\ncacerts  crskeytoolctl.log  cwallet.sso  cwallet.sso.lck\n---------------------------------------\nGenerating random password\n---------------------------------------\n-rw-------. 1 zdmuser zdm 4333 Mar 13 13:55 \/u01\/app\/zdmbase\/crsdata\/zdm-host\/security\/cwallet.sso\n-rw-------. 1 zdmuser zdm 4333 Mar 13 13:55 \/u01\/app\/zdmbase\/crsdata\/zdm-host\/security\/cwallet.sso\n---------------------------------------\nSetting up MySQL...\n---------------------------------------\nspawn \/u01\/app\/zdmhome\/mysql\/server\/bin\/mysqladmin --defaults-file=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/conf\/my.cnf -u root -p ping\n---------------------------------------\nStoring to wallet\n---------------------------------------\ncacerts  crskeytoolctl.log  cwallet.sso  cwallet.sso.lck\n---------------------------------------\nGenerating random password\n---------------------------------------\n-rw-------. 1 zdmuser zdm 4445 Mar 13 13:55 \/u01\/app\/zdmbase\/crsdata\/zdm-host\/security\/cwallet.sso\n-rw-------. 1 zdmuser zdm 4445 Mar 13 13:55 \/u01\/app\/zdmbase\/crsdata\/zdm-host\/security\/cwallet.sso\nspawn \/u01\/app\/zdmhome\/mysql\/server\/bin\/mysql --socket=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/mysql\/metadata\/mysql.sock -u root\n---------------------------------------\nCreating MySQL DB and user...\n---------------------------------------\nspawn \/u01\/app\/zdmhome\/mysql\/server\/bin\/mysql --socket=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/mysql\/metadata\/mysql.sock -u root -p -e CREATE DATABASE IF NOT EXISTS GHSUSER21;\nspawn \/u01\/app\/zdmhome\/mysql\/server\/bin\/mysql --socket=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/mysql\/metadata\/mysql.sock -u root -p\nspawn \/u01\/app\/zdmhome\/mysql\/server\/bin\/mysql --socket=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/mysql\/metadata\/mysql.sock -u root -p -e GRANT ALTER, CREATE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, INDEX, INSERT, LOCK TABLES, REFERENCES, SELECT, SHOW VIEW, UPDATE ON GHSUSER21.* TO 'GHSUSER21'@'localhost';\ncurrent node is active node\nspawn \/u01\/app\/zdmhome\/mysql\/server\/bin\/mysqladmin --defaults-file=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/conf\/my.cnf -u root -p shutdown\n---------------------------------------\nAdding Certs to ZDM\n---------------------------------------\nZDM service setup finished successfully...\n<\/pre>\n<br>\n\n\n\n<p>We can start ZDM service:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[zdmuser@zdm-host ~]$ \/u01\/app\/zdmhome\/bin\/zdmservice start\nNo instance detected, starting zdmservice\nspawn \/u01\/app\/zdmhome\/mysql\/server\/bin\/mysqladmin --defaults-file=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/conf\/my.cnf -u root -p ping\n\n WARNING: oracle.jwc.jmx does not exist in the configuration file. It will be TRUE by default.\n[jwcctl debug] Environment ready to start JWC\n[jwcctl debug] Return code of initialization: [0]\n\n[jwcctl debug] ... BEGIN_DEBUG [Action= start] ...\nStart JWC\n[jwcctl debug] Loading configuration file: \/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/conf\/jwc.properties\n[jwcctl debug]     oracle.jmx.login.credstore = CRSCRED\n[jwcctl debug]     oracle.jmx.login.args = DOMAIN=rhp CACHE_ENABLED=true CACHE_EXPIRATION=180\n[jwcctl debug]     oracle.rmi.url = service:jmx:rmi:\/\/{0}:{1,number,#}\/jndi\/rmi:\/\/{0}:{1,number,#}\/jmxrmi\n[jwcctl debug]     oracle.http.url = http:\/\/{0}:{1,number,#}\/rhp\/gridhome\n[jwcctl debug]     oracle.jwc.tls.clientauth = false\n[jwcctl debug]     oracle.jwc.tls.rmi.clientfactory = RELOADABLE\n[jwcctl debug]     oracle.jwc.lifecycle.start.log.fileName = JWCStartEvent.log\n[jwcctl debug]     oracle.jwc.http.connector.ssl.protocols = TLSv1.2,TLSv1.3\n[jwcctl debug] Get JWC PIDs\n[jwcctl debug] Done Getting JWC PIDs\n[jwcctl debug] ... JWC containers not found ...\n[jwcctl debug]     Start command:-server -Xms2048M -Xmx4096M -Djava.awt.headless=true -Ddisable.checkForUpdate=true -Djava.util.logging.config.file=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/conf\/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -DTRACING.ENABLED=true -DTRACING.LEVEL=2 -Doracle.wlm.dbwlmlogger.logging.level=FINEST -Duse_scan_IP=true -Djava.rmi.server.hostname=localhost -Doracle.http.port=8898 -Doracle.jmx.port=8897 -Doracle.tls.enabled=false -Doracle.jwc.tls.http.enabled=false -Doracle.rhp.storagebase=\/u01\/app\/zdmbase -Djava.security.manager -Djava.security.policy=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/conf\/catalina.policy -Djava.security.egd=file:\/dev\/urandom -Doracle.jwc.wallet.path=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/security -Doracle.jmx.login.credstore=WALLET -Doracle.rest.enabled=false -Doracle.jmx.enabled=true -Dcatalina.home=\/u01\/app\/zdmhome\/tomcat -Dcatalina.base=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp -Djava.io.tmpdir=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/temp -Doracle.home=\/u01\/app\/zdmhome -Doracle.jwc.mode=STANDALONE -classpath \/u01\/app\/zdmhome\/jlib\/cryptoj.jar:\/u01\/app\/zdmhome\/jlib\/oraclepki.jar:\/u01\/app\/zdmhome\/jlib\/osdt_core.jar:\/u01\/app\/zdmhome\/jlib\/osdt_cert.jar:\/u01\/app\/zdmhome\/tomcat\/lib\/tomcat-juli.jar:\/u01\/app\/zdmhome\/tomcat\/lib\/bootstrap.jar:\/u01\/app\/zdmhome\/jlib\/jwc-logging.jar org.apache.catalina.startup.Bootstrap start\n[jwcctl debug] Get JWC PIDs\n[jwcctl debug] Done Getting JWC PIDs\n[jwcctl debug] ... JWC Container (pid=29786) ...\n[jwcctl debug] ... JWC Container running (pid=29786) ...\n[jwcctl debug]     Check command:-Djava.net.preferIPv6Addresses=true -Dcatalina.base=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp -Doracle.wlm.dbwlmlogger.logging.level=FINEST -Doracle.jwc.client.logger.file.name=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/rhp\/logs\/jwc_checker_stdout_err_%g.log -Doracle.jwc.client.logger.file.number=10 -Doracle.jwc.client.logger.file.size=1048576 -Doracle.jwc.wallet.path=\/u01\/app\/zdmbase\/crsdata\/zdm-host\/security -Doracle.jmx.login.credstore=WALLET -Doracle.tls.enabled=false -Doracle.jwc.tls.http.enabled=false -classpath \/u01\/app\/zdmhome\/jlib\/jwc-logging.jar:\/u01\/app\/zdmhome\/jlib\/jwc-security.jar:\/u01\/app\/zdmhome\/jlib\/jwc-client.jar:\/u01\/app\/zdmhome\/jlib\/jwc-cred.jar:\/u01\/app\/zdmhome\/jlib\/srvm.jar:\/u01\/app\/zdmhome\/jlib\/srvmhas.jar:\/u01\/app\/zdmhome\/jlib\/cryptoj.jar:\/u01\/app\/zdmhome\/jlib\/oraclepki.jar:\/u01\/app\/zdmhome\/jlib\/osdt_core.jar:\/u01\/app\/zdmhome\/jlib\/osdt_cert.jar:\/u01\/app\/zdmhome\/tomcat\/lib\/tomcat-juli.jar oracle.cluster.jwc.tomcat.client.JWCChecker localhost 8898 -1\n[jwcctl debug] ... JWC Container is ready ...\n[jwcctl debug] ... START - Return code = 0 ...\n[jwcctl debug]  ... END_DEBUG [Action=start] ...\n[jwcctl debug] Return code of AGENT: [0]\n\nReturn code is 0\nServer started successfully.\n<\/pre>\n<br>\n\n\n\n<p>And check its status:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[zdmuser@zdm-host ~]$ \/u01\/app\/zdmhome\/bin\/zdmservice status\n\n---------------------------------------\n\tService Status\n---------------------------------------\n\n Running: \ttrue\n Tranferport:\n Conn String: \tjdbc:mysql:\/\/localhost:8899\/\n RMI port: \t8897\n HTTP port: \t8898\n Wallet path: \t\/u01\/app\/zdmbase\/crsdata\/zdm-host\/security\n<\/pre>\n<br>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Create API keys<\/h2>\n\n\n\n<p>On the ZDM host, we will create API keys that we will upload to our OCI account. These keys will be used for ZDM to be able run OCI commands.<\/p>\n\n\n\n<p>Generate API keys:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,5,7,13,19,22]\">[zdmuser@zdm-host ~]$ cd \/u01\/app\/zdmhome\n\n[zdmuser@zdm-host zdmhome]$ mkdir .oci\n\n[zdmuser@zdm-host zdmhome]$ cd .oci\n\n[zdmuser@zdm-host .oci]$ openssl genrsa -out \/u01\/app\/zdmhome\/.oci\/oci_api_key.pem 2048\nGenerating RSA private key, 2048 bit long modulus\n......................................+++\n..................+++\ne is 65537 (0x10001)\n\n[zdmuser@zdm-host .oci]$ ls -al\ntotal 8\ndrwxr-xr-x.  2 zdmuser zdm   29 Mar 13 14:13 .\ndrwxr-xr-x. 50 zdmuser zdm 4096 Mar 13 14:12 ..\n-rw-r--r--.  1 zdmuser zdm 1679 Mar 13 14:13 oci_api_key.pem\n\n[zdmuser@zdm-host .oci]$ openssl rsa -pubout -in \/u01\/app\/zdmhome\/.oci\/oci_api_key.pem -out \/u01\/app\/zdmhome\/.oci\/oci_api_key_public.pem\nwriting RSA key\n\n[zdmuser@zdm-host .oci]$ ls -al\ntotal 12\ndrwxr-xr-x.  2 zdmuser zdm   59 Mar 13 14:13 .\ndrwxr-xr-x. 50 zdmuser zdm 4096 Mar 13 14:12 ..\n-rw-r--r--.  1 zdmuser zdm 1679 Mar 13 14:13 oci_api_key.pem\n-rw-r--r--.  1 zdmuser zdm  451 Mar 13 14:13 oci_api_key_public.pem\n<\/pre>\n<br>\n\n\n\n<p>API keys will be downloaded into the OCI account as described in the next pictures.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"623\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_API_profile_OCI_1-1024x623.png\" alt=\"\" class=\"wp-image-23859\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_API_profile_OCI_1-1024x623.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_API_profile_OCI_1-300x182.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_API_profile_OCI_1-768x467.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_API_profile_OCI_1-1536x934.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_API_profile_OCI_1.png 1809w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"638\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_API_profile_OCI_2-1024x638.png\" alt=\"\" class=\"wp-image-23860\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_API_profile_OCI_2-1024x638.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_API_profile_OCI_2-300x187.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_API_profile_OCI_2-768x478.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_API_profile_OCI_2-1536x957.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_API_profile_OCI_2.png 1808w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">OCI config file on ZDM host<\/h2>\n\n\n\n<p>On the ZDM host for the zdmuser and opc user we will create the OCI config file to be able to run OCI commands directly from the ZDM host.<\/p>\n\n\n\n<p>For ZDM user:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,5]\">[zdmuser@zdm-host ~]$ cd \/u01\/app\/zdmhome\/.oci\n\n[zdmuser@zdm-host .oci]$ vi config\n\n[zdmuser@zdm-host .oci]$ cat config\n[DEFAULT]\nuser=ocid1.user.oc1..aaaaaaaadl********************************************6sjiq\nfingerprint=2f:**:**:**:**:**:**:**:**:**:**:**:**:**:**:da\ntenancy=ocid1.tenancy.oc1..aaaaaaa********************************************62na\nregion=eu-zurich-1\nkey_file=\/u01\/app\/zdmhome\/.oci\/oci_api_key.pem\n<\/pre>\n<br>\n\n\n\n<p>For opc user:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,5,7,9,11,13,15]\">[opc@zdm-host ~]$ cd ~\n\n[opc@zdm-host ~]$ mkdir .oci\n\n[opc@zdm-host ~]$ cp \/u01\/app\/zdmhome\/.oci\/config \/home\/opc\/.oci\n\n[opc@zdm-host ~]$ cp \/u01\/app\/zdmhome\/.oci\/oci_api_key.pem \/home\/opc\/.oci\n\n[opc@zdm-host ~]$ cp \/u01\/app\/zdmhome\/.oci\/oci_api_key_public.pem \/home\/opc\/.oci\n\n[opc@zdm-host ~]$ cd .oci\n\n[opc@zdm-host .oci]$ vi config\n\n[opc@zdm-host .oci]$ cat config\n[DEFAULT]\nuser=ocid1.user.oc1..aaaaaaaadl********************************************6sjiq\nfingerprint=2f:**:**:**:**:**:**:**:**:**:**:**:**:**:**:da\ntenancy=ocid1.tenancy.oc1..aaaaaaa********************************************62na\nregion=eu-zurich-1\nkey_file=\/u01\/app\/zdmhome\/.oci\/oci_api_key.pem\n<\/pre>\n<br>\n\n\n\n<p>Now we can test oci commands:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[opc@zdm-host .oci]$ oci iam region list\nWARNING: Permissions on \/home\/opc\/.oci\/config are too open.\nTo fix this please try executing the following command:\noci setup repair-file-permissions --file \/home\/opc\/.oci\/config\nAlternatively to hide this warning, you may set the environment variable, OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING:\nexport OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING=True\n\nWARNING: Permissions on \/home\/opc\/.oci\/oci_api_key.pem are too open.\nTo fix this please try executing the following command:\noci setup repair-file-permissions --file \/home\/opc\/.oci\/oci_api_key.pem\nAlternatively to hide this warning, you may set the environment variable, OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING:\nexport OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING=True\n\n{\n  \"data\": [\n    {\n      \"key\": \"AMS\",\n      \"name\": \"eu-amsterdam-1\"\n    },\n...\n...\n...\n<\/pre>\n<br>\n\n\n\n<p>And we can lock the api private key for zdmuser:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,4,6]\">[opc@zdm-host .oci]$ sudo su - zdmuser\nLast login: Mon Mar 13 14:27:19 GMT 2023 on pts\/0\n\n[zdmuser@zdm-host ~]$ cd \/u01\/app\/zdmhome\/.oci\n\n[zdmuser@zdm-host .oci]$ chmod go-rwx \/u01\/app\/zdmhome\/.oci\/oci_api_key.pem\n<\/pre>\n<br>\n\n\n\n<h2 class=\"wp-block-heading\">Create RSA Keys<\/h2>\n\n\n\n<p>We will generate RSA keys from the ZDM user and add the public key into the authorized keys from the opc user.<\/p>\n\n\n\n<p>From ZDM user:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,18]\">[zdmuser@zdm-host ~]$ ssh-keygen\nGenerating public\/private rsa key pair.\nEnter file in which to save the key (\/home\/zdmuser\/.ssh\/id_rsa):\nCreated directory '\/home\/zdmuser\/.ssh'.\nEnter passphrase (empty for no passphrase):\nEnter same passphrase again:\nYour identification has been saved in \/home\/zdmuser\/.ssh\/id_rsa.\nYour public key has been saved in \/home\/zdmuser\/.ssh\/id_rsa.pub.\nThe key fingerprint is:\nSHA256:fGfzD**************************vzQ zdmuser@zdm-host\nThe key's randomart image is:\n+---[RSA 2048]----+\n...\n...\n...\n+----[SHA256]-----+\n\n[zdmuser@zdm-host ~]$ ls -ltrh \/home\/zdmuser\/.ssh\ntotal 8.0K\n-rw-r--r--. 1 zdmuser zdm  398 Mar 13 14:46 id_rsa.pub\n-rw-------. 1 zdmuser zdm 1.7K Mar 13 14:46 id_rsa\n<\/pre>\n<br>\n\n\n\n<p>With OPC user:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[opc@zdm-host ~]$ sudo cat \/home\/zdmuser\/.ssh\/id_rsa.pub &gt;&gt; \/home\/opc\/.ssh\/authorized_keys\n<\/pre>\n<br>\n\n\n\n<h2 class=\"wp-block-heading\">Source DB preparation<\/h2>\n\n\n\n<p>We need to make some actions on the database we would like to migrate.<\/p>\n\n\n\n<h3>streams_pool_size<\/h3>\n\n\n\n<p>The first one is to set streams_pool_size parameter. For offline logical migration, as we are doing here, we need to set this parameter to a minimum of 256MB-350MB to have an initial pool allocated for optimal Data Pump performance. For online logical migrations, we need to set it to at least 2 GB. We will set it to 2 GB. Having enough memory we will increase sga size as well.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,13,19,31,35,39,44,55,59]\">oracle@srv-source-zdm-01:\/home\/oracle\/ [CDB01] sqh\n\nSQL*Plus: Release 19.0.0.0.0 - Production on Wed Mar 15 11:51:43 2023\nVersion 19.17.0.0.0\n\nCopyright (c) 1982, 2022, Oracle.  All rights reserved.\n\n\nConnected to:\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\nVersion 19.17.0.0.0\n\nSQL&gt; show parameter streams_pool_size\n\nNAME                                 TYPE        VALUE\n------------------------------------ ----------- ------------------------------\nstreams_pool_size                    big integer 0\n\nSQL&gt; show parameter sga\n\nNAME                                 TYPE        VALUE\n------------------------------------ ----------- ------------------------------\nallow_group_access_to_sga            boolean     FALSE\nlock_sga                             boolean     FALSE\npre_page_sga                         boolean     TRUE\nsga_max_size                         big integer 2G\nsga_min_size                         big integer 0\nsga_target                           big integer 2000M\nunified_audit_sga_queue_size         integer     1048576\n\nSQL&gt; alter system set sga_max_size=8G scope=spfile;\n\nSystem altered.\n\nSQL&gt; alter system set sga_target=8G 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 8589931688 bytes\nFixed Size                 13874344 bytes\nVariable Size             587202560 bytes\nDatabase Buffers         7969177600 bytes\nRedo Buffers               19677184 bytes\nDatabase mounted.\nDatabase opened.\n\nSQL&gt; alter system set streams_pool_size=2g scope=both;\n\nSystem altered.\n\nSQL&gt; show parameter streams_pool_size\n\nNAME                                 TYPE        VALUE\n------------------------------------ ----------- ------------------------------\nstreams_pool_size                    big integer 2G\n<\/pre>\n<br>\n\n\n\n<h3>Migration orcl_user user<\/h3>\n\n\n\n<p>We need to create a migration user, named orcl_user, on the PDB1 we are going to migrate.<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,13,19,23,27,31,35,39,43,47]\">oracle@srv-source-zdm-01:~\/ [CDB01 (PDB1)] sqh\n\nSQL*Plus: Release 19.0.0.0.0 - Production on Wed Mar 15 12:14:43 2023\nVersion 19.17.0.0.0\n\nCopyright (c) 1982, 2022, Oracle.  All rights reserved.\n\n\nConnected to:\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\nVersion 19.17.0.0.0\n\nSQL&gt; show con_name\n\nCON_NAME\n------------------------------\nPDB1\n\nSQL&gt; create user orcl_user identified by manager;\n\nUser created.\n\nSQL&gt; grant create user to orcl_user;\n\nGrant succeeded.\n\nSQL&gt; grant create session to orcl_user;\n\nGrant succeeded.\n\nSQL&gt; grant resource to orcl_user;\n\nGrant succeeded.\n\nSQL&gt; grant create table to orcl_user;\n\nGrant succeeded.\n\nSQL&gt; grant unlimited tablespace to orcl_user;\n\nGrant succeeded.\n\nSQL&gt; grant create any directory to orcl_user;\n\nGrant succeeded.\n\nSQL&gt; grant dba to orcl_user;\n\nGrant succeeded.\n<\/pre>\n<br>\n\n\n\n<h3>Sample user and data<\/h3>\n\n\n\n<p>We will create a sample user, sample table with some data on the PDB that we will check in the ADB after migration. This would show that the migration has been performed.<\/p>\n\n\n\n<p>Create app_user and give appropriate permissions:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,5,9,13,17,21,25]\">SQL&gt; create user app_user identified by manager;\n\nUser created.\n\nSQL&gt; grant create user to app_user;\n\nGrant succeeded.\n\nSQL&gt; grant create session to app_user;\n\nGrant succeeded.\n\nSQL&gt; grant resource to app_user;\n\nGrant succeeded.\n\nSQL&gt; grant create table to app_user;\n\nGrant succeeded.\n\nSQL&gt; grant unlimited tablespace to app_user;\n\nGrant succeeded.\n\nSQL&gt; grant create any directory to app_user;\n\nGrant succeeded.\n<\/pre>\n<br>\n\n\n\n<p>Create sample table migration_demo:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,13,17,23,26]\">oracle@srv-source-zdm-01:~\/ [CDB01 (CDB$ROOT)] sqh\n\nSQL*Plus: Release 19.0.0.0.0 - Production on Wed Mar 15 12:27:44 2023\nVersion 19.17.0.0.0\n\nCopyright (c) 1982, 2022, Oracle.  All rights reserved.\n\n\nConnected to:\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\nVersion 19.17.0.0.0\n\nSQL&gt; connect app_user@pdb1\nEnter password:\nConnected.\n\nSQL&gt; show con_name\n\nCON_NAME\n------------------------------\nPDB1\n\nSQL&gt; show user\nUSER is \"APP_USER\"\n\nSQL&gt; create table migration_demo (demo_name varchar (60), demo_date date);\n\nTable created.\n<\/pre>\n<br>\n\n\n\n<p>Add sample data in the migration table:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,5,9]\">SQL&gt; alter session set nls_date_format='DD\/MM\/YYYY HH24:MI:SS';\n\nSession altered.\n\nSQL&gt; insert into migration_demo values ('test demo', sysdate);\n\n1 row created.\n\nSQL&gt; select * from migration_demo;\n\nDEMO_NAME\t\t\t\t\t\t     DEMO_DATE\n------------------------ -------------------\ntest demo\t\t\t\t\t\t     15\/03\/2023 12:31:49\n<\/pre>\n<br>\n\n\n\n<h3>SQL Developer connection<\/h3>\n\n\n\n<p>We will configure a connection to the PDB1 on SQL Developer.<\/p>\n\n\n\n<p>But first of all, we need to create appropriate ingress rule for port 1521. See next picture:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"634\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_ingress_rule_1521-1024x634.png\" alt=\"\" class=\"wp-image-23874\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_ingress_rule_1521-1024x634.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_ingress_rule_1521-300x186.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_ingress_rule_1521-768x475.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_ingress_rule_1521-1536x950.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/add_ingress_rule_1521.png 1807w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>And we will configure and test SQL Developer connection. See next picture:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"657\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/sql_developper_source_pdb1-1024x657.png\" alt=\"\" class=\"wp-image-23875\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/sql_developper_source_pdb1-1024x657.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/sql_developper_source_pdb1-300x193.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/sql_developper_source_pdb1-768x493.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/sql_developper_source_pdb1-1536x986.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/sql_developper_source_pdb1.png 1564w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Provision target ATP (Autonomous Transaction Processing) database<\/h2>\n\n\n\n<p>We will create the ATP from the OCI GUI.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"666\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_1-1024x666.png\" alt=\"\" class=\"wp-image-23877\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_1-1024x666.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_1-300x195.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_1-768x500.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_1-1536x1000.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_1.png 1810w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"682\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_2-1024x682.png\" alt=\"\" class=\"wp-image-23878\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_2-1024x682.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_2-300x200.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_2-768x511.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_2-1536x1022.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_2.png 1806w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"682\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_3-1024x682.png\" alt=\"\" class=\"wp-image-23879\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_3-1024x682.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_3-300x200.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_3-768x512.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_3-1536x1023.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_3.png 1810w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>And we have our ATP database created and ready.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"712\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_4-1024x712.png\" alt=\"\" class=\"wp-image-23880\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_4-1024x712.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_4-300x209.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_4-768x534.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_4-1536x1068.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Provision_ATP_4.png 1806w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Create an auth token<\/h2>\n\n\n\n<p>We will create an auth token and store it in our keepass.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"649\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ZDM_auth_token_1-1024x649.png\" alt=\"\" class=\"wp-image-23882\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ZDM_auth_token_1-1024x649.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ZDM_auth_token_1-300x190.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ZDM_auth_token_1-768x487.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ZDM_auth_token_1-1536x974.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ZDM_auth_token_1.png 1808w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"908\" height=\"294\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ZDM_auth_token_2.png\" alt=\"\" class=\"wp-image-23883\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ZDM_auth_token_2.png 908w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ZDM_auth_token_2-300x97.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ZDM_auth_token_2-768x249.png 768w\" sizes=\"auto, (max-width: 908px) 100vw, 908px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Create a bucket<\/h2>\n\n\n\n<p>We will create a bucket which will store the dump files created and used by the ZDM tool for the migration.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"559\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/create_storage_bucket_1-1024x559.png\" alt=\"\" class=\"wp-image-23884\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/create_storage_bucket_1-1024x559.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/create_storage_bucket_1-300x164.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/create_storage_bucket_1-768x419.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/create_storage_bucket_1-1536x838.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/create_storage_bucket_1.png 1809w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/create_storage_bucket_2-1024x512.png\" alt=\"\" class=\"wp-image-23885\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/create_storage_bucket_2-1024x512.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/create_storage_bucket_2-300x150.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/create_storage_bucket_2-768x384.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/create_storage_bucket_2-1536x768.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/create_storage_bucket_2.png 1796w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">ATP connection with SQL Developer<\/h2>\n\n\n\n<p>We will configure a connection from SQL Developer to our target autonomous database.<\/p>\n\n\n\n<p>Let&#8217;s go in &lt;Database Connection&gt; to download the wallet for client connection.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"712\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_1-1024x712.png\" alt=\"\" class=\"wp-image-23887\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_1-1024x712.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_1-300x209.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_1-768x534.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_1-1536x1068.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_1.png 1809w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"905\" height=\"599\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_2.png\" alt=\"\" class=\"wp-image-23888\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_2.png 905w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_2-300x199.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_2-768x508.png 768w\" sizes=\"auto, (max-width: 905px) 100vw, 905px\" \/><\/figure>\n\n\n\n<p>In SQL Developer load the wallet and test the connection. This one needs to be successful.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"657\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_3-1024x657.png\" alt=\"\" class=\"wp-image-23889\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_3-1024x657.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_3-300x192.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_3-768x493.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_3-1536x985.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_3.png 1562w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>And check the connection.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"622\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_4-1024x622.png\" alt=\"\" class=\"wp-image-23890\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_4-1024x622.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_4-300x182.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_4-768x467.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_4-1536x933.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_connection_4-2048x1244.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Create the credential in the ATP target database<\/h2>\n\n\n\n<p>We need to create the credential using the DBMS_CLOUD package. The command would be the following one:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>begin\nDBMS_CLOUD.CREATE_CREDENTIAL (\n'CredentialZDM',\n'&lt;oci_user&gt;',\n'&lt;oci_tenancy&gt;',\n'&lt;api_private_key&gt;',\n'&lt;fingerprint&gt;');\nend;\n\/<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"641\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_run_credential_1-1024x641.png\" alt=\"\" class=\"wp-image-23893\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_run_credential_1-1024x641.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_run_credential_1-300x188.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_run_credential_1-768x481.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_run_credential_1-1536x961.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_run_credential_1.png 1791w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Create sample user in the target ATP database<\/h2>\n\n\n\n<p>We will create the sample user in the target database and provide him appropriate permissions.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"451\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_sample_user_creation_1-1024x451.png\" alt=\"\" class=\"wp-image-23895\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_sample_user_creation_1-1024x451.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_sample_user_creation_1-300x132.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_sample_user_creation_1-768x338.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_sample_user_creation_1-1536x676.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/ATP_sample_user_creation_1.png 1792w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">ZDM template<\/h2>\n\n\n\n<p>We will now prepare the ZDM template for the migration. Knowing the both VM are not in the DMS we configured each \/etc\/hosts file accordingly.<\/p>\n\n\n\n<p>We also need to configure appropriate RSA key to have got connection from ZDM host to the source database:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,8,10]\">[opc@zdm-host ~]$ cd .ssh\n\n[opc@zdm-host .ssh]$ ls -l\ntotal 8\n-rw-------. 1 opc opc 798 Mar 13 14:48 authorized_keys\n-rw-r--r--. 1 opc opc 362 Mar 15 16:05 known_hosts\n\n[opc@zdm-host .ssh]$ vi ssh-key-VM-YAK-ace.key\n\n[opc@zdm-host .ssh]$ chmod 600 ssh-key-VM-YAK-ace.key\n<\/pre>\n<br>\n\n\n\n<p>And we test the connection:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[opc@zdm-host .ssh]$ ssh -i ssh-key-VM-YAK-ace.key opc@srv-source-zdm-01\nActivate the web console with: systemctl enable --now cockpit.socket\n\nLast login: Wed Mar 15 12:11:33 2023 from 91.167.48.160\n[opc@srv-source-zdm-01 ~]$\n<\/pre>\n<br>\n\n\n\n<p>We need to test if the port 1521 on the source DB can be reached from the ZDM host:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[opc@zdm-host ~]$ sudo nc -vz srv-source-zdm-01 1521\nNcat: Version 7.50 ( https:\/\/nmap.org\/ncat )\nNcat: Connected to 10.0.0.234:1521.\nNcat: 0 bytes sent, 0 bytes received in 0.01 seconds.\n<\/pre>\n<br>\n\n\n\n<p>We can now configure the template:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,5,7]\">[zdmuser@zdm-host ~]$ mkdir migration\n\n[zdmuser@zdm-host ~]$ cp -p \/u01\/app\/zdmhome\/rhp\/zdm\/template\/zdm_logical_template.rsp ~\/migration\/zdm_logical_off_to_adb.rsp\n\n[zdmuser@zdm-host migration]$ vi zdm_logical_off_to_adb.rsp\n\n[zdmuser@zdm-host migration]$ cat zdm_logical_off_to_adb.rsp\nMIGRATION_METHOD=OFFLINE_LOGICAL\nDATA_TRANSFER_MEDIUM=OSS\nTARGETDATABASE_OCID=ocid1.autonomousdatabase.oc1.eu-zurich-1.an5heljrv****************************************************lmq\nTARGETDATABASE_ADMINUSERNAME=ADMIN\nSOURCEDATABASE_ADMINUSERNAME=orcl_user\nSOURCEDATABASE_CONNECTIONDETAILS_HOST=srv-source-zdm-01\nSOURCEDATABASE_CONNECTIONDETAILS_PORT=1521\nSOURCEDATABASE_CONNECTIONDETAILS_SERVICENAME=pdb1\nOCIAUTHENTICATIONDETAILS_USERPRINCIPAL_TENANTID=ocid1.tenancy.oc1..aaaaaaaay****************************************************62na\nOCIAUTHENTICATIONDETAILS_USERPRINCIPAL_USERID=ocid1.user.oc1..aaaaaaaadl****************************************************6sjiq\nOCIAUTHENTICATIONDETAILS_USERPRINCIPAL_FINGERPRINT=2f:**:**:**:**:**:**:**:**:**:**:**:**:**:**:da\nOCIAUTHENTICATIONDETAILS_USERPRINCIPAL_PRIVATEKEYFILE=\/u01\/app\/zdmhome\/.oci\/oci_api_key.pem\nOCIAUTHENTICATIONDETAILS_REGIONID=eu-zurich-1\n\n\n#TARGETDATABASE_CONNECTIONDETAILS_BASTIONDETAILS_PORT=22\n#SOURCEDATABASE_CONNECTIONDETAILS_BASTIONDETAILS_PORT=22\n#SOURCECONTAINERDATABASE_CONNECTIONDETAILS_BASTIONDETAILS_PORT=22\nGOLDENGATESETTINGS_REPLICAT_MAPPARALLELISM=4\nGOLDENGATESETTINGS_REPLICAT_MINAPPLYPARALLELISM=4\nGOLDENGATESETTINGS_REPLICAT_MAXAPPLYPARALLELISM=50\nGOLDENGATESETTINGS_ACCEPTABLELAG=30\n\n\nDATAPUMPSETTINGS_JOBMODE=SCHEMA\nDATAPUMPSETTINGS_DELETEDUMPSINOSS=TRUE\nDATAPUMPSETTINGS_FIXINVALIDOBJECTS=TRUE\nDATAPUMPSETTINGS_DATAPUMPPARAMETERS_ENCRYPTION=ALL\nDATAPUMPSETTINGS_DATAPUMPPARAMETERS_TABLEEXISTSACTION=TRUNCATE\nDATAPUMPSETTINGS_DATAPUMPPARAMETERS_IMPORTPARALLELISMDEGREE=1\nDATAPUMPSETTINGS_DATAPUMPPARAMETERS_EXPORTPARALLELISMDEGREE=1\nDATAPUMPSETTINGS_DATAPUMPPARAMETERS_EXCLUDETYPELIST=user\nDATAPUMPSETTINGS_DATABUCKET_NAMESPACENAME=zrk0iitcogu9\nDATAPUMPSETTINGS_DATABUCKET_BUCKETNAME=ZDMBucket\nDATAPUMPSETTINGS_EXPORTDIRECTORYOBJECT_NAME=DB_EXP_DR\nDATAPUMPSETTINGS_EXPORTDIRECTORYOBJECT_PATH=\/u01\/app\/oracle\/export\nDATAPUMPSETTINGS_CREATEAUTHTOKEN=FALSE\nDATAPUMPSETTINGS_OMITENCRYPTIONCLAUSE=TRUE\nDATAPUMPSETTINGS_SECUREFILELOB=TRUE\nDATAPUMPSETTINGS_SKIPDEFAULTTRANSFORM=FALSE\nEXCLUDEOBJECTS-1=owner:ORCL_USER, objectName:.*\nEXCLUDEOBJECTS-2=owner:PDBADMIN, objectName:.*\n\n\nDUMPTRANSFERDETAILS_PARALLELCOUNT=3\nDUMPTRANSFERDETAILS_RETRYCOUNT=3\nDUMPTRANSFERDETAILS_RSYNCAVAILABLE=FALSE\nDUMPTRANSFERDETAILS_SOURCE_USEOCICLI=FALSE\nDUMPTRANSFERDETAILS_TARGET_USEOCICLI=FALSE\n<\/pre>\n<br>\n\n\n\n<h2 class=\"wp-block-heading\">Run the migration with ZDM<\/h2>\n\n\n\n<p>We are now ready to run the migration with ZDM.<\/p>\n\n\n\n<p>We will use the eval option to check the configuration before really running the migration.<\/p>\n\n\n\n<p>Let&#8217;s try it!<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[zdmuser@zdm-host ~]$ \/u01\/app\/zdmhome\/bin\/zdmcli migrate database -rsp \/home\/zdmuser\/migration\/zdm_logical_off_to_adb.rsp -sourcenode srv-source-zdm-01 -srcauth zdmauth -srcarg1 user:opc -srcarg2 identity_file:\/home\/zdmuser\/.ssh\/ssh-key-VM-YAK-ace.key -srcarg3 sudo_location:\/bin\/sudo -sourcedb CDB01 -eval\nzdm-host.sub03101110460.vcnxchange.oraclevcn.com: Audit ID: 21\nEnter source database administrative user \"orcl_user\" password:\nEnter target database administrative user \"ADMIN\" password:\nEnter Data Pump encryption password:\nOperation \"zdmcli migrate database\" scheduled with the job ID \"4\".\n<\/pre>\n<br>\n\n\n\n<p>Let&#8217;s query and check the job:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">zdmuser@zdm-host ~]$ \/u01\/app\/zdmhome\/bin\/zdmcli query job -jobid 4\nzdm-host.sub03101110460.vcnxchange.oraclevcn.com: Audit ID: 26\nJob ID: 4\nUser: zdmuser\nClient: zdm-host\nJob Type: \"EVAL\"\nScheduled job command: \"zdmcli migrate database -rsp \/home\/zdmuser\/migration\/zdm_logical_off_to_adb.rsp -sourcenode srv-source-zdm-01 -srcauth zdmauth -srcarg1 user:opc -srcarg2 identity_file:\/home\/zdmuser\/.ssh\/id_rsa -srcarg3 sudo_location:\/bin\/sudo -sourcedb CDB01 -eval\"\nScheduled job execution start time: 2023-03-15T16:59:31Z. Equivalent local time: 2023-03-15 16:59:31\nCurrent status: FAILED\nResult file path: \"\/u01\/app\/zdmbase\/chkbase\/scheduled\/job-4-2023-03-15-16:59:51.log\"\nMetrics file path: \"\/u01\/app\/zdmbase\/chkbase\/scheduled\/job-4-2023-03-15-16:59:51.json\"\nJob execution start time: 2023-03-15 16:59:51\nJob execution end time: 2023-03-15 17:00:05\nJob execution elapsed time: 13 seconds\nZDM_VALIDATE_TGT ...................... COMPLETED\nZDM_VALIDATE_SRC ...................... FAILED\nZDM_SETUP_SRC ......................... PENDING\nZDM_PRE_MIGRATION_ADVISOR ............. PENDING\nZDM_VALIDATE_DATAPUMP_SETTINGS_SRC .... PENDING\nZDM_VALIDATE_DATAPUMP_SETTINGS_TGT .... PENDING\nZDM_PREPARE_DATAPUMP_SRC .............. PENDING\nZDM_DATAPUMP_ESTIMATE_SRC ............. PENDING\nZDM_CLEANUP_SRC ....................... PENDING\n<\/pre>\n<br>\n\n\n\n<p>The first attempt failed. Let&#8217;s check the log file:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,20]\">[zdmuser@zdm-host scheduled]$ cat job-4-2023-03-15-16:59:51.log\nzdm-host: 2023-03-15T16:59:51.892Z : Starting zero downtime migrate operation ...\nzdm-host: 2023-03-15T16:59:51.899Z : Executing phase ZDM_VALIDATE_TGT\nzdm-host: 2023-03-15T16:59:51.903Z : Fetching details of Autonomous Database \"ocid1.autonomousdatabase.oc1.eu-zurich-1.an5h***************************************************ylmq\"\nzdm-host: 2023-03-15T16:59:52.779Z : Lifecycle state of OCI database : \"Available\"\nzdm-host: 2023-03-15T16:59:53.613Z : Type of OCI database : \"Autonomous Transaction Processing - Serverless\"\nzdm-host: 2023-03-15T16:59:54.449Z : Downloading credentials wallet for Autonomous Database \"ocid1.autonomousdatabase.oc1.eu-zurich-1.an5hel***************************************************wwylmq\"\nzdm-host: 2023-03-15T16:59:57.985Z : Connection string of Autonomous Database \"ocid1.autonomousdatabase.oc1.eu-zurich-1.an5hel***************************************************lmq\": \"zdmxchange_high \"\nzdm-host: 2023-03-15T16:59:58.066Z : Verifying configuration and status of target database \"g9b10f83f9c09d6_zdmxchange_high.adb.oraclecloud.com\"\nzdm-host: 2023-03-15T17:00:02.161Z : Global database name: G9B10F83F9C09D6_ZDMXCHANGE\nzdm-host: 2023-03-15T17:00:02.162Z : Target PDB name : G9B10F83F9C09D6_ZDMXCHANGE\nzdm-host: 2023-03-15T17:00:02.163Z : Database major version : 19\nzdm-host: 2023-03-15T17:00:02.165Z : obtaining database G9B10F83F9C09D6_ZDMXCHANGE tablespace configuration details...\nzdm-host: 2023-03-15T17:00:02.805Z : Execution of phase ZDM_VALIDATE_TGT completed\nzdm-host: 2023-03-15T17:00:02.838Z : Executing phase ZDM_VALIDATE_SRC\nzdm-host: 2023-03-15T17:00:02.950Z : Verifying configuration and status of source database \"pdb1\"\nzdm-host: 2023-03-15T17:00:02.951Z : source database host srv-source-zdm-01 service pdb1\nPRGZ-1141 : failed to verify configuration and status of Oracle database \"srv-source-zdm-01:1521\/pdb1\"\nPRCZ-4001 : failed to execute command \"\/bin\/sh\" using the privileged execution plugin \"zdmauth\" on nodes \"srv-source-zdm-01\" within 120 seconds\nPRCZ-2006 : Unable to establish SSH connection to node \"srv-source-zdm-01\" to execute command \"\/bin\/sh -c \"if [ -f \/u01\/app\/oracle\/product\/19_17_221018_JVM_v0\/bin\/oracle ]; then echo exists; fi\"\"\nNo more authentication methods available\n<\/pre>\n<br>\n\n\n\n<p>As we can understand, RSA key is missing for ZDM user. Let&#8217;s do the needful:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,3,9,11]\">[opc@zdm-host .ssh]$ sudo cp -p ssh-key-VM-YAK-ace.key \/home\/zdmuser\/.ssh\n\n[opc@zdm-host .ssh]$ sudo ls -l \/home\/zdmuser\/.ssh\ntotal 12\n-rw-------. 1 zdmuser zdm 1679 Mar 13 14:46 id_rsa\n-rw-r--r--. 1 zdmuser zdm  398 Mar 13 14:46 id_rsa.pub\n-rw-------. 1 opc     opc 3247 Mar 15 16:07 ssh-key-VM-YAK-ace.key\n\n[opc@zdm-host .ssh]$ sudo chown zdmuser:zdm \/home\/zdmuser\/.ssh\/ssh-key-VM-YAK-ace.key\n\n[opc@zdm-host .ssh]$ sudo ls -l \/home\/zdmuser\/.ssh\ntotal 12\n-rw-------. 1 zdmuser zdm 1679 Mar 13 14:46 id_rsa\n-rw-r--r--. 1 zdmuser zdm  398 Mar 13 14:46 id_rsa.pub\n-rw-------. 1 zdmuser zdm 3247 Mar 15 16:07 ssh-key-VM-YAK-ace.key\n<\/pre>\n<br>\n\n\n\n<p>And do a new try:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[zdmuser@zdm-host ~]$ \/u01\/app\/zdmhome\/bin\/zdmcli migrate database -rsp \/home\/zdmuser\/migration\/zdm_logical_off_to_adb.rsp -sourcenode srv-source-zdm-01 -srcauth zdmauth -srcarg1 user:opc -srcarg2 identity_file:\/home\/zdmuser\/.ssh\/ssh-key-VM-YAK-ace.key -srcarg3 sudo_location:\/bin\/sudo -sourcedb CDB01 -eval\nzdm-host.sub03101110460.vcnxchange.oraclevcn.com: Audit ID: 27\nEnter source database administrative user \"orcl_user\" password:\nEnter target database administrative user \"ADMIN\" password:\nEnter Data Pump encryption password:\nOperation \"zdmcli migrate database\" scheduled with the job ID \"5\".\n<\/pre>\n<br>\n\n\n\n<p>We will check the new eval job:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[zdmuser@zdm-host ~]$ \/u01\/app\/zdmhome\/bin\/zdmcli query job -jobid 5\nzdm-host.sub03101110460.vcnxchange.oraclevcn.com: Audit ID: 31\nJob ID: 5\nUser: zdmuser\nClient: zdm-host\nJob Type: \"EVAL\"\nScheduled job command: \"zdmcli migrate database -rsp \/home\/zdmuser\/migration\/zdm_logical_off_to_adb.rsp -sourcenode srv-source-zdm-01 -srcauth zdmauth -srcarg1 user:opc -srcarg2 identity_file:\/home\/zdmuser\/.ssh\/ssh-key-VM-YAK-ace.key -srcarg3 sudo_location:\/bin\/sudo -sourcedb CDB01 -eval\"\nScheduled job execution start time: 2023-03-15T17:24:11Z. Equivalent local time: 2023-03-15 17:24:11\nCurrent status: FAILED\nResult file path: \"\/u01\/app\/zdmbase\/chkbase\/scheduled\/job-5-2023-03-15-17:24:21.log\"\nMetrics file path: \"\/u01\/app\/zdmbase\/chkbase\/scheduled\/job-5-2023-03-15-17:24:21.json\"\nExcluded objects file path: \"\/u01\/app\/zdmbase\/chkbase\/scheduled\/job-5-filtered-objects-2023-03-15T17:24:39.619.json\"\nJob execution start time: 2023-03-15 17:24:21\nJob execution end time: 2023-03-15 17:25:21\nJob execution elapsed time: 59 seconds\nZDM_VALIDATE_TGT ...................... COMPLETED\nZDM_VALIDATE_SRC ...................... COMPLETED\nZDM_SETUP_SRC ......................... COMPLETED\nZDM_PRE_MIGRATION_ADVISOR ............. COMPLETED\nZDM_VALIDATE_DATAPUMP_SETTINGS_SRC .... FAILED\nZDM_VALIDATE_DATAPUMP_SETTINGS_TGT .... PENDING\nZDM_PREPARE_DATAPUMP_SRC .............. PENDING\nZDM_DATAPUMP_ESTIMATE_SRC ............. PENDING\nZDM_CLEANUP_SRC ....................... PENDING\n<\/pre>\n<br>\n\n\n\n<p>Which is now failing on DATAPUMP SETTINGS check.<\/p>\n\n\n\n<p>We will check the log file:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,4,11,12,13,14]\">[zdmuser@zdm-host scheduled]$ pwd\n\/u01\/app\/zdmbase\/chkbase\/scheduled\n\n[zdmuser@zdm-host scheduled]$ cat job-5-errormsg.json\n[ {\n  \"errorMsg\" : \"failed to validate specified database directory object path \\\"\/u01\/app\/oracle\/export\\\"\",\n  \"errId\" : \"PRGZ-1211 \",\n  \"cause\" : \" An attempt to migrate a database was rejected because the validation of specified directory object to be used for storing Oracle Data Pump dump files failed.\",\n  \"action\" : \" Either specify a valid path required to create a new directory object or specify an existing directory object, and then resubmit the job.\"\n}, {\n  \"errorMsg\" : \"failed to operate in path \\\"\/u01\/app\/oracle\/export\\\" on node srv-source-zdm-01\",\n  \"errId\" : \"PRGZ-1212 \",\n  \"cause\" : \" An attempt to migrate a database failed because the operation on specified directory path failed. The accompanying messages provided detailed failure information.\",\n  \"action\" : \" Review the accompanying messages, resolve the indicated problems, and then retry the operation.\"\n} ]\n<\/pre>\n<br>\n\n\n\n<p>The new failure is due to missing \/u01\/app\/oracle\/export folder. Let&#8217;s create it:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">oracle@srv-source-zdm-01:~\/ [rdbms19_17_221018_JVM_v0] mkdir \/u01\/app\/oracle\/export\n<\/pre>\n<br>\n\n\n\n<p>Let&#8217;s try to evaluate the migration job a third time:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[zdmuser@zdm-host ~]$ \/u01\/app\/zdmhome\/bin\/zdmcli migrate database -rsp \/home\/zdmuser\/migration\/zdm_logical_off_to_adb.rsp -sourcenode srv-source-zdm-01 -srcauth zdmauth -srcarg1 user:opc -srcarg2 identity_file:\/home\/zdmuser\/.ssh\/ssh-key-VM-YAK-ace.key -srcarg3 sudo_location:\/bin\/sudo -sourcedb CDB01 -eval\nzdm-host.sub03101110460.vcnxchange.oraclevcn.com: Audit ID: 32\nEnter source database administrative user \"orcl_user\" password:\nEnter target database administrative user \"ADMIN\" password:\nEnter Data Pump encryption password:\nOperation \"zdmcli migrate database\" scheduled with the job ID \"6\".\n<\/pre>\n<br>\n\n\n\n<p>We will query the new job:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[zdmuser@zdm-host ~]$ \/u01\/app\/zdmhome\/bin\/zdmcli query job -jobid 6\nzdm-host.sub03101110460.vcnxchange.oraclevcn.com: Audit ID: 35\nJob ID: 6\nUser: zdmuser\nClient: zdm-host\nJob Type: \"EVAL\"\nScheduled job command: \"zdmcli migrate database -rsp \/home\/zdmuser\/migration\/zdm_logical_off_to_adb.rsp -sourcenode srv-source-zdm-01 -srcauth zdmauth -srcarg1 user:opc -srcarg2 identity_file:\/home\/zdmuser\/.ssh\/ssh-key-VM-YAK-ace.key -srcarg3 sudo_location:\/bin\/sudo -sourcedb CDB01 -eval\"\nScheduled job execution start time: 2023-03-15T17:35:18Z. Equivalent local time: 2023-03-15 17:35:18\nCurrent status: SUCCEEDED\nResult file path: \"\/u01\/app\/zdmbase\/chkbase\/scheduled\/job-6-2023-03-15-17:35:21.log\"\nMetrics file path: \"\/u01\/app\/zdmbase\/chkbase\/scheduled\/job-6-2023-03-15-17:35:21.json\"\nExcluded objects file path: \"\/u01\/app\/zdmbase\/chkbase\/scheduled\/job-6-filtered-objects-2023-03-15T17:35:40.384.json\"\nJob execution start time: 2023-03-15 17:35:21\nJob execution end time: 2023-03-15 17:37:17\nJob execution elapsed time: 1 minutes 55 seconds\nZDM_VALIDATE_TGT ...................... COMPLETED\nZDM_VALIDATE_SRC ...................... COMPLETED\nZDM_SETUP_SRC ......................... COMPLETED\nZDM_PRE_MIGRATION_ADVISOR ............. COMPLETED\nZDM_VALIDATE_DATAPUMP_SETTINGS_SRC .... COMPLETED\nZDM_VALIDATE_DATAPUMP_SETTINGS_TGT .... COMPLETED\nZDM_PREPARE_DATAPUMP_SRC .............. COMPLETED\nZDM_DATAPUMP_ESTIMATE_SRC ............. COMPLETED\nZDM_CLEANUP_SRC ....................... COMPLETED\n<\/pre>\n<br>\n\n\n\n<p>This one is now all good. We are ready to migrate!<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[zdmuser@zdm-host ~]$ \/u01\/app\/zdmhome\/bin\/zdmcli migrate database -rsp \/home\/zdmuser\/migration\/zdm_logical_off_to_adb.rsp -sourcenode srv-source-zdm-01 -srcauth zdmauth -srcarg1 user:opc -srcarg2 identity_file:\/home\/zdmuser\/.ssh\/ssh-key-VM-YAK-ace.key -srcarg3 sudo_location:\/bin\/sudo -sourcedb CDB01\nzdm-host.sub03101110460.vcnxchange.oraclevcn.com: Audit ID: 36\nEnter source database administrative user \"orcl_user\" password:\nEnter target database administrative user \"ADMIN\" password:\nEnter Data Pump encryption password:\nOperation \"zdmcli migrate database\" scheduled with the job ID \"7\".\n<\/pre>\n<br>\n\n\n\n<p>Let&#8217;s check the migration job output:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1]\">[zdmuser@zdm-host ~]$ \/u01\/app\/zdmhome\/bin\/zdmcli query job -jobid 7\nzdm-host.sub03101110460.vcnxchange.oraclevcn.com: Audit ID: 39\nJob ID: 7\nUser: zdmuser\nClient: zdm-host\nJob Type: \"MIGRATE\"\nScheduled job command: \"zdmcli migrate database -rsp \/home\/zdmuser\/migration\/zdm_logical_off_to_adb.rsp -sourcenode srv-source-zdm-01 -srcauth zdmauth -srcarg1 user:opc -srcarg2 identity_file:\/home\/zdmuser\/.ssh\/ssh-key-VM-YAK-ace.key -srcarg3 sudo_location:\/bin\/sudo -sourcedb CDB01\"\nScheduled job execution start time: 2023-03-15T17:51:43Z. Equivalent local time: 2023-03-15 17:51:43\nCurrent status: SUCCEEDED\nResult file path: \"\/u01\/app\/zdmbase\/chkbase\/scheduled\/job-7-2023-03-15-17:51:51.log\"\nMetrics file path: \"\/u01\/app\/zdmbase\/chkbase\/scheduled\/job-7-2023-03-15-17:51:51.json\"\nExcluded objects file path: \"\/u01\/app\/zdmbase\/chkbase\/scheduled\/job-7-filtered-objects-2023-03-15T17:52:13.614.json\"\nJob execution start time: 2023-03-15 17:51:51\nJob execution end time: 2023-03-15 17:56:08\nJob execution elapsed time: 4 minutes 16 seconds\nZDM_VALIDATE_TGT ...................... COMPLETED\nZDM_VALIDATE_SRC ...................... COMPLETED\nZDM_SETUP_SRC ......................... COMPLETED\nZDM_PRE_MIGRATION_ADVISOR ............. COMPLETED\nZDM_VALIDATE_DATAPUMP_SETTINGS_SRC .... COMPLETED\nZDM_VALIDATE_DATAPUMP_SETTINGS_TGT .... COMPLETED\nZDM_PREPARE_DATAPUMP_SRC .............. COMPLETED\nZDM_DATAPUMP_ESTIMATE_SRC ............. COMPLETED\nZDM_PREPARE_DATAPUMP_TGT .............. COMPLETED\nZDM_DATAPUMP_EXPORT_SRC ............... COMPLETED\nZDM_UPLOAD_DUMPS_SRC .................. COMPLETED\nZDM_DATAPUMP_IMPORT_TGT ............... COMPLETED\nZDM_POST_DATAPUMP_SRC ................. COMPLETED\nZDM_POST_DATAPUMP_TGT ................. COMPLETED\nZDM_POST_ACTIONS ...................... COMPLETED\nZDM_CLEANUP_SRC ....................... COMPLETED\n[zdmuser@zdm-host ~]$\n<\/pre>\n<br>\n\n\n\n<p>The migration has been executed successfully. Let&#8217;s check the log file. For a successful migration the jobs should end with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Execution of phase ZDM_CLEANUP_SRC completed<\/code><\/pre>\n\n\n\n<p>Here is the end of the log file:<\/p>\n\n\n\n<pre class=\"brush: sql; gutter: true; first-line: 1; highlight: [1,4,14]\">[zdmuser@zdm-host scheduled]$ pwd\n\/u01\/app\/zdmbase\/chkbase\/scheduled\n\n[zdmuser@zdm-host scheduled]$ cat job-7-2023-03-15-17:51:51.log\nzdm-host: 2023-03-15T17:51:52.056Z : Starting zero downtime migrate operation ...\nzdm-host: 2023-03-15T17:51:52.063Z : Executing phase ZDM_VALIDATE_TGT\n...\n...\n...\nzdm-host: 2023-03-15T17:56:06.876Z : Executing phase ZDM_POST_ACTIONS\nzdm-host: 2023-03-15T17:56:06.887Z : Execution of phase ZDM_POST_ACTIONS completed\nzdm-host: 2023-03-15T17:56:06.906Z : Executing phase ZDM_CLEANUP_SRC\nzdm-host: 2023-03-15T17:56:07.137Z : Cleaning up ZDM on the source node srv-source-zdm-01 ...\nzdm-host: 2023-03-15T17:56:08.093Z : Execution of phase ZDM_CLEANUP_SRC completed\n<\/pre>\n<br>\n\n\n\n<p>And we can see that we have our data migrated in the migration_demo table in the target ATP.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Check_ATP_autonomous_post_migration-1024x447.png\" alt=\"\" class=\"wp-image-23903\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Check_ATP_autonomous_post_migration-1024x447.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Check_ATP_autonomous_post_migration-300x131.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Check_ATP_autonomous_post_migration-768x336.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Check_ATP_autonomous_post_migration-1536x671.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/Check_ATP_autonomous_post_migration-2048x895.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p>As we could see we could easily migrate a database from a VM in OCI to an ATP database using ZDM tool doing an offline logical database migration using a backup destination. I will, in some next blogs, test and demonstrate a physical online migration and a logical online migration with DB links.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have recently written a blog introducing the Oracle ZDM (Zero Downtime Migration) tool : https:\/\/www.dbi-services.com\/blog\/zero-downtime-migration-zdm-to-oracle-cloud-infrastructure-oci\/ I have also done some tests performing an offline logical database migration from a database running on an OCI VM (this would simulate an on-premises database) to an ADB (Autonomous DataBase) using a backup location in OCI. I would [&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":[955,59],"tags":[2396,2562,1375,2888,96,1574,1575],"type_dbi":[],"class_list":["post-23828","post","type-post","status-publish","format-standard","hentry","category-cloud","category-oracle","tag-autonomous-db","tag-migration-2","tag-oci","tag-offline-logical-database-migration","tag-oracle","tag-zdm","tag-zero-downtime-migration"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Oracle Zero Downtime Migration : Offline logical database migration from on-premises to Autonomous DB\u00a0 - 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\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle Zero Downtime Migration : Offline logical database migration from on-premises to Autonomous DB\u00a0\" \/>\n<meta property=\"og:description\" content=\"I have recently written a blog introducing the Oracle ZDM (Zero Downtime Migration) tool : https:\/\/www.dbi-services.com\/blog\/zero-downtime-migration-zdm-to-oracle-cloud-infrastructure-oci\/ I have also done some tests performing an offline logical database migration from a database running on an OCI VM (this would simulate an on-premises database) to an ADB (Autonomous DataBase) using a backup location in OCI. I would [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-23T00:25:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-04-03T08:04:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022.png\" \/>\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=\"28 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\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/\"},\"author\":{\"name\":\"Marc Wagner\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/225d9884b8467ead9a872823acb14628\"},\"headline\":\"Oracle Zero Downtime Migration : Offline logical database migration from on-premises to Autonomous DB\u00a0\",\"datePublished\":\"2023-03-23T00:25:51+00:00\",\"dateModified\":\"2023-04-03T08:04:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/\"},\"wordCount\":1475,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022.png\",\"keywords\":[\"autonomous db\",\"migration\",\"OCI\",\"offline logical database migration\",\"Oracle\",\"zdm\",\"zero downtime migration\"],\"articleSection\":[\"Cloud\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/\",\"name\":\"Oracle Zero Downtime Migration : Offline logical database migration from on-premises to Autonomous DB\u00a0 - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022.png\",\"datePublished\":\"2023-03-23T00:25:51+00:00\",\"dateModified\":\"2023-04-03T08:04:40+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/225d9884b8467ead9a872823acb14628\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#primaryimage\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022.png\",\"contentUrl\":\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Oracle Zero Downtime Migration : Offline logical database migration from on-premises to Autonomous DB\u00a0\"}]},{\"@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":"Oracle Zero Downtime Migration : Offline logical database migration from on-premises to Autonomous DB\u00a0 - 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\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/","og_locale":"en_US","og_type":"article","og_title":"Oracle Zero Downtime Migration : Offline logical database migration from on-premises to Autonomous DB\u00a0","og_description":"I have recently written a blog introducing the Oracle ZDM (Zero Downtime Migration) tool : https:\/\/www.dbi-services.com\/blog\/zero-downtime-migration-zdm-to-oracle-cloud-infrastructure-oci\/ I have also done some tests performing an offline logical database migration from a database running on an OCI VM (this would simulate an on-premises database) to an ADB (Autonomous DataBase) using a backup location in OCI. I would [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/","og_site_name":"dbi Blog","article_published_time":"2023-03-23T00:25:51+00:00","article_modified_time":"2023-04-03T08:04:40+00:00","og_image":[{"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022.png","type":"","width":"","height":""}],"author":"Marc Wagner","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Marc Wagner","Est. reading time":"28 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/"},"author":{"name":"Marc Wagner","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/225d9884b8467ead9a872823acb14628"},"headline":"Oracle Zero Downtime Migration : Offline logical database migration from on-premises to Autonomous DB\u00a0","datePublished":"2023-03-23T00:25:51+00:00","dateModified":"2023-04-03T08:04:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/"},"wordCount":1475,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022.png","keywords":["autonomous db","migration","OCI","offline logical database migration","Oracle","zdm","zero downtime migration"],"articleSection":["Cloud","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/","url":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/","name":"Oracle Zero Downtime Migration : Offline logical database migration from on-premises to Autonomous DB\u00a0 - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022.png","datePublished":"2023-03-23T00:25:51+00:00","dateModified":"2023-04-03T08:04:40+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/225d9884b8467ead9a872823acb14628"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/03\/YAK-logotype-RVB-2022.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-zero-downtime-migration-offline-logical-database-migration-from-on-premises-to-autonomous-db\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Oracle Zero Downtime Migration : Offline logical database migration from on-premises to Autonomous DB\u00a0"}]},{"@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\/23828","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=23828"}],"version-history":[{"count":57,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/23828\/revisions"}],"predecessor-version":[{"id":24271,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/23828\/revisions\/24271"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=23828"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=23828"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=23828"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=23828"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}