{"id":626,"date":"2019-11-10T21:46:46","date_gmt":"2019-11-11T00:46:46","guid":{"rendered":"http:\/\/www.fernandosimon.com\/blog\/?p=626"},"modified":"2020-07-19T19:15:48","modified_gmt":"2020-07-19T22:15:48","slug":"zdlra-multi-site-protection-zero-rpo-for-primary-and-standby","status":"publish","type":"post","link":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/","title":{"rendered":"ZDLRA, Multi-site protection &#8211; ZERO RPO for Primary and Standby"},"content":{"rendered":"<p style=\"text-align: justify;\">ZDLRA can be used from a small single database environment to big environments where you need protection in more than one site at the same time. At every level, you can use different features of ZDLRA to provide desirable protection. Here I will show how to reach zero RPO for both primary and standby databases. All the steps, doc, and tech parts are covered.<\/p>\n<p style=\"text-align: justify;\">You can check the examples the reference for every scenario int these two papers from the Oracle MAA team: <a href=\"https:\/\/www.oracle.com\/a\/tech\/docs\/maa-overview-onpremise-2019.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">MAA Overview On-Premises<\/a> and <a href=\"https:\/\/www.oracle.com\/technetwork\/database\/availability\/maa-reference-architectures-2244929.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Oracle MAA Reference Architectures<\/a>. They provide good information on how to prepare to reduce RPO and improve RTO. In resume, the focus is the same, reduce the downtime and data loss in case of a catastrophe (zero RPO, and zero RPO).<\/p>\n<h2 style=\"text-align: justify;\">Multi-site protection<\/h2>\n<p style=\"text-align: justify;\">If you looked both papers before, you saw that to provide good protection is desirable to have an additional site to, at least, send the backups. And if you go higher, for GOLD and PLATINUM environments, you start to have multiple sites synced with data guard. These Critical\/Mission-critical environments need to be protected for every kind of catastrophic failure, from disk until complete site outage (some need to follow specific law\u2019s requirements, bank as an example).<\/p>\n<p style=\"text-align: justify;\">And the focus of this post is these big environments. I will show you how to use ZDLRA to protect both sites, reaching zero RPO even for standby databases. And doing that, you can survive for a catastrophic outage (like entire datacenter failure) and still have zero RPO. <strong>Going further, you can even have zero RPO if you lose completely on site when using real-time redo for ZDLRA, and this is not written in the docs by the way.<\/strong><\/p>\n<p style=\"text-align: justify;\"><!--more Click here to read more...--><\/p>\n<p style=\"text-align: justify;\">Some features I already wrote about that in the previous posts. Already wrote about <a href=\"http:\/\/www.fernandosimon.com\/blog\/understanding-zdlra\/\" target=\"_blank\" rel=\"noopener noreferrer\">ZDLRA features<\/a>, <a href=\"http:\/\/www.fernandosimon.com\/blog\/how-to-use-zdlra-and-enroll-a-database\/\" target=\"_blank\" rel=\"noopener noreferrer\">how to enroll a database<\/a>, and <a href=\"http:\/\/www.fernandosimon.com\/blog\/zdlra-real-time-redo\/\" target=\"_blank\" rel=\"noopener noreferrer\">how to reach zero RPO<\/a> for database protection. All of these I will use here, to protect the bigger environments it is used incremental forever strategy for backup and real-time redo to protect primary and standby databases to reach zero RPO.<\/p>\n<p style=\"text-align: justify;\">MAA team already wrote about how to do that at <a href=\"https:\/\/www.oracle.com\/technetwork\/database\/availability\/recovery-appliance-data-guard-2767512.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Deploying the Zero Data Loss Recovery Appliance in a Data Guard Configuration<\/a>, but frankly, it is hard to understand this doc. And here in this post, I will try to provide a better example and how to reach RPO zero for both sites.<\/p>\n<h2 style=\"text-align: justify;\">Multiple ZDLRA\u2019s<\/h2>\n<p style=\"text-align: justify;\">The way that we will use ZDLRA, in this case, is different from the replication feature that exists for ZDLRA. Here, we have two ZDLRA, one for each site. The environment in this case is:<\/p>\n<ul style=\"text-align: justify;\">\n<li>ORCL19: RAC primary database.<\/li>\n<li>ORCL19S: RAC standby database.<\/li>\n<li>ZDLRAS1: ZDLRA that protect the primary site.<\/li>\n<li>ZDLRAS2: ZDLRA that protects the standby site.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">And the target will be:<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-632 size-full\" src=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png\" alt=\"\" width=\"755\" height=\"177\" srcset=\"https:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png 755w, https:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1-300x70.png 300w, https:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1-624x146.png 624w\" sizes=\"auto, (max-width: 755px) 100vw, 755px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">As you can see above, each ZDLRA protects your own site, and the replication between sites is done by DG. The DG configuration it is not part of this post, but the output (and order) for all commands how I created the RAC + RAC DG you can check here &#8211; <a href=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/Steps-RAC-RAC-DG-Creation.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Steps-RAC-RAC-DG-Creation<\/a>. If you have some doubts about it, I can explain if needed.<\/p>\n<h2 style=\"text-align: justify;\">Index<\/h2>\n<p style=\"text-align: justify;\">This post is big because of the size and number of outputs of commands. So, a little index for the key topics (if you want to jump something):<\/p>\n<ul style=\"text-align: justify;\">\n<li><a href=\"#zdlraconfig\">ZDLRA Configuration for Databases<\/a><\/li>\n<li><a href=\"#registrydatabase\">Registry Database<\/a><\/li>\n<li><a href=\"#zerorpo\">Zero RPO for both sites<\/a>\n<ul>\n<li><a href=\"#manualconf\">Manual Configuration<\/a><\/li>\n<li><a href=\"#brokerconf\">Broker Configuration<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#multiprotection\">Multiple levels of protection<\/a><\/li>\n<\/ul>\n<h2 id=\"zdlraconfig\" style=\"text-align: justify;\">ZDLRA Configuration \u2013 Protecting and Enrolling Databases<\/h2>\n<h3 style=\"text-align: justify;\">VPC<\/h3>\n<p style=\"text-align: justify;\">If you already have a VPC user created for your ZDLRA and want to use an existing one, you can skip this step. Just remember that the same user needs to exist in both ZDLRA\u2019s. This is more critical if you are intending to use real-time redo and reach zero RPO.<\/p>\n<p style=\"text-align: justify;\">So, if needed, create the same VPC user in both ZDLRA\u2019s:<\/p>\n<p style=\"text-align: justify;\">At ZDLRAS1:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[root@zdlras1n1 ~]# \/opt\/oracle.RecoveryAppliance\/bin\/racli add vpc_user --user_name=vpczdlra\r\n[vpczdlra] New Password:\r\nSat Nov  2 19:43:59 2019: Start: Add vpc user vpczdlra.\r\nSat Nov  2 19:44:00 2019:        Add vpc user vpczdlra successfully.\r\nSat Nov  2 19:44:00 2019: End:   Add vpc user vpczdlra.\r\n[root@zdlras1n1 ~]#<\/pre>\n<p style=\"text-align: justify;\">At ZDLRAS2<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[root@zdlras2n1 ~]# \/opt\/oracle.RecoveryAppliance\/bin\/racli add vpc_user --user_name=vpczdlra\r\n[vpczdlra] New Password:\r\nSat Nov  2 19:43:41 2019: Start: Add vpc user vpczdlra.\r\nSat Nov  2 19:43:42 2019:        Add vpc user vpczdlra successfully.\r\nSat Nov  2 19:43:42 2019: End:   Add vpc user vpczdlra.\r\n[root@zdlras2n1 ~]#<\/pre>\n<h3 style=\"text-align: justify;\">Backup Policy<\/h3>\n<p style=\"text-align: justify;\">It is not needed to have the same policy in each ZDLRA and it is possible to enroll the database using different policies since they (ZDLRA\u2019s) work separately. Here I used the same policy in both sites (but with different recovery window goals).<\/p>\n<p style=\"text-align: justify;\">At ZDLRAS1:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@zdlras1n1 ~]$ sqlplus rasys\/change^Me2\r\n\r\nSQL*Plus: Release 19.0.0.0.0 - Production on Sat Nov 2 22:21:18 2019\r\nVersion 19.3.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\r\n\r\nLast Successful login time: Sat Nov 02 2019 11:20:06 +01:00\r\n\r\nConnected to:\r\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.3.0.0.0\r\n\r\nSQL&gt; BEGIN\r\n  2  DBMS_RA.CREATE_PROTECTION_POLICY(\r\n  3      protection_policy_name =&gt; 'ZDLRA'\r\n  4      , description =&gt; 'Policy ZDLRA S1'\r\n  5      , storage_location_name =&gt; 'DELTA'\r\n  6      , recovery_window_goal =&gt; INTERVAL '5' DAY\r\n  7      , max_retention_window =&gt; INTERVAL '10' DAY\r\n  8      , guaranteed_copy =&gt; 'NO'\r\n  9      , allow_backup_deletion =&gt; 'YES'\r\n 10  );\r\n 11  END;\r\n 12  \/\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt;<\/pre>\n<p style=\"text-align: justify;\">At ZDLRAS2:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@zdlras2n1 ~]$ sqlplus rasys\/change^Me2\r\n\r\nSQL*Plus: Release 19.0.0.0.0 - Production on Sat Nov 2 22:22:13 2019\r\nVersion 19.3.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\r\n\r\nLast Successful login time: Sat Nov 02 2019 11:21:04 +01:00\r\n\r\nConnected to:\r\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.3.0.0.0\r\n\r\nSQL&gt; BEGIN\r\n  2  DBMS_RA.CREATE_PROTECTION_POLICY(\r\n  3      protection_policy_name =&gt; 'ZDLRA'\r\n  4      , description =&gt; 'Policy ZDLRA S2'\r\n  5      , storage_location_name =&gt; 'DELTA'\r\n  6      , recovery_window_goal =&gt; INTERVAL '7' DAY\r\n  7      , max_retention_window =&gt; INTERVAL '14' DAY\r\n  8      , guaranteed_copy =&gt; 'NO'\r\n  9      , allow_backup_deletion =&gt; 'YES'\r\n 10  );\r\n 11  END;\r\n 12  \/\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt;<\/pre>\n<h3 style=\"text-align: justify;\">Grant DB at ZDLRA<\/h3>\n<p style=\"text-align: justify;\">Here we have the <strong>first key point<\/strong>, and it is related to the way that database is registered database inside ZDLRA. It follows the traditional way, using the ADD_DB, GRANT_DB_ACCESS, and using DB_UNIQUE_NAME as identification.<\/p>\n<p style=\"text-align: justify;\">The point here is that for dataguard the DB_UNIQUE_NAME is different for each database, but one detail it is that ZDLRA internally links DBID of the database with the unique name. <strong>So, it is needed and required, that for ZDLRA who will protect the standby site that the add and registration use DB_UNIQUE_NAME from the primary<\/strong>. If you do not do that, the ZDLRA will understand that the standby database it is a completely different database (and will report, <em>RMAN-03009: failure of resync command on default channel<\/em>, <em>ORA-00001: unique constraint (RASYS.ODB_P) violated<\/em>, and <em>ORA-04088: error during execution of trigger &#8216;RASYS.NODE_INSERT_UPDATE&#8217;<\/em>).<\/p>\n<p style=\"text-align: justify;\">And another common error, if you try to register the standby database (instead of primary database) is <em>RMAN-01005: Mounted control file type must be CURRENT to register the database<\/em>. This occurs because some registrations and checks done by rman and database controlfile need to be at current one.<\/p>\n<p style=\"text-align: justify;\">At ZDLRAS1:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@zdlras1n1 ~]$ sqlplus rasys\/change^Me2\r\n\r\nSQL*Plus: Release 19.0.0.0.0 - Production on Sun Nov 3 14:11:37 2019\r\nVersion 19.3.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\r\n\r\nLast Successful login time: Sun Nov 03 2019 11:16:12 +01:00\r\n\r\nConnected to:\r\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.3.0.0.0\r\n\r\nSQL&gt; BEGIN\r\n  2  DBMS_RA.ADD_DB(\r\n  3        db_unique_name =&gt; 'ORCL19'\r\n  4        , protection_policy_name =&gt; 'ZDLRA'\r\n  5        , reserved_space =&gt; '5G'\r\n  6  );\r\n  7  END;\r\n  8  \/\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt;\r\nSQL&gt; BEGIN\r\n  2  DBMS_RA.GRANT_DB_ACCESS (\r\n  3        db_unique_name =&gt; 'ORCL19'\r\n  4        , username =&gt; 'VPCZDLRA'\r\n  5  );\r\n  6  END;\r\n  7  \/\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt;<\/pre>\n<p style=\"text-align: justify;\">At ZDLRAS2:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@zdlras2n1 ~]$ sqlplus rasys\/change^Me2\r\n\r\nSQL*Plus: Release 19.0.0.0.0 - Production on Sun Nov 3 16:14:06 2019\r\nVersion 19.3.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\r\n\r\nLast Successful login time: Sun Nov 03 2019 11:16:55 +01:00\r\n\r\nConnected to:\r\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.3.0.0.0\r\n\r\nSQL&gt; BEGIN\r\n  2  DBMS_RA.ADD_DB(\r\n  3        db_unique_name =&gt; 'ORCL19'\r\n  4        , protection_policy_name =&gt; 'ZDLRA'\r\n  5        , reserved_space =&gt; '5G'\r\n  6  );\r\n  7  END;\r\n  8  \/\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt; BEGIN\r\n  2  DBMS_RA.GRANT_DB_ACCESS (\r\n  3        db_unique_name =&gt; 'ORCL19'\r\n  4        , username =&gt; 'VPCZDLRA'\r\n  5  );\r\n  6  END;\r\n  7  \/\r\n\r\nPL\/SQL procedure successfully completed.\r\n\r\nSQL&gt;<\/pre>\n<p style=\"text-align: justify;\">Look above that ADD_DB and GRANT_DB_ACCESS at ZDLRAS2 used the DB_UNIQUE_NAME as ORCL19 (that it is the name for primary).<\/p>\n<h3 id=\"registrydatabase\" style=\"text-align: justify;\">Registry database<\/h3>\n<h4 style=\"text-align: justify;\">At Primary &#8211; ORLC19<\/h4>\n<p style=\"text-align: justify;\">At this point, it is possible to register and backup the primary database with ZDLRAS1. The steps are the same that I described at my post on <a href=\"http:\/\/www.fernandosimon.com\/blog\/how-to-use-zdlra-and-enroll-a-database\/\" target=\"_blank\" rel=\"noopener noreferrer\">how to enroll a database at ZDLRA<\/a>. The steps are, in order:<\/p>\n<ol style=\"text-align: justify;\">\n<li style=\"text-align: justify;\">Install ZDLRA library.<\/li>\n<li style=\"text-align: justify;\">Create a Wallet.<\/li>\n<li style=\"text-align: justify;\">Configure\/Test tns entry to ZDLRA.<\/li>\n<li style=\"text-align: justify;\">Adjust sqlnet.ora file (this is needed because of the real-time redo).<\/li>\n<\/ol>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19p ~]$ cd \/tmp\/\r\n[oracle@orcl19p tmp]$ unzip ra_linux64.zip\r\nArchive:  ra_linux64.zip\r\n  inflating: libra.so\r\n  inflating: metadata.xml\r\n[oracle@orcl19p tmp]$\r\n[oracle@orcl19p tmp]$ cp .\/libra.so \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/lib\/libra.so\r\n[oracle@orcl19p tmp]$\r\n[oracle@orcl19p tmp]$ cd $ORACLE_HOME\/dbs\r\n[oracle@orcl19p dbs]$\r\n[oracle@orcl19p dbs]$ mkstore -wrl \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet -createALO\r\nOracle Secret Store Tool Release 19.0.0.0.0 - Production\r\nVersion 19.4.0.0.0\r\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\r\n\r\n[oracle@orcl19p dbs]$\r\n[oracle@orcl19p dbs]$ mkstore -wrl \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet -createCredential zdlras1-scan:1521\/zdlras1:VPCZDLRA vpczdlra oracle\r\nOracle Secret Store Tool Release 19.0.0.0.0 - Production\r\nVersion 19.4.0.0.0\r\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\r\n\r\n[oracle@orcl19p dbs]$\r\n[oracle@orcl19p dbs]$ mkstore -wrl \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet -listCredential\r\nOracle Secret Store Tool Release 19.0.0.0.0 - Production\r\nVersion 19.4.0.0.0\r\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\r\n\r\nList credential (index: connect_string username)\r\n1: zdlras1-scan:1521\/zdlras1:VPCZDLRA vpczdlra\r\n[oracle@orcl19p dbs]$\r\n[oracle@orcl19p dbs]$ vi $ORACLE_HOME\/dbs\/raORCL191.ora\r\n[oracle@orcl19p dbs]$ cat $ORACLE_HOME\/dbs\/raORCL191.ora\r\nRA_WALLET='LOCATION=file:\/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet CREDENTIAL_ALIAS=zdlras1-scan:1521\/zdlras1:VPCZDLRA'\r\n[oracle@orcl19p dbs]$\r\n[oracle@orcl19p dbs]$ tnsping zdlras1\r\n\r\nTNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 03-NOV-2019 15:34:09\r\n\r\nCopyright (c) 1997, 2019, Oracle.  All rights reserved.\r\n\r\nUsed parameter files:\r\n\r\n\r\nUsed TNSNAMES adapter to resolve the alias\r\nAttempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = zdlras1-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = zdlras1)))\r\nOK (20 msec)\r\n[oracle@orcl19p dbs]$\r\n[oracle@orcl19p dbs]$ cat $ORACLE_HOME\/network\/admin\/sqlnet.ora\r\ncat: \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/network\/admin\/sqlnet.ora: No such file or directory\r\n[oracle@orcl19p dbs]$\r\n[oracle@orcl19p dbs]$ vi $ORACLE_HOME\/network\/admin\/sqlnet.ora\r\n[oracle@orcl19p dbs]$\r\n[oracle@orcl19p dbs]$ cat $ORACLE_HOME\/network\/admin\/sqlnet.ora\r\nNAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)\r\n\r\nSQLNET.WALLET_OVERRIDE = true\r\n\r\nWALLET_LOCATION =\r\n(\r\n   SOURCE =\r\n      (METHOD = FILE)\r\n      (METHOD_DATA =\r\n         (DIRECTORY = \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet)\r\n      )\r\n)\r\n[oracle@orcl19p dbs]$<\/pre>\n<h4 style=\"text-align: justify;\">At Standby &#8211; ORLC19S<\/h4>\n<p style=\"text-align: justify;\">The same procedure than above it is done here:<\/p>\n<ol style=\"text-align: justify;\">\n<li>Install ZDLRA library.<\/li>\n<li>Create a Wallet.<\/li>\n<li>Configure\/Test tns entry to ZDLRA.<\/li>\n<li>Adjust sqlnet.ora file (this is needed because of the real-time redo).<\/li>\n<\/ol>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19s ~]$ cd \/tmp\/\r\n[oracle@orcl19s tmp]$ unzip ra_linux64.zip\r\nArchive:  ra_linux64.zip\r\n  inflating: libra.so\r\n  inflating: metadata.xml\r\n[oracle@orcl19s tmp]$\r\n[oracle@orcl19s tmp]$ cp .\/libra.so \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/lib\/libra.so\r\n[oracle@orcl19s tmp]$\r\n[oracle@orcl19s tmp]$ cd $ORACLE_HOME\/dbs\r\n[oracle@orcl19s dbs]$\r\n[oracle@orcl19s dbs]$ mkstore -wrl \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet -createALO\r\nOracle Secret Store Tool Release 19.0.0.0.0 - Production\r\nVersion 19.4.0.0.0\r\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\r\n\r\n[oracle@orcl19s dbs]$\r\n[oracle@orcl19s dbs]$ mkstore -wrl \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet -createCredential zdlras2-scan:1521\/zdlras2:VPCZDLRA vpczdlra oracle\r\nOracle Secret Store Tool Release 19.0.0.0.0 - Production\r\nVersion 19.4.0.0.0\r\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\r\n\r\n[oracle@orcl19s dbs]$\r\n[oracle@orcl19s dbs]$ mkstore -wrl \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet -listCredential\r\nOracle Secret Store Tool Release 19.0.0.0.0 - Production\r\nVersion 19.4.0.0.0\r\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\r\n\r\nList credential (index: connect_string username)\r\n1: zdlras2-scan:1521\/zdlras2:VPCZDLRA vpczdlra\r\n[oracle@orcl19s dbs]$\r\n[oracle@orcl19s dbs]$ vi $ORACLE_HOME\/dbs\/raORCL19S1.ora\r\n[oracle@orcl19s dbs]$\r\n[oracle@orcl19s dbs]$ cat $ORACLE_HOME\/dbs\/raORCL19S1.ora\r\nRA_WALLET='LOCATION=file:\/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet CREDENTIAL_ALIAS=zdlras2-scan:1521\/zdlras2:VPCZDLRA'\r\n[oracle@orcl19s dbs]$\r\n[oracle@orcl19s dbs]$ tnsping zdlras2\r\n\r\nTNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 03-NOV-2019 16:32:57\r\n\r\nCopyright (c) 1997, 2019, Oracle.  All rights reserved.\r\n\r\nUsed parameter files:\r\n\r\n\r\nUsed TNSNAMES adapter to resolve the alias\r\nAttempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = zdlras2-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = zdlras2)))\r\nOK (0 msec)\r\n[oracle@orcl19s dbs]$\r\n[oracle@orcl19s dbs]$ cat $ORACLE_HOME\/network\/admin\/sqlnet.ora\r\ncat: \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/network\/admin\/sqlnet.ora: No such file or directory\r\n[oracle@orcl19s dbs]$\r\n[oracle@orcl19s dbs]$ vi $ORACLE_HOME\/network\/admin\/sqlnet.ora\r\n[oracle@orcl19s dbs]$\r\n[oracle@orcl19s dbs]$ cat $ORACLE_HOME\/network\/admin\/sqlnet.ora\r\nNAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)\r\n\r\nSQLNET.WALLET_OVERRIDE = true\r\n\r\nWALLET_LOCATION =\r\n(\r\n   SOURCE =\r\n      (METHOD = FILE)\r\n      (METHOD_DATA =\r\n         (DIRECTORY = \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet)\r\n      )\r\n)\r\n[oracle@orcl19s dbs]$<\/pre>\n<h4 style=\"text-align: justify;\">Registry Primary Database \u2013 Both ZDLRA\u2019s<\/h4>\n<p style=\"text-align: justify;\"><strong>After that, we can register ORACL19 at ZDLRAS1. <\/strong>It is critical to register the primary database first at the ZDLRA that will protect the primary site.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19p dbs]$ rman target=\/ catalog=vpczdlra\/oracle@zdlras1\r\n\r\nRecovery Manager: Release 19.0.0.0.0 - Production on Sun Nov 3 15:40:37 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\r\n\r\nconnected to target database: ORCL19 (DBID=324042554)\r\nconnected to recovery catalog database\r\nPL\/SQL package VPCZDLRA.DBMS_RCVCAT version 19.03.00.00. in RCVCAT database is not current\r\nPL\/SQL package VPCZDLRA.DBMS_RCVMAN version 19.03.00.00 in RCVCAT database is not current\r\n\r\nRMAN&gt; register database;\r\n\r\ndatabase registered in recovery catalog\r\nstarting full resync of recovery catalog\r\nfull resync complete\r\n\r\nRMAN&gt;<\/pre>\n<p style=\"text-align: justify;\">If you want, you can do the backup of the database (it is optional), I not showed here but it is a simple <em>backup database level 0 filesperset 1<\/em> and you can see the output here &#8211; <a href=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/Output-Backup-Primary-ORCL19-at-ZDLRAS1.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Output-Backup-Primary-ORCL19-at-ZDLRAS1<\/a>.<\/p>\n<p style=\"text-align: justify;\"><strong>After registry primary database ORCL19 at ZDLRA (ZDLRAS1) that protect the primary site, we can register the primary ORCL19 at the ZDLRA that protect the standby site (ZDLRAS2)<\/strong><\/p>\n<p style=\"text-align: justify;\">Look that I need to add the entry of TNS names for ZDLRAS2 (at the primary server) too:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19p dbs]$ tnsping zdlras2\r\n\r\nTNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 03-NOV-2019 16:37:38\r\n\r\nCopyright (c) 1997, 2019, Oracle.  All rights reserved.\r\n\r\nUsed parameter files:\r\n\/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/network\/admin\/sqlnet.ora\r\n\r\n\r\nUsed TNSNAMES adapter to resolve the alias\r\nAttempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = zdlras2-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = zdlras2)))\r\nOK (0 msec)\r\n[oracle@orcl19p dbs]$\r\n[oracle@orcl19p dbs]$ rman target=\/ catalog=vpczdlra\/oracle@zdlras2\r\n\r\nRecovery Manager: Release 19.0.0.0.0 - Production on Sun Nov 3 17:30:06 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\r\n\r\nconnected to target database: ORCL19 (DBID=324042554)\r\nconnected to recovery catalog database\r\nPL\/SQL package VPCZDLRA.DBMS_RCVCAT version 19.03.00.00. in RCVCAT database is not current\r\nPL\/SQL package VPCZDLRA.DBMS_RCVMAN version 19.03.00.00 in RCVCAT database is not current\r\n\r\nRMAN&gt; register database;\r\n\r\ndatabase registered in recovery catalog\r\nstarting full resync of recovery catalog\r\nfull resync complete\r\n\r\nRMAN&gt; exit\r\n\r\n\r\nRecovery Manager complete.\r\n[oracle@orcl19p dbs]$<\/pre>\n<p style=\"text-align: justify;\"><strong>Since the registration was done at primary, the controlfile of the standby database needs to be updated with one rman catalog, and it is needed to inform ZDLRAS2 (that protect standby site) who is the standby database. This is done by doing a simple resync catalog from standby, connected at ZDLRAS2.<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19s dbs]$ rman target=\/ catalog=vpczdlra\/oracle@zdlras2\r\n\r\nRecovery Manager: Release 19.0.0.0.0 - Production on Sun Nov 3 20:12:32 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\r\n\r\nconnected to target database: ORCL19 (DBID=324042554, not open)\r\nconnected to recovery catalog database\r\nPL\/SQL package VPCZDLRA.DBMS_RCVCAT version 19.03.00.00. in RCVCAT database is not current\r\nPL\/SQL package VPCZDLRA.DBMS_RCVMAN version 19.03.00.00 in RCVCAT database is not current\r\n\r\nRMAN&gt; show all;\r\n\r\nRMAN configuration parameters for database with db_unique_name ORCL19S are:\r\nCONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default\r\nCONFIGURE BACKUP OPTIMIZATION OFF; # default\r\nCONFIGURE DEFAULT DEVICE TYPE TO DISK; # default\r\nCONFIGURE CONTROLFILE AUTOBACKUP ON; # default\r\nCONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default\r\nCONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F'; # default\r\nCONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default\r\nCONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default\r\nCONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default\r\nCONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default\r\nCONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default\r\nCONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default\r\nCONFIGURE CHANNEL 1 DEVICE TYPE 'SBT_TAPE' FORMAT   '%d_%U' PARMS  \"SBT_LIBRARY=\/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/lib\/libra.so, ENV=(RA_WALLET='location=file:\/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet credential_alias=zdlras1-scan:1521\/zdlras1:VPCZDLRA')\" CONNECT '*';\r\nCONFIGURE MAXSETSIZE TO UNLIMITED; # default\r\nCONFIGURE ENCRYPTION FOR DATABASE OFF; # default\r\nCONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default\r\nCONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default\r\nCONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default\r\nCONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default\r\nCONFIGURE SNAPSHOT CONTROLFILE NAME TO '\/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/snapcf_orcl19s1.f'; # default\r\n\r\nRMAN&gt; resync catalog;\r\n\r\nstarting resync of recovery catalog\r\nresync complete\r\n\r\nRMAN&gt; list db_unique_name of database orcl19;\r\n\r\n\r\nList of Databases\r\nDB Key  DB Name  DB ID            Database Role    Db_unique_name\r\n------- ------- ----------------- ---------------  ------------------\r\n835     ORCL19   324042554        PRIMARY          ORCL19\r\n835     ORCL19   324042554        STANDBY          ORCL19S\r\n\r\nRMAN&gt;<\/pre>\n<p style=\"text-align: justify;\">Look at some points above:<\/p>\n<ul style=\"text-align: justify;\">\n<li><em>show all<\/em> read the already registered information from rman catalog (look channel set)<\/li>\n<li>After the resync catalog, the <em>list db_unique_name<\/em> reported both databases, primary (ORCL19) and standby (ORCL19S)<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">After that, you can configure the correct channel for ORCL19S to point to ZDLRAS2, and do the backup. This output can be checked here &#8211; <a href=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/Output-Backup-Primary-ORCL19S-at-ZDLRAS2.txt\" target=\"_blank\" rel=\"noopener noreferrer\">Output-Backup-Primary-ORCL19S-at-ZDLRAS2<\/a>.<\/p>\n<h2 style=\"text-align: justify;\">Environment protected<\/h2>\n<p style=\"text-align: justify;\">At this point, you have both sites protected, which one with dedicated local backup with ZDLRA. Primary ORCL19 database does the backup at ZDLRAS1, and standby database ORCL19S does the backup at ZDLRAS2:<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-PRY-STB.png\" target=\"_blank\" rel=\"noopener noreferrer\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-631 size-full\" src=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-PRY-STB.png\" alt=\"\" width=\"781\" height=\"249\" srcset=\"https:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-PRY-STB.png 781w, https:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-PRY-STB-300x96.png 300w, https:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-PRY-STB-768x245.png 768w, https:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-PRY-STB-624x199.png 624w\" sizes=\"auto, (max-width: 781px) 100vw, 781px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">But this not protect you in case of failure of one site. In this case, the RPO will not be zero because we don\u2019t have where to send the archivelogs.<\/p>\n<p style=\"text-align: justify;\">Think that you lose your primary site, and after the switch to standby the machine failures again. What will be your RPO? The last backup of standby will be, because your standby (new primary) it is not sending archivelogs to the old primary (because it is out for outage), and you don\u2019t have real-time redo configured for ZDLRA. So, if you have an outage at standby you lose until the point of your last backup. This is not clear at the docs from <a href=\"https:\/\/www.oracle.com\/a\/tech\/docs\/maa-overview-onpremise-2019.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">MAA Overview On-Premises<\/a> and <a href=\"https:\/\/www.oracle.com\/technetwork\/database\/availability\/maa-reference-architectures-2244929.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Oracle MAA Reference Architectures<\/a>.<\/p>\n<h2 id=\"zerorpo\" style=\"text-align: justify;\">ZERO RPO<\/h2>\n<p style=\"text-align: justify;\">To reach zero RPO we just need to enable real-time redo for both sites. We can do manually or using the broker. If you want to see in detail how to configure you can check my two posts: <a href=\"http:\/\/www.fernandosimon.com\/blog\/zdlra-real-time-redo\/\" target=\"_blank\" rel=\"noopener noreferrer\">ZDLRA, Real-Time Redo<\/a> and <a href=\"http:\/\/www.fernandosimon.com\/blog\/zdlra-real-time-redo-and-zero-rpo\/\" target=\"_blank\" rel=\"noopener noreferrer\">ZDLRA, Real-Time Redo and Zero RPO<\/a>, here I will post resumed steps.<\/p>\n<p style=\"text-align: justify;\">Be careful with the order of the steps below, they are important because we are changing the user (redo_transport_user) that will be configured in both databases. If you change first at standby you will face issued because the user is created at primary first and the \u201ccreation\u201d it sends automatically by redo. By the way, this user needs to be the same as VPC user that you used to configure\/add\/grant database access for ZDLRA. And need to be the same for every ZDLRA because both databases use the same user.<strong> This is the second key point of this config.<\/strong><\/p>\n<h3 id=\"manualconf\" style=\"text-align: justify;\">Manually Configuration<\/h3>\n<p style=\"text-align: justify;\">The manually way differs because here we set manually the <em>log_archive_dest<\/em> parameters. The others need to be done besides the way that we choose. And the manual config is the only way for 11G databases.<\/p>\n<h4 style=\"text-align: justify;\">Basic config<\/h4>\n<p style=\"text-align: justify;\">For real-time redo we need to configure some parameters, but basically, I made these configs in order:<\/p>\n<ol style=\"text-align: justify;\">\n<li>log_archive_config: Check that for primary it is ZDLRAS1, and ZDLRAS2 for standby<\/li>\n<li>log_archive_dest_3: Again, each site points to the own ZDLRA. And look the type defined at VALID_FOR<\/li>\n<li>Create the user for redo_transport_user inside the database.<\/li>\n<li>redo_transport_user: Same for both databases.<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">At Primary ORCL19<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19p ~]$ sqlplus \/ as sysdba\r\n\r\nSQL*Plus: Release 19.0.0.0.0 - Production on Sun Nov 3 22:34:28 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\r\n\r\n\r\nConnected to:\r\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.5.0.0.0\r\n\r\nSQL&gt; show parameter log_archive_config;\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\nlog_archive_config                   string      DG_CONFIG=(orcl19,orcl19s)\r\nSQL&gt; ALTER SYSTEM SET log_archive_config='DG_CONFIG=(orcl19,orcl19s,zdlras1)' SCOPE=SPFILE SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt; ALTER SYSTEM SET log_archive_dest_3='SERVICE=\"zdlras1-scan:1521\/zdlras1:VPCZDLRA\" ASYNC NOAFFIRM DB_UNIQUE_NAME=zdlras1 VALID_FOR=(ONLINE_LOGFILE,ALL_ROLES)' scope = spfile sid = '*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt;\r\nSQL&gt; alter system set log_archive_dest_state_3=DEFER scope = spfile sid = '*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt;\r\nSQL&gt; col username format a20\r\nSQL&gt; select USERNAME,SYSDBA,SYSOPER,SYSASM,SYSBACKUP,SYSDG,SYSKM from v$pwfile_users;\r\n\r\nUSERNAME             SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM\r\n-------------------- ----- ----- ----- ----- ----- -----\r\nSYS                  TRUE  TRUE  FALSE FALSE FALSE FALSE\r\n\r\nSQL&gt; show parameter redo_transport_user;\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\nredo_transport_user                  string\r\nSQL&gt; alter system set redo_transport_user='VPCZDLRA' scope = spfile SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt; \r\nSQL&gt; alter session set \"_ORACLE_SCRIPT\"=true;\r\n\r\nSession altered.\r\n\r\nSQL&gt; create user VPCZDLRA identified by oracle;\r\n\r\nUser created.\r\n\r\nSQL&gt; grant sysoper to VPCZDLRA;\r\n\r\nGrant succeeded.\r\n\r\nSQL&gt; alter session set \"_ORACLE_SCRIPT\"=false;\r\n\r\nSession altered.\r\n\r\nSQL&gt; select USERNAME,SYSDBA,SYSOPER,SYSASM,SYSBACKUP,SYSDG,SYSKM from v$pwfile_users;\r\n\r\nUSERNAME             SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM\r\n-------------------- ----- ----- ----- ----- ----- -----\r\nSYS                  TRUE  TRUE  FALSE FALSE FALSE FALSE\r\nVPCZDLRA             FALSE TRUE  FALSE FALSE FALSE FALSE\r\n\r\nSQL&gt; exit\r\nDisconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.5.0.0.0\r\n[oracle@orcl19p ~]$<\/pre>\n<p style=\"text-align: justify;\">At Standby ORCL19S<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19s dbs]$ sqlplus \/ as sysdba\r\n\r\nSQL*Plus: Release 19.0.0.0.0 - Production on Sun Nov 3 22:53:05 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\r\n\r\n\r\nConnected to:\r\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.5.0.0.0\r\n\r\nSQL&gt; show parameter log_archive_config;\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\nlog_archive_config                   string      DG_CONFIG=(orcl19,orcl19s)\r\nSQL&gt; ALTER SYSTEM SET log_archive_config='DG_CONFIG=(orcl19,orcl19s,zdlras2)' SCOPE=SPFILE SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt; ALTER SYSTEM SET log_archive_dest_3='SERVICE=\"zdlras2-scan:1521\/zdlras2:VPCZDLRA\" ASYNC NOAFFIRM DB_UNIQUE_NAME=zdlras2 VALID_FOR=(ALL_LOGFILES,ALL_ROLES)' scope = spfile sid = '*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt; alter system set redo_transport_user='VPCZDLRA' scope = spfile SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt; \r\nSQL&gt; exit\r\nDisconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.5.0.0.0\r\n[oracle@orcl19s dbs]$ \r\n[oracle@orcl19s dbs]$ srvctl stop database -d orcl19s -o immediate\r\n[oracle@orcl19s dbs]$<\/pre>\n<p style=\"text-align: justify;\">As you can see here, the user is not created at standby because the creation will come by redo. <strong>And as you can see in the end, I stopped the standby database.<\/strong><\/p>\n<h4 style=\"text-align: justify;\">Password file<\/h4>\n<p style=\"text-align: justify;\">Since one user was created in just one site, we need to copy the password file from production to the standby.<\/p>\n<p style=\"text-align: justify;\">At Primary ORCL19<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[root@orcl19p ~]# su - grid\r\nLast login: Sun Nov  3 23:03:09 CET 2019\r\n[grid@orcl19p ~]$ asmcmd\r\nASMCMD&gt; cd +DATA\/ORCL19\/\r\nASMCMD&gt; ls -l\r\nType             Redund  Striped  Time             Sys  Name\r\n                                                   Y    95D7C2B2568F0A70E0533205A00AC96B\/\r\n                                                   Y    95D86C40430C3E85E0533205A00A0EBA\/\r\n                                                   Y    CONTROLFILE\/\r\n                                                   Y    DATAFILE\/\r\n                                                   Y    DATAGUARDCONFIG\/\r\n                                                   Y    ONLINELOG\/\r\n                                                   Y    PARAMETERFILE\/\r\n                                                   Y    PASSWORD\/\r\n                                                   Y    TEMPFILE\/\r\nDATAGUARDCONFIG  UNPROT  COARSE   NOV 03 23:00:00  N    dr1orcl19.dat =&gt; +DATA\/ORCL19\/DATAGUARDCONFIG\/ORCL19.275.1023297961\r\nASMCMD&gt; ls -l PASSWORD\/\r\nType      Redund  Striped  Time             Sys  Name\r\nPASSWORD  UNPROT  COARSE   OCT 26 23:00:00  Y    pwdorcl19.256.1022714087\r\nASMCMD&gt; ls -l\r\nType             Redund  Striped  Time             Sys  Name\r\n                                                   Y    95D7C2B2568F0A70E0533205A00AC96B\/\r\n                                                   Y    95D86C40430C3E85E0533205A00A0EBA\/\r\n                                                   Y    CONTROLFILE\/\r\n                                                   Y    DATAFILE\/\r\n                                                   Y    DATAGUARDCONFIG\/\r\n                                                   Y    ONLINELOG\/\r\n                                                   Y    PARAMETERFILE\/\r\n                                                   Y    PASSWORD\/\r\n                                                   Y    TEMPFILE\/\r\nDATAGUARDCONFIG  UNPROT  COARSE   NOV 03 23:00:00  N    dr1orcl19.dat =&gt; +DATA\/ORCL19\/DATAGUARDCONFIG\/ORCL19.275.1023297961\r\nASMCMD&gt;\r\nASMCMD&gt; cp PASSWORD\/pwdorcl19.256.1022714087 \/tmp\r\ncopying +DATA\/ORCL19\/PASSWORD\/pwdorcl19.256.1022714087 -&gt; \/tmp\/pwdorcl19.256.1022714087\r\nASMCMD&gt; exit\r\n[grid@orcl19p ~]$<\/pre>\n<p style=\"text-align: justify;\">As you saw, I saved the password file at \/tmp folder.<\/p>\n<p style=\"text-align: justify;\">At Standby ORCL19S<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[root@orcl19s ~]# su - grid\r\nLast login: Sun Nov  3 23:03:00 CET 2019\r\n[grid@orcl19s ~]$ \r\n[grid@orcl19s ~]$\r\n[grid@orcl19s ~]$ scp orcl19p:\/tmp\/pwdorcl19.256.1022714087 \/tmp\/pwdorcl19.256.1022714087\r\ngrid@orcl19p's password:\r\npwdorcl19.256.1022714087                                                                                                                                                                                   100% 2560     4.3MB\/s   00:00\r\n[grid@orcl19s ~]$\r\n[grid@orcl19s ~]$\r\n[grid@orcl19s ~]$\r\n[grid@orcl19s ~]$ asmcmd\r\nASMCMD&gt; ls -l +DATA\/ORCL19S\/\r\nType             Redund  Striped  Time             Sys  Name\r\n                                                   Y    95D7C2B2568F0A70E0533205A00AC96B\/\r\n                                                   Y    95D86C40430C3E85E0533205A00A0EBA\/\r\n                                                   Y    CONTROLFILE\/\r\n                                                   Y    DATAFILE\/\r\n                                                   Y    DATAGUARDCONFIG\/\r\n                                                   Y    ONLINELOG\/\r\n                                                   Y    PARAMETERFILE\/\r\n                                                   Y    PASSWORD\/\r\nDATAGUARDCONFIG  UNPROT  COARSE   NOV 03 19:00:00  N    dr1orcl19s.dat =&gt; +DATA\/ORCL19S\/DATAGUARDCONFIG\/orcl19s.275.1023298021\r\nPASSWORD         UNPROT  COARSE   NOV 02 15:00:00  N    orapworcl19s =&gt; +DATA\/ORCL19S\/PASSWORD\/pwdorcl19s.268.1023290373\r\nPARAMETERFILE    UNPROT  COARSE   NOV 03 22:00:00  N    spfile.ora =&gt; +DATA\/ORCL19S\/PARAMETERFILE\/spfile.272.1023290247\r\nASMCMD&gt; \r\nASMCMD&gt; pwcopy --dbuniquename orcl19s '\/tmp\/pwdorcl19.256.1022714087' '+DATA\/ORCL19S\/orapworcl19s' -f\r\nASMCMD-9453: failed to register password file as a CRS resource\r\ncopying \/tmp\/pwdorcl19.256.1022714087 -&gt; +DATA\/ORCL19S\/orapworcl19s\r\nASMCMD-9453: failed to register password file as a CRS resource\r\nASMCMD&gt;\r\nASMCMD&gt;\r\nASMCMD&gt; ls -l +DATA\/ORCL19S\/\r\nType             Redund  Striped  Time             Sys  Name\r\n                                                   Y    95D7C2B2568F0A70E0533205A00AC96B\/\r\n                                                   Y    95D86C40430C3E85E0533205A00A0EBA\/\r\n                                                   Y    CONTROLFILE\/\r\n                                                   Y    DATAFILE\/\r\n                                                   Y    DATAGUARDCONFIG\/\r\n                                                   Y    ONLINELOG\/\r\n                                                   Y    PARAMETERFILE\/\r\n                                                   Y    PASSWORD\/\r\nDATAGUARDCONFIG  UNPROT  COARSE   NOV 03 19:00:00  N    dr1orcl19s.dat =&gt; +DATA\/ORCL19S\/DATAGUARDCONFIG\/orcl19s.275.1023298021\r\nPASSWORD         UNPROT  COARSE   NOV 03 23:00:00  N    orapworcl19s =&gt; +DATA\/ORCL19S\/PASSWORD\/pwdorcl19s.268.1023405041\r\nPARAMETERFILE    UNPROT  COARSE   NOV 03 22:00:00  N    spfile.ora =&gt; +DATA\/ORCL19S\/PARAMETERFILE\/spfile.272.1023290247\r\nASMCMD&gt;\r\nASMCMD&gt; exit\r\n[grid@orcl19s ~]$<\/pre>\n<p style=\"text-align: justify;\">As you saw above, the file from primary was copied and overwritten the old.<\/p>\n<h4 style=\"text-align: justify;\">Bounce everything<\/h4>\n<p style=\"text-align: justify;\">After doing this it is time to bounce the primary database to reload the parameters and start the standby database to read password file and new parameters<\/p>\n<p style=\"text-align: justify;\">At Primary ORCL19<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19p ~]$ srvctl stop database -d orcl19s -o immediate\r\n[oracle@orcl19p ~]$ srvctl start database -d orcl19\r\n[oracle@orcl19p ~]$<\/pre>\n<p style=\"text-align: justify;\">At Standby ORCL19S<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19s ~]$ srvctl start database -d orcl19s\r\n[oracle@orcl19s ~]$\r\n[oracle@orcl19s ~]$ sqlplus \/ as sysdba\r\n\r\nSQL*Plus: Release 19.0.0.0.0 - Production on Sun Nov 3 23:13:22 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\r\n\r\n\r\nConnected to:\r\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.5.0.0.0\r\n\r\nSQL&gt; col username format a20\r\nSQL&gt; select USERNAME,SYSDBA,SYSOPER,SYSASM,SYSBACKUP,SYSDG,SYSKM from v$pwfile_users;\r\n\r\nUSERNAME             SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM\r\n-------------------- ----- ----- ----- ----- ----- -----\r\nSYS                  TRUE  TRUE  FALSE FALSE FALSE FALSE\r\nVPCZDLRA             FALSE TRUE  FALSE FALSE FALSE FALSE\r\n\r\nSQL&gt;<\/pre>\n<h4 style=\"text-align: justify;\">Checking ZERO RPO<\/h4>\n<p style=\"text-align: justify;\">To check if the conf is OK, you can do a simple archivelog at primary and verify if everything was OK for both sites.<\/p>\n<p style=\"text-align: justify;\">At Primary ORCL19<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19p ~]$ sqlplus \/ as sysdba\r\n\r\nSQL*Plus: Release 19.0.0.0.0 - Production on Mon Nov 4 00:46:46 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\r\n\r\n\r\nConnected to:\r\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.5.0.0.0\r\n\r\nSQL&gt; archive log list;\r\nDatabase log mode              Archive Mode\r\nAutomatic archival             Enabled\r\nArchive destination            USE_DB_RECOVERY_FILE_DEST\r\nOldest online log sequence     117\r\nNext log sequence to archive   119\r\nCurrent log sequence           119\r\nSQL&gt; alter system archive log current;\r\n\r\nSystem altered.\r\n\r\nSQL&gt; exit\r\nDisconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.5.0.0.0\r\n[oracle@orcl19p ~]$ rman target=\/ catalog=vpczdlra\/oracle@zdlras1\r\n\r\nRecovery Manager: Release 19.0.0.0.0 - Production on Mon Nov 4 00:47:04 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\r\n\r\nconnected to target database: ORCL19 (DBID=324042554)\r\nconnected to recovery catalog database\r\nPL\/SQL package VPCZDLRA.DBMS_RCVCAT version 19.03.00.00. in RCVCAT database is not current\r\nPL\/SQL package VPCZDLRA.DBMS_RCVMAN version 19.03.00.00 in RCVCAT database is not current\r\n\r\nRMAN&gt; list backup of archivelog sequence 118;\r\n\r\n\r\nList of Backup Sets\r\n===================\r\n\r\n\r\nBS Key  Size       Device Type Elapsed Time Completion Time\r\n------- ---------- ----------- ------------ -------------------\r\n1965    8.00K      SBT_TAPE    00:00:01     04\/11\/2019 00:45:49\r\n        BP Key: 1966   Status: AVAILABLE  Compressed: YES  Tag: TAG20191104T004548\r\n        Handle: $RSCN_1_RTIM_1022714106_THRD_1_SEQ_118_CTKEY_1946_BACKUP   Media:\r\n\r\n  List of Archived Logs in backup set 1965\r\n  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time\r\n  ---- ------- ---------- ------------------- ---------- ---------\r\n  1    118     2137116    04\/11\/2019 00:44:35 2137128    04\/11\/2019 00:44:39\r\n\r\nRMAN&gt; exit\r\n\r\n\r\nRecovery Manager complete.\r\n[oracle@orcl19p ~]$<\/pre>\n<p style=\"text-align: justify;\">At Standby ORCL19S<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19s ~]$ rman target=\/ catalog=vpczdlra\/oracle@zdlras2\r\n\r\nRecovery Manager: Release 19.0.0.0.0 - Production on Mon Nov 4 00:48:39 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\r\n\r\nconnected to target database: ORCL19 (DBID=324042554, not open)\r\nconnected to recovery catalog database\r\nPL\/SQL package VPCZDLRA.DBMS_RCVCAT version 19.03.00.00. in RCVCAT database is not current\r\nPL\/SQL package VPCZDLRA.DBMS_RCVMAN version 19.03.00.00 in RCVCAT database is not current\r\n\r\nRMAN&gt; list backup of archivelog sequence 118;\r\n\r\n\r\nList of Backup Sets\r\n===================\r\n\r\n\r\nBS Key  Size       Device Type Elapsed Time Completion Time\r\n------- ---------- ----------- ------------ -------------------\r\n2240    8.00K      SBT_TAPE    00:00:00     04\/11\/2019 00:45:35\r\n        BP Key: 2241   Status: AVAILABLE  Compressed: YES  Tag: TAG20191104T004535\r\n        Handle: $RSCN_1_RTIM_1022714106_THRD_1_SEQ_118_CTKEY_2228_BACKUP   Media:\r\n\r\n  List of Archived Logs in backup set 2240\r\n  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time\r\n  ---- ------- ---------- ------------------- ---------- ---------\r\n  1    118     2137116    04\/11\/2019 00:44:35 2137128    04\/11\/2019 00:44:39\r\n\r\nRMAN&gt; exit\r\n\r\n\r\nRecovery Manager complete.\r\n[oracle@orcl19s ~]$<\/pre>\n<p style=\"text-align: justify;\">So, as you can see above. The ZDLRAS1 received the onlinelog (sequence 118) from ORCL19. And the ZDLRAS2 received a copy of it (standby redo log) from ORCL19S. This means that now you have zero RPO from primary and standby.<\/p>\n<h3 id=\"brokerconf\" style=\"text-align: justify;\">Broker config<\/h3>\n<p style=\"text-align: justify;\">From 12.1 and new versions, you can have <em>recovery_appliance<\/em> configured directly from broker when using DG. This executes the configuration for log_archive_dest parameters automatically when you add the ZDLRA.<\/p>\n<h4 style=\"text-align: justify;\">Basic config<\/h4>\n<p style=\"text-align: justify;\">Pretty same config that was made as manual config before.<\/p>\n<p style=\"text-align: justify;\">At Primary ORCL19<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19p ~]$ sqlplus \/ as sysdba\r\n\r\nSQL*Plus: Release 19.0.0.0.0 - Production on Sat Nov 9 16:24:27 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\r\n\r\n\r\nConnected to:\r\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.5.0.0.0\r\n\r\nSQL&gt;\r\nSQL&gt; col username format a20\r\nSQL&gt; select USERNAME,SYSDBA,SYSOPER,SYSASM,SYSBACKUP,SYSDG,SYSKM from v$pwfile_users;\r\n\r\nUSERNAME             SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM\r\n-------------------- ----- ----- ----- ----- ----- -----\r\nSYS                  TRUE  TRUE  FALSE FALSE FALSE FALSE\r\n\r\nSQL&gt; show parameter redo_transport_user;\r\n\r\nNAME                                 TYPE        VALUE\r\n------------------------------------ ----------- ------------------------------\r\nredo_transport_user                  string\r\nSQL&gt; alter system set redo_transport_user='VPCZDLRA' scope = spfile SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt; \r\nSQL&gt; alter session set \"_ORACLE_SCRIPT\"=true;\r\n\r\nSession altered.\r\n\r\nSQL&gt; create user VPCZDLRA identified by oracle;\r\n\r\nUser created.\r\n\r\nSQL&gt; grant sysoper to VPCZDLRA;\r\n\r\nGrant succeeded.\r\n\r\nSQL&gt; alter session set \"_ORACLE_SCRIPT\"=false;\r\n\r\nSession altered.\r\n\r\nSQL&gt; select USERNAME,SYSDBA,SYSOPER,SYSASM,SYSBACKUP,SYSDG,SYSKM from v$pwfile_users;\r\n\r\nUSERNAME             SYSDB SYSOP SYSAS SYSBA SYSDG SYSKM\r\n-------------------- ----- ----- ----- ----- ----- -----\r\nSYS                  TRUE  TRUE  FALSE FALSE FALSE FALSE\r\nVPCZDLRA             FALSE TRUE  FALSE FALSE FALSE FALSE\r\n\r\nSQL&gt; exit\r\nDisconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.5.0.0.0\r\n[oracle@orcl19p ~]$<\/pre>\n<p style=\"text-align: justify;\">At Standby ORCL19S<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19s ~]$ sqlplus \/ as sysdba\r\n\r\nSQL*Plus: Release 19.0.0.0.0 - Production on Sat Nov 9 16:25:09 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle.  All rights reserved.\r\n\r\n\r\nConnected to:\r\nOracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.5.0.0.0\r\n\r\nSQL&gt;\r\nSQL&gt; alter system set redo_transport_user='VPCZDLRA' scope = spfile SID='*';\r\n\r\nSystem altered.\r\n\r\nSQL&gt; \r\nSQL&gt; exit\r\nDisconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production\r\nVersion 19.5.0.0.0\r\n[oracle@orcl19s dbs]$<\/pre>\n<h4 style=\"text-align: justify;\">Password file<\/h4>\n<p style=\"text-align: justify;\">At Primary ORCL19<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[grid@orcl19p ~]$ asmcmd\r\nASMCMD&gt; cd +DATA\/ORCL19\/\r\nASMCMD&gt; ls -l\r\nType             Redund  Striped  Time             Sys  Name\r\n                                                   Y    95D7C2B2568F0A70E0533205A00AC96B\/\r\n                                                   Y    95D86C40430C3E85E0533205A00A0EBA\/\r\n                                                   Y    CONTROLFILE\/\r\n                                                   Y    DATAFILE\/\r\n                                                   Y    DATAGUARDCONFIG\/\r\n                                                   Y    ONLINELOG\/\r\n                                                   Y    PARAMETERFILE\/\r\n                                                   Y    PASSWORD\/\r\n                                                   Y    TEMPFILE\/\r\nDATAGUARDCONFIG  UNPROT  COARSE   NOV 03 23:00:00  N    dr1orcl19.dat =&gt; +DATA\/ORCL19\/DATAGUARDCONFIG\/ORCL19.275.1023297961\r\nASMCMD&gt; ls -l PASSWORD\/\r\nType      Redund  Striped  Time             Sys  Name\r\nPASSWORD  UNPROT  COARSE   OCT 26 23:00:00  Y    pwdorcl19.256.1022714087\r\nASMCMD&gt; ls -l\r\nType             Redund  Striped  Time             Sys  Name\r\n                                                   Y    95D7C2B2568F0A70E0533205A00AC96B\/\r\n                                                   Y    95D86C40430C3E85E0533205A00A0EBA\/\r\n                                                   Y    CONTROLFILE\/\r\n                                                   Y    DATAFILE\/\r\n                                                   Y    DATAGUARDCONFIG\/\r\n                                                   Y    ONLINELOG\/\r\n                                                   Y    PARAMETERFILE\/\r\n                                                   Y    PASSWORD\/\r\n                                                   Y    TEMPFILE\/\r\nDATAGUARDCONFIG  UNPROT  COARSE   NOV 03 23:00:00  N    dr1orcl19.dat =&gt; +DATA\/ORCL19\/DATAGUARDCONFIG\/ORCL19.275.1023297961\r\nASMCMD&gt;\r\nASMCMD&gt; cp PASSWORD\/pwdorcl19.256.1022714087 \/tmp\r\ncopying +DATA\/ORCL19\/PASSWORD\/pwdorcl19.256.1022714087 -&gt; \/tmp\/pwdorcl19.256.1022714087\r\nASMCMD&gt; exit\r\n[grid@orcl19p ~]$<\/pre>\n<p style=\"text-align: justify;\">At Standby ORCL19S<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[root@orcl19s ~]# su - grid\r\nLast login: Sun Nov  3 23:03:00 CET 2019\r\n[grid@orcl19s ~]$ \r\n[grid@orcl19s ~]$\r\n[grid@orcl19s ~]$ scp orcl19p:\/tmp\/pwdorcl19.256.1022714087 \/tmp\/pwdorcl19.256.1022714087\r\ngrid@orcl19p's password:\r\npwdorcl19.256.1022714087                                                                                                                                                                                   100% 2560     4.3MB\/s   00:00\r\n[grid@orcl19s ~]$\r\n[grid@orcl19s ~]$\r\n[grid@orcl19s ~]$\r\n[grid@orcl19s ~]$ asmcmd\r\nASMCMD&gt; ls -l +DATA\/ORCL19S\/\r\nType             Redund  Striped  Time             Sys  Name\r\n                                                   Y    95D7C2B2568F0A70E0533205A00AC96B\/\r\n                                                   Y    95D86C40430C3E85E0533205A00A0EBA\/\r\n                                                   Y    CONTROLFILE\/\r\n                                                   Y    DATAFILE\/\r\n                                                   Y    DATAGUARDCONFIG\/\r\n                                                   Y    ONLINELOG\/\r\n                                                   Y    PARAMETERFILE\/\r\n                                                   Y    PASSWORD\/\r\nDATAGUARDCONFIG  UNPROT  COARSE   NOV 03 19:00:00  N    dr1orcl19s.dat =&gt; +DATA\/ORCL19S\/DATAGUARDCONFIG\/orcl19s.275.1023298021\r\nPASSWORD         UNPROT  COARSE   NOV 02 15:00:00  N    orapworcl19s =&gt; +DATA\/ORCL19S\/PASSWORD\/pwdorcl19s.268.1023290373\r\nPARAMETERFILE    UNPROT  COARSE   NOV 03 22:00:00  N    spfile.ora =&gt; +DATA\/ORCL19S\/PARAMETERFILE\/spfile.272.1023290247\r\nASMCMD&gt; \r\nASMCMD&gt; pwcopy --dbuniquename orcl19s '\/tmp\/pwdorcl19.256.1022714087' '+DATA\/ORCL19S\/orapworcl19s' -f\r\nASMCMD-9453: failed to register password file as a CRS resource\r\ncopying \/tmp\/pwdorcl19.256.1022714087 -&gt; +DATA\/ORCL19S\/orapworcl19s\r\nASMCMD-9453: failed to register password file as a CRS resource\r\nASMCMD&gt;\r\nASMCMD&gt;\r\nASMCMD&gt; ls -l +DATA\/ORCL19S\/\r\nType             Redund  Striped  Time             Sys  Name\r\n                                                   Y    95D7C2B2568F0A70E0533205A00AC96B\/\r\n                                                   Y    95D86C40430C3E85E0533205A00A0EBA\/\r\n                                                   Y    CONTROLFILE\/\r\n                                                   Y    DATAFILE\/\r\n                                                   Y    DATAGUARDCONFIG\/\r\n                                                   Y    ONLINELOG\/\r\n                                                   Y    PARAMETERFILE\/\r\n                                                   Y    PASSWORD\/\r\nDATAGUARDCONFIG  UNPROT  COARSE   NOV 03 19:00:00  N    dr1orcl19s.dat =&gt; +DATA\/ORCL19S\/DATAGUARDCONFIG\/orcl19s.275.1023298021\r\nPASSWORD         UNPROT  COARSE   NOV 03 23:00:00  N    orapworcl19s =&gt; +DATA\/ORCL19S\/PASSWORD\/pwdorcl19s.268.1023405041\r\nPARAMETERFILE    UNPROT  COARSE   NOV 03 22:00:00  N    spfile.ora =&gt; +DATA\/ORCL19S\/PARAMETERFILE\/spfile.272.1023290247\r\nASMCMD&gt;\r\nASMCMD&gt; exit\r\n[grid@orcl19s ~]$<\/pre>\n<h4 style=\"text-align: justify;\">Wallet Configuration<\/h4>\n<p style=\"text-align: justify;\">When using broker configuration, it is recommended to add both credential entries, of ZDLRA from primary and standby, in the wallet from both databases.<\/p>\n<p style=\"text-align: justify;\">At Primary ORCL19<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19p ~]$ mkstore -wrl \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet -createCredential zdlras2-scan:1521\/zdlras2:VPCZDLRA vpczdlra oracle\r\nOracle Secret Store Tool Release 19.0.0.0.0 - Production\r\nVersion 19.4.0.0.0\r\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\r\n\r\n[oracle@orcl19p ~]$\r\n[oracle@orcl19p ~]$ mkstore -wrl \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet -listCredential\r\nOracle Secret Store Tool Release 19.0.0.0.0 - Production\r\nVersion 19.4.0.0.0\r\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\r\n\r\nList credential (index: connect_string username)\r\n2: zdlras2-scan:1521\/zdlras2:VPCZDLRA vpczdlra\r\n1: zdlras1-scan:1521\/zdlras1:VPCZDLRA vpczdlra\r\n[oracle@orcl19p ~]$<\/pre>\n<p style=\"text-align: justify;\">At Standby ORCL19S<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19s ~]$ mkstore -wrl \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet -createCredential zdlras1-scan:1521\/zdlras1:VPCZDLRA vpczdlra oracle\r\nOracle Secret Store Tool Release 19.0.0.0.0 - Production\r\nVersion 19.4.0.0.0\r\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\r\n\r\n[oracle@orcl19s ~]$ mkstore -wrl \/u01\/app\/oracle\/product\/19.0.0.0\/dbhome_1\/dbs\/ra_wallet -listCredential\r\nOracle Secret Store Tool Release 19.0.0.0.0 - Production\r\nVersion 19.4.0.0.0\r\nCopyright (c) 2004, 2019, Oracle and\/or its affiliates. All rights reserved.\r\n\r\nList credential (index: connect_string username)\r\n2: zdlras1-scan:1521\/zdlras1:VPCZDLRA vpczdlra\r\n1: zdlras2-scan:1521\/zdlras2:VPCZDLRA vpczdlra\r\n[oracle@orcl19s ~]$<\/pre>\n<h4 style=\"text-align: justify;\">Bounce everything<\/h4>\n<p style=\"text-align: justify;\">At Standby ORCL19S<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19s ~]$ srvctl stop database -d orcl19s -o immediate\r\n[oracle@orcl19s ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">At Primary ORCL19<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19p ~]$ srvctl stop database -d orcl19 -o immediate\r\n[oracle@orcl19p ~]$ srvctl start database -d orcl19\r\n[oracle@orcl19p ~]$\r\n<\/pre>\n<p style=\"text-align: justify;\">At Standby ORCL19S<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19s ~]$ srvctl start database -d orcl19s\r\n[oracle@orcl19s ~]$\r\n<\/pre>\n<h4 style=\"text-align: justify;\">Broker config<\/h4>\n<p style=\"text-align: justify;\">Now I can add the ZDLRA at the config. First, look the config:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19p ~]$ dgmgrl sys\/oracle@orcl19\r\nDGMGRL for Linux: Release 19.0.0.0.0 - Production on Sat Nov 9 16:26:26 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\r\n\r\nWelcome to DGMGRL, type \"help\" for information.\r\nConnected to \"ORCL19\"\r\nConnected as SYSDBA.\r\nDGMGRL&gt;\r\nDGMGRL&gt; show configuration verbose;\r\n\r\nConfiguration - orcl19\r\n\r\n  Protection Mode: MaxAvailability\r\n  Members:\r\n  orcl19  - Primary database\r\n    orcl19s - Physical standby database\r\n\r\n  Properties:\r\n    FastStartFailoverThreshold      = '30'\r\n    OperationTimeout                = '30'\r\n    TraceLevel                      = 'USER'\r\n    FastStartFailoverLagLimit       = '0'\r\n    CommunicationTimeout            = '180'\r\n    ObserverReconnect               = '0'\r\n    FastStartFailoverAutoReinstate  = 'TRUE'\r\n    FastStartFailoverPmyShutdown    = 'TRUE'\r\n    BystandersFollowRoleChange      = 'ALL'\r\n    ObserverOverride                = 'FALSE'\r\n    ExternalDestination1            = ''\r\n    ExternalDestination2            = ''\r\n    PrimaryLostWriteAction          = 'CONTINUE'\r\n    ConfigurationWideServiceName    = 'orcl19_CFG'\r\n\r\nFast-Start Failover:  Disabled\r\n\r\nConfiguration Status:\r\nSUCCESS\r\n\r\nDGMGRL&gt;<\/pre>\n<p style=\"text-align: justify;\">Now, add both ZDLRA entries. Look that connect identifier it is the same as the credential name. <strong>This is a key point too.<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">DGMGRL&gt; add recovery_appliance zdlras1 as connect identifier is 'zdlras1-scan:1521\/zdlras1:VPCZDLRA';\r\nRecovery Appliance \"zdlras1\" added\r\nDGMGRL&gt; add recovery_appliance zdlras2 as connect identifier is 'zdlras2-scan:1521\/zdlras2:VPCZDLRA';\r\nRecovery Appliance \"zdlras2\" added\r\nDGMGRL&gt; show configuration verbose;\r\n\r\nConfiguration - orcl19\r\n\r\n  Protection Mode: MaxAvailability\r\n  Members:\r\n  orcl19  - Primary database\r\n    orcl19s - Physical standby database\r\n      zdlras2 - Recovery appliance (disabled)\r\n        ORA-16905: The member was not enabled yet.\r\n\r\n    zdlras1 - Recovery appliance (disabled)\r\n      ORA-16905: The member was not enabled yet.\r\n\r\n  Properties:\r\n    FastStartFailoverThreshold      = '30'\r\n    OperationTimeout                = '30'\r\n    TraceLevel                      = 'USER'\r\n    FastStartFailoverLagLimit       = '0'\r\n    CommunicationTimeout            = '180'\r\n    ObserverReconnect               = '0'\r\n    FastStartFailoverAutoReinstate  = 'TRUE'\r\n    FastStartFailoverPmyShutdown    = 'TRUE'\r\n    BystandersFollowRoleChange      = 'ALL'\r\n    ObserverOverride                = 'FALSE'\r\n    ExternalDestination1            = ''\r\n    ExternalDestination2            = ''\r\n    PrimaryLostWriteAction          = 'CONTINUE'\r\n    ConfigurationWideServiceName    = 'orcl19_CFG'\r\n\r\nFast-Start Failover:  Disabled\r\n\r\nConfiguration Status:\r\nSUCCESS\r\n\r\nDGMGRL&gt;<\/pre>\n<p style=\"text-align: justify;\">Look that now I have both ZDLRA in the config, but they did not enable yet. Before I enable it, I need to configure the RedoRoutes. If I do not do that, both ZDLRA will be enabled for the primary site as l<em>og_archive_dest<\/em>. <strong>This is a key point too<\/strong>.<\/p>\n<pre class=\"EnlighterJSRAW \" data-enlighter-language=\"no-highlight\">DGMGRL&gt; edit database orcl19 set property RedoRoutes = '(orcl19 : orcl19s sync, zdlras1 async)( orcl19s : zdlras1 async )';\r\nProperty \"redoroutes\" updated\r\nDGMGRL&gt; edit database orcl19s set property RedoRoutes = '(orcl19s : orcl19 sync, zdlras2 async)( orcl19 : zdlras2 async )';\r\nProperty \"redoroutes\" updated\r\nDGMGRL&gt;<\/pre>\n<p style=\"text-align: justify;\">Just to explain what this means:<\/p>\n<ul style=\"text-align: justify;\">\n<li><strong>RedoRoutes for ORCL19<\/strong>: For ORCL19 database, when\/while ORCL19 is the primary database, ORCL19 it will send the redo to ORCL19S in sync mode, and to ZDLRAS1 in async mode. The second part means that when\/while ORCL19S database is the primary, ORCL19 will send the redo to ZDLRAS1 in async mode.<\/li>\n<li><strong>RedoRoutes for ORCL19S<\/strong>: For ORCL19S database, when\/while ORCL19S is the primary database, ORCL19S it will send the redo to ORCL19 in sync mode, and to ZDLRAS2 in async mode. The second part means that when\/while ORCL19 database is the primary, ORCL19S will send the redo to ZDLRAS2 in async mode.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Now, I need to enable ZDLRA\u2019s. I will do one by one:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">DGMGRL&gt; show configuration;\r\n\r\nConfiguration - orcl19\r\n\r\n  Protection Mode: MaxAvailability\r\n  Members:\r\n  orcl19  - Primary database\r\n    orcl19s - Physical standby database\r\n      zdlras2 - Recovery appliance (disabled)\r\n        ORA-16905: The member was not enabled yet.\r\n\r\n    zdlras1 - Recovery appliance (disabled)\r\n      ORA-16905: The member was not enabled yet.\r\n\r\nFast-Start Failover:  Disabled\r\n\r\nConfiguration Status:\r\nSUCCESS   (status updated 35 seconds ago)\r\n\r\nDGMGRL&gt;\r\nDGMGRL&gt; enable recovery_appliance zdlras1;\r\nEnabled.\r\nDGMGRL&gt;<\/pre>\n<p style=\"text-align: justify;\">And at primary (ORCL19) alertlog will show (look the parameter set):<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">2019-11-09T21:36:24.189975+01:00\r\nData Guard Broker executes SQL [alter system set log_archive_config='dg_config=(ORCL19,orcl19s,zdlras1)']\r\n2019-11-09T21:36:24.205453+01:00\r\nALTER SYSTEM SET log_archive_config='dg_config=(ORCL19,orcl19s,zdlras1)' SCOPE=BOTH;\r\n2019-11-09T21:36:36.625928+01:00\r\nALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=BOTH;\r\n2019-11-09T21:36:36.638226+01:00\r\nRSM0 (PID:9918): Using STANDBY_ARCHIVE_DEST parameter default value as USE_DB_RECOVERY_FILE_DEST [krsd.c:18157]\r\n2019-11-09T21:36:36.650443+01:00\r\nALTER SYSTEM SET log_archive_dest_3='service=\"zdlras1-scan:1521\/zdlras1:VPCZDLRA\"','ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name=\"zdlras1\" net_timeout=30','valid_for=(online_logfile,all_roles)' SCOPE=BOTH;\r\n2019-11-09T21:36:36.670412+01:00\r\nALTER SYSTEM SET log_archive_dest_state_3='ENABLE' SCOPE=BOTH;\r\n2019-11-09T21:36:36.670547+01:00\r\nALTER SYSTEM ARCHIVE LOG\r\n2019-11-09T21:36:36.683698+01:00\r\nThread 1 cannot allocate new log, sequence 242\r\nCheckpoint not complete\r\n  Current log# 3 seq# 241 mem# 0: +DATA\/ORCL19\/ONLINELOG\/group_3.260.1022714131\r\n  Current log# 3 seq# 241 mem# 1: +RECO\/ORCL19\/ONLINELOG\/group_3.259.1022714135\r\n2019-11-09T21:36:38.922616+01:00\r\nLGWR (PID:7900): SRL selected to archive T-1.S-242\r\nLGWR (PID:7900): SRL selected for T-1.S-242 for LAD:2\r\n2019-11-09T21:36:38.934895+01:00\r\nThread 1 advanced to log sequence 242 (LGWR switch)\r\n  Current log# 1 seq# 242 mem# 0: +DATA\/ORCL19\/ONLINELOG\/group_1.258.1022714111\r\n  Current log# 1 seq# 242 mem# 1: +RECO\/ORCL19\/ONLINELOG\/group_1.257.1022714115\r\n2019-11-09T21:36:38.974260+01:00\r\nRSM0 (PID:9918): Archived Log entry 588 added for T-1.S-241 ID 0x135c2429 LAD:1<\/pre>\n<p style=\"text-align: justify;\">And in alertlog from standby (ORCL19S):<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">2019-11-09T21:36:23.036628+01:00\r\nData Guard Broker executes SQL [alter system set log_archive_config='dg_config=(orcl19s,orcl19,zdlras1)']\r\n2019-11-09T21:36:23.051110+01:00\r\nALTER SYSTEM SET log_archive_config='dg_config=(orcl19s,orcl19,zdlras1)' SCOPE=BOTH;\r\n2019-11-09T21:36:38.755320+01:00\r\n rfs (PID:22533): Standby controlfile consistent with primary\r\n2019-11-09T21:36:38.770320+01:00\r\n rfs (PID:22533): Selected LNO:4 for T-1.S-242 dbid 324042554 branch 1022714106\r\n2019-11-09T21:36:38.773001+01:00\r\nMRP0 (PID:11871): Media Recovery Waiting for T-1.S-242 (in transit)\r\n2019-11-09T21:36:38.776175+01:00\r\nARC0 (PID:9009): Archived Log entry 304 added for T-1.S-241 ID 0x135c2429 LAD:1\r\n2019-11-09T21:36:39.836191+01:00\r\nRecovery of Online Redo Log: Thread 1 Group 4 Seq 242 Reading mem 0\r\n  Mem# 0: +DATA\/ORCL19S\/ONLINELOG\/group_4.279.1023289067\r\n  Mem# 1: +RECO\/ORCL19S\/ONLINELOG\/group_4.269.1023289069<\/pre>\n<p style=\"text-align: justify;\">And now, the second ZDLRA:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">DGMGRL&gt; enable recovery_appliance zdlras2;\r\nEnabled.\r\nDGMGRL&gt;<\/pre>\n<p style=\"text-align: justify;\">Again, at primary (ORCL19) alertlog:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">2019-11-09T21:37:32.341087+01:00\r\nData Guard Broker executes SQL [alter system set log_archive_config='dg_config=(ORCL19,orcl19s,zdlras1,zdlras2)']\r\n2019-11-09T21:37:32.353276+01:00\r\nALTER SYSTEM SET log_archive_config='dg_config=(ORCL19,orcl19s,zdlras1,zdlras2)' SCOPE=BOTH;\r\n2019-11-09T21:37:40.827841+01:00\r\nALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=MEMORY SID='*';\r\n2019-11-09T21:37:41.943026+01:00\r\nLGWR (PID:7900): SRL selected to archive T-1.S-243\r\nLGWR (PID:7900): SRL selected for T-1.S-243 for LAD:2\r\n2019-11-09T21:37:41.949207+01:00\r\nThread 1 advanced to log sequence 243 (LGWR switch)\r\n  Current log# 2 seq# 243 mem# 0: +DATA\/ORCL19\/ONLINELOG\/group_2.259.1022714121\r\n  Current log# 2 seq# 243 mem# 1: +RECO\/ORCL19\/ONLINELOG\/group_2.258.1022714125\r\n2019-11-09T21:37:41.981177+01:00\r\nARC1 (PID:10098): Archived Log entry 591 added for T-1.S-242 ID 0x135c2429 LAD:1\r\n<\/pre>\n<p style=\"text-align: justify;\">And in the alertlog from standby (ORCL19S):<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">2019-11-09T21:37:31.175857+01:00\r\nData Guard Broker executes SQL [alter system set log_archive_config='dg_config=(orcl19s,orcl19,zdlras1,zdlras2)']\r\n2019-11-09T21:37:31.193280+01:00\r\nALTER SYSTEM SET log_archive_config='dg_config=(orcl19s,orcl19,zdlras1,zdlras2)' SCOPE=BOTH;\r\n2019-11-09T21:37:37.424268+01:00\r\nRSM0 (PID:10393): Using STANDBY_ARCHIVE_DEST parameter default value as USE_DB_RECOVERY_FILE_DEST [krsd.c:18157]\r\n2019-11-09T21:37:37.438735+01:00\r\nALTER SYSTEM SET log_archive_dest_2='service=\"zdlras2-scan:1521\/zdlras2:VPCZDLRA\"','ASYNC NOAFFIRM delay=0 optional compression=disable max_failure=0 reopen=300 db_unique_name=\"zdlras2\" net_timeout=30','valid_for=(standby_logfile,all_roles)' SCOPE=BOTH;\r\n2019-11-09T21:37:37.476545+01:00\r\nALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=BOTH;\r\n2019-11-09T21:37:41.778391+01:00\r\nMRP0 (PID:11871): Media Recovery Waiting for T-1.S-243 (in transit)\r\n2019-11-09T21:37:41.791532+01:00\r\nARC0 (PID:9009): Archived Log entry 312 added for T-1.S-242 ID 0x135c2429 LAD:1\r\n2019-11-09T21:37:41.793625+01:00\r\n rfs (PID:22533): Standby controlfile consistent with primary\r\n2019-11-09T21:37:41.800377+01:00\r\n rfs (PID:22533): Selected LNO:5 for T-1.S-243 dbid 324042554 branch 1022714106\r\n2019-11-09T21:37:42.826630+01:00\r\nRecovery of Online Redo Log: Thread 1 Group 5 Seq 243 Reading mem 0\r\n  Mem# 0: +DATA\/ORCL19S\/ONLINELOG\/group_5.278.1023289071\r\n  Mem# 1: +RECO\/ORCL19S\/ONLINELOG\/group_5.268.1023289073\r\n<\/pre>\n<p style=\"text-align: justify;\">And now the conf reports:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">DGMGRL&gt; show configuration;\r\n\r\nConfiguration - orcl19\r\n\r\n  Protection Mode: MaxAvailability\r\n  Members:\r\n  orcl19  - Primary database\r\n    orcl19s - Physical standby database\r\n      zdlras2 - Recovery appliance (receiving current redo)\r\n    zdlras1 - Recovery appliance\r\n\r\nFast-Start Failover:  Disabled\r\n\r\nConfiguration Status:\r\nSUCCESS   (status updated 54 seconds ago)\r\n\r\nDGMGRL&gt;<\/pre>\n<p style=\"text-align: justify;\"><strong>As you can see, the primary is cascading the redo to ORCL19S and ZDLRAS1. And the ORCL19S is cascading the redo (standby redo) to ZDLRAS2.<\/strong><\/p>\n<h4 style=\"text-align: justify;\">Checking ZERO RPO<\/h4>\n<p style=\"text-align: justify;\">To check if everything is fine, and we have zero RPO in both sited I made a simple archivelog at the primary site and check the cascade of events.<\/p>\n<p style=\"text-align: justify;\">At Primary ORCL19<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19p ~]$ rman target=\/ catalog=vpczdlra\/oracle@zdlras1\r\n\r\nRecovery Manager: Release 19.0.0.0.0 - Production on Sat Nov 9 21:43:25 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\r\n\r\nconnected to target database: ORCL19 (DBID=324042554)\r\nconnected to recovery catalog database\r\nPL\/SQL package VPCZDLRA.DBMS_RCVCAT version 19.03.00.00. in RCVCAT database is not current\r\nPL\/SQL package VPCZDLRA.DBMS_RCVMAN version 19.03.00.00 in RCVCAT database is not current\r\n\r\nRMAN&gt; alter system archive log current;\r\n\r\nStatement processed\r\n\r\nRMAN&gt; list copy of archivelog all completed after \"sysdate - 5\/1440\";\r\n\r\nList of Archived Log Copies for database with db_unique_name ORCL19\r\n=====================================================================\r\n\r\nKey     Thrd Seq     S Low Time\r\n------- ---- ------- - -------------------\r\n3296    1    243     A 09\/11\/2019 21:37:41\r\n        Name: +RECO\/ORCL19\/ARCHIVELOG\/2019_11_09\/thread_1_seq_243.389.1023918423\r\n\r\n\r\nRMAN&gt; list backup of archivelog all completed after \"sysdate - 5\/1440\";\r\n\r\n\r\nList of Backup Sets\r\n===================\r\n\r\n\r\nBS Key  Size       Device Type Elapsed Time Completion Time\r\n------- ---------- ----------- ------------ -------------------\r\n3304    322.00K    SBT_TAPE    00:00:02     09\/11\/2019 21:48:02\r\n        BP Key: 3305   Status: AVAILABLE  Compressed: YES  Tag: TAG20191109T214800\r\n        Handle: $RSCN_1_RTIM_1022714106_THRD_1_SEQ_243_CTKEY_3206_BACKUP   Media:\r\n\r\n  List of Archived Logs in backup set 3304\r\n  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time\r\n  ---- ------- ---------- ------------------- ---------- ---------\r\n  1    243     3082409    09\/11\/2019 21:37:41 3083705    09\/11\/2019 21:47:03\r\n\r\nRMAN&gt;<\/pre>\n<p style=\"text-align: justify;\">At Standby ORCL19S<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"no-highlight\">[oracle@orcl19s ~]$ rman target=\/ catalog=vpczdlra\/oracle@zdlras2\r\n\r\nRecovery Manager: Release 19.0.0.0.0 - Production on Sat Nov 9 21:44:58 2019\r\nVersion 19.5.0.0.0\r\n\r\nCopyright (c) 1982, 2019, Oracle and\/or its affiliates.  All rights reserved.\r\n\r\nconnected to target database: ORCL19 (DBID=324042554, not open)\r\nconnected to recovery catalog database\r\nPL\/SQL package VPCZDLRA.DBMS_RCVCAT version 19.03.00.00. in RCVCAT database is not current\r\nPL\/SQL package VPCZDLRA.DBMS_RCVMAN version 19.03.00.00 in RCVCAT database is not current\r\n\r\nRMAN&gt; list copy of archivelog all completed after \"sysdate - 5\/1440\";\r\n\r\nList of Archived Log Copies for database with db_unique_name ORCL19S\r\n=====================================================================\r\n\r\nKey     Thrd Seq     S Low Time\r\n------- ---- ------- - -------------------\r\n3428    1    243     A 09\/11\/2019 21:37:41\r\n        Name: +RECO\/ORCL19S\/ARCHIVELOG\/2019_11_09\/thread_1_seq_243.371.1023918423\r\n\r\n\r\nRMAN&gt; list backup of archivelog all completed after \"sysdate - 5\/1440\";\r\n\r\n\r\nList of Backup Sets\r\n===================\r\n\r\n\r\nBS Key  Size       Device Type Elapsed Time Completion Time\r\n------- ---------- ----------- ------------ -------------------\r\n3419    322.00K    SBT_TAPE    00:00:00     09\/11\/2019 21:47:10\r\n        BP Key: 3420   Status: AVAILABLE  Compressed: YES  Tag: TAG20191109T214710\r\n        Handle: $RSCN_1_RTIM_1022714106_THRD_1_SEQ_243_CTKEY_3306_BACKUP   Media:\r\n\r\n  List of Archived Logs in backup set 3419\r\n  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time\r\n  ---- ------- ---------- ------------------- ---------- ---------\r\n  1    243     3082409    09\/11\/2019 21:37:41 3083705    09\/11\/2019 21:47:03\r\n\r\nRMAN&gt;<\/pre>\n<p style=\"text-align: justify;\">As you can see here, the sequence 243 was created at primary, sent by DG to ORCL19S. And ZDLRAS1 created the backup for archivelog automatically, and the same was made by ZDLRAS2.<\/p>\n<h2 id=\"multiprotection\" style=\"text-align: justify;\">Multiple levels of protection<\/h2>\n<p style=\"text-align: justify;\">The idea of this post was to show how to protect a big environment with ZDLRA, reaching ZERO RPO for both sites, and going beyond the protection defined by Oracle MAA docs. If you look closely, the environment that I showed here has zero RPO and zero RTO. You will lose data only if you have a catastrophic failure in both sites (but you can protect even more if you use tape backup offloads from ZDLRA).<\/p>\n<p style=\"text-align: justify;\">As told before, these critical\/extreme critical environments need to follow some strict rules for data protection. Adding ZDLRA for it, provide an additional level of protection and allow you to use some features like incremental backup strategy.<\/p>\n<p style=\"text-align: justify;\">&nbsp;<\/p>\n<p style=\"text-align: justify;\"><strong>Disclaimer<\/strong>: <em>\u201cThe postings on this site are my own and don\u2019t necessarily represent my actual employer positions, strategies or opinions. The information here was edited to be useful for general purpose, specific data and identifications were removed to allow reach the generic audience and to be useful for the community. Post protected by copyright.\u201d<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>ZDLRA can be used from a small single database environment to big environments where you need protection in more than one site at the same time. At every level, you can use different features of ZDLRA to provide desirable protection. Here I will show how to reach zero RPO for both primary and standby databases. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[71,44,50,41,29,77,5,42,106,51],"tags":[85,67,66,100,65,101,113,114,74],"class_list":["post-626","post","type-post","status-publish","format-standard","hentry","category-19c","category-backup","category-broker","category-data-guard","category-database","category-engineeredsystems","category-oracle","category-rac","category-virtual-full-backup","category-zdlra","tag-broker","tag-data-guard","tag-database","tag-engineered-systems","tag-oracle","tag-recovery-appliance","tag-rpo","tag-rto","tag-zdlra"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ZDLRA, Multi-site protection - ZERO RPO for Primary and Standby - Fernando Simon<\/title>\n<meta name=\"description\" content=\"Check how to reach zero RPO for both primary and standby databases. All the steps, doc, and tech parts are full covered.\" \/>\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.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ZDLRA, Multi-site protection - ZERO RPO for Primary and Standby - Fernando Simon\" \/>\n<meta property=\"og:description\" content=\"Check how to reach zero RPO for both primary and standby databases. All the steps, doc, and tech parts are full covered.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/\" \/>\n<meta property=\"og:site_name\" content=\"Fernando Simon\" \/>\n<meta property=\"article:published_time\" content=\"2019-11-11T00:46:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-07-19T22:15:48+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png\" \/>\n<meta name=\"author\" content=\"Simon\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Simon\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"41 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/\"},\"author\":{\"name\":\"Simon\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9\"},\"headline\":\"ZDLRA, Multi-site protection &#8211; ZERO RPO for Primary and Standby\",\"datePublished\":\"2019-11-11T00:46:46+00:00\",\"dateModified\":\"2020-07-19T22:15:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/\"},\"wordCount\":2551,\"commentCount\":13,\"image\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png\",\"keywords\":[\"Broker\",\"Data Guard\",\"Database\",\"Engineered Systems\",\"Oracle\",\"Recovery Appliance\",\"RPO\",\"RTO\",\"ZDLRA\"],\"articleSection\":[\"19c\",\"Backup\",\"Broker\",\"Data Guard\",\"Database\",\"Engineered Systems\",\"Oracle\",\"RAC\",\"Virtual Full Backup\",\"ZDLRA\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/\",\"url\":\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/\",\"name\":\"ZDLRA, Multi-site protection - ZERO RPO for Primary and Standby - Fernando Simon\",\"isPartOf\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png\",\"datePublished\":\"2019-11-11T00:46:46+00:00\",\"dateModified\":\"2020-07-19T22:15:48+00:00\",\"author\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9\"},\"description\":\"Check how to reach zero RPO for both primary and standby databases. All the steps, doc, and tech parts are full covered.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#primaryimage\",\"url\":\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png\",\"contentUrl\":\"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.fernandosimon.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ZDLRA, Multi-site protection &#8211; ZERO RPO for Primary and Standby\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#website\",\"url\":\"https:\/\/www.fernandosimon.com\/blog\/\",\"name\":\"Fernando Simon\",\"description\":\"Have you hugged your backup today?\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.fernandosimon.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9\",\"name\":\"Simon\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a3dbc48de62fffb1829befb4a588d789ec6dc5e05977afabb3407a5f37a16482?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a3dbc48de62fffb1829befb4a588d789ec6dc5e05977afabb3407a5f37a16482?s=96&d=mm&r=g\",\"caption\":\"Simon\"},\"sameAs\":[\"http:\/\/www.fernandosimon.com\"],\"url\":\"https:\/\/www.fernandosimon.com\/blog\/author\/simon\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ZDLRA, Multi-site protection - ZERO RPO for Primary and Standby - Fernando Simon","description":"Check how to reach zero RPO for both primary and standby databases. All the steps, doc, and tech parts are full covered.","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.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/","og_locale":"en_US","og_type":"article","og_title":"ZDLRA, Multi-site protection - ZERO RPO for Primary and Standby - Fernando Simon","og_description":"Check how to reach zero RPO for both primary and standby databases. All the steps, doc, and tech parts are full covered.","og_url":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/","og_site_name":"Fernando Simon","article_published_time":"2019-11-11T00:46:46+00:00","article_modified_time":"2020-07-19T22:15:48+00:00","og_image":[{"url":"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png","type":"","width":"","height":""}],"author":"Simon","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Simon","Est. reading time":"41 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#article","isPartOf":{"@id":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/"},"author":{"name":"Simon","@id":"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9"},"headline":"ZDLRA, Multi-site protection &#8211; ZERO RPO for Primary and Standby","datePublished":"2019-11-11T00:46:46+00:00","dateModified":"2020-07-19T22:15:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/"},"wordCount":2551,"commentCount":13,"image":{"@id":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#primaryimage"},"thumbnailUrl":"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png","keywords":["Broker","Data Guard","Database","Engineered Systems","Oracle","Recovery Appliance","RPO","RTO","ZDLRA"],"articleSection":["19c","Backup","Broker","Data Guard","Database","Engineered Systems","Oracle","RAC","Virtual Full Backup","ZDLRA"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/","url":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/","name":"ZDLRA, Multi-site protection - ZERO RPO for Primary and Standby - Fernando Simon","isPartOf":{"@id":"https:\/\/www.fernandosimon.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#primaryimage"},"image":{"@id":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#primaryimage"},"thumbnailUrl":"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png","datePublished":"2019-11-11T00:46:46+00:00","dateModified":"2020-07-19T22:15:48+00:00","author":{"@id":"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9"},"description":"Check how to reach zero RPO for both primary and standby databases. All the steps, doc, and tech parts are full covered.","breadcrumb":{"@id":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#primaryimage","url":"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png","contentUrl":"http:\/\/www.fernandosimon.com\/blog\/wp-content\/uploads\/2019\/11\/ZDLRA-ZERO-RPO-PRY-STB-1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.fernandosimon.com\/blog\/zdlra-multi-site-protection-zero-rpo-for-primary-and-standby\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.fernandosimon.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ZDLRA, Multi-site protection &#8211; ZERO RPO for Primary and Standby"}]},{"@type":"WebSite","@id":"https:\/\/www.fernandosimon.com\/blog\/#website","url":"https:\/\/www.fernandosimon.com\/blog\/","name":"Fernando Simon","description":"Have you hugged your backup today?","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.fernandosimon.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/386da956604bca0d5be5dd52210c1dd9","name":"Simon","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.fernandosimon.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a3dbc48de62fffb1829befb4a588d789ec6dc5e05977afabb3407a5f37a16482?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a3dbc48de62fffb1829befb4a588d789ec6dc5e05977afabb3407a5f37a16482?s=96&d=mm&r=g","caption":"Simon"},"sameAs":["http:\/\/www.fernandosimon.com"],"url":"https:\/\/www.fernandosimon.com\/blog\/author\/simon\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5ofTp-a6","_links":{"self":[{"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/posts\/626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/comments?post=626"}],"version-history":[{"count":0,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/posts\/626\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/media?parent=626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/categories?post=626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandosimon.com\/blog\/wp-json\/wp\/v2\/tags?post=626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}