Monday, May 31, 2021

How to Build Standby Database using DGMGRL

 How to Build Standby Database using DGMGRL.


  • The SYS$BACKGROUND service is the service that the Oracle background processes use when establishing a connection to the database.  
  • The SYS$USERS service is used for local connections. A third service is created that gets its name from the setting of the SERVICE_NAMES parameter. By default the SERVICE_NAMES parameter is populated by the value of DB_UNIQUE_NAME, and by default DB_UNIQUE_NAME is populated from the DB_NAME initialization parameter.
     
  • In other words, for a freshly created Oracle database, if you don’t set the SERVICE_NAMES or the DB_UNIQUE_NAME initialization parameters,a service is created by default with the same name as the value in the DB_NAME initialization parameter.


Step 1

Primary Database:- Listener.ora

[oraprd@prd1 admin]$ cat listener.ora
# listener.ora Network Configuration File: /oracle/PRD/19/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENERPRMDB =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = LAPPRIMDB.hana.com)

     (ORACLE_HOME = /oracle/PRD/19)
      (SID_NAME = LAPPRIMDB)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = LAPPRIMDB_DGMGRL)
      (ORACLE_HOME = /oracle/PRD/19)
      (SID_NAME = LAPPRIMDB)
    )
  )

ADR_BASE_LISTENERPRMDB = /oracle/PRD

LISTENERPRMDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.18)(PORT = 1526))
  )
ADR_BASE_LISTENERPRD = /oracle/PRD


Where ==>

(GLOBAL_DBNAME = LAPPRIMDB.hana.com):- Parameter GLOBAL_DBNAME to identify the database service

(SID_NAME = LAPPRIMDB) :- DB_NAME/SID NAME/INSTANCE_NAME

(GLOBAL_DBNAME = LAPPRIMDB_DGMGRL):- Use for BROKER connection.

(SID_NAME = LAPPRIMDB) :- DB_NAME/INSTANCE_NAME

 

 

Primary Database:- Tnsname.ora 

[oraprd@prd1 admin]$ cat tnsnames.ora

listener_lap=(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.18)(PORT = 1526)) (CONNECT_DATA = (SERVER = DEDICATED) 
(SID = LAPPRIMDB)))

LAPDRDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.19)(PORT = 1526))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = LAPDRDB)
    )
  )
LAPPRIMDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.18)(PORT = 1526))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = LAPPRIMDB)
    )
  )


STANDBY DATABASE: Listener.ora & Tnsname.ora Configuration.

[oraprd@prd2 admin]$ cat listener.ora
# listener.ora Network Configuration File: /oracle/PRD/19/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENERDRDB =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = LAPDRDB.hana.com)
      (ORACLE_HOME = /oracle/PRD/19)
      (SID_NAME = LAPDRDB)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = LAPDRDB_DGMGRL)
      (ORACLE_HOME = /oracle/PRD/19)
      (SID_NAME = LAPDRDB)
    )
  )

LISTENERDRDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.19)(PORT = 1526))
  )
ADR_BASE_LISTENERDRDB = /oracle/PRD
[oraprd@prd2 admin]$


Standby Database:- Tnsname.ora 
[oraprd@prd2 admin]$ cat tnsnames.ora

 
LAPPRIMDB = 
(DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.18)(PORT = 1526))
  )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = LAPPRIMDB)
    )
  )

LAPDRDB =
  (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.19)(PORT = 1526))
  )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = LAPDRDB)
    )
  )



Set Parameter on Primary Database.

Step 2: Use this Same Script on Satandby And Primary database.

[oraprd@prd1 STANDBY]$ cat 1_create_dg_para_set.sh
sqlplus / as sysdba <<eof
alter database force logging;
select log_mode,force_logging from v\$database;
show parameter LOG_ARCHIVE_DEST_2
alter system set DB_UNIQUE_NAME=LAPPRIMDB SCOPE=SPFILE;
--ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=" " scope=both;===>if any parameter set
alter system set dg_broker_start=true scope=both;
show parameter dg_broker_start
create pfile='/tmp/initLAPDRDB.ora' from spfile;
eof
ps -ef |grep dmon
ls -ltr /tmp/initLAPDRDB.ora

set dg_broker_start=true  ===> This Parameter will create  below DG configuration files


dg_broker_config_file1   /oracle/PRD/19/dbs/dr1LAPPRIMDB1.dat
dg_broker_config_file2   /oracle/PRD/19/dbs/dr1LAPPRIMDB2.dat


Take Level0 Backup of database of Primary database.

[oraprd@prd1 STANDBY]$ cat rman_backup.sh
sqlplus -s / as sysdba <<eof
alter system switch logfile;
alter system switch logfile;
eof

export NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS';
rman target / <<eof
backup database format '/BKP/bkp_LAP.%U' tag Level0_bkp;
backup archivelog all format '/BKP/bkp_LAP_arc.%U' tag Arc_bkp;
backup current controlfile for standby format '/BKP/bkp_standby_crl.%U';
eof


[oraprd@prd1 dbs]$ ls -ltr initLAPPRIMDB.ora
-rw-r----- 1 oraprd oinstall 3685 May 28 23:34 initLAPPRIMDB.ora
[oraprd@prd1 dbs]$ ls -ltr orapwLAPPRIMDB
-rw-r----- 1 oraprd oinstall 3584 May 28 23:31 orapwLAPPRIMDB
[oraprd@prd1 dbs]$ grep db_name initLAPPRIMDB.ora
*.db_name='LAP'==> here DB name is LAP
[oraprd@prd1 dbs]$ grep UNIQUE initLAPPRIMDB.ora
[oraprd@prd1 dbs]$ grep -i UNIQUE  initLAPPRIMDB.ora
*.db_unique_name='LAPPRIMDB'
[oraprd@prd1 dbs]$

Add Standby Redolog.

sqlplus -s / as sysdba <<eof
alter database add standby logfile group 4 ('/u001/oradata/LAP/redo04.log') size 200m reuse;
alter database add standby logfile group 5 ('/u001/oradata/LAP/redo05.log') size 200m reuse;
alter database add standby logfile group 6 ('/u001/oradata/LAP/redo06.log') size 200m reuse;
alter database add standby logfile group 7 ('/u001/oradata/LAP/redo07.log') size 200m reuse;
eof

To verify the Redo

[oraprd@prd1 STANDBY]$ cat show_redo.sh
sqlplus -s / as sysdba <<eof
select group#,thread#,sequence#,bytes,archived,status from v\$log;
select group#,sequence#,bytes,used,archived,status from v\$standby_log;

select member from v\$logfile;
set lines 200
col MEMBER for a40
select lf.group#,l_type.log_type as type, lf.member
from v\$logfile lf
join (
select group#,'ORL' as log_type from v\$log
union
select group#,'SRL' as log_type from v\$standby_log) l_type
on lf.group#=l_type.group#
order by lf.group#;
eof



Step 3: Use Below Same Script on Satandby.


[oraprd@prd2 dbs]$ ls -ltr orapwLAPDRDB
-rw-r----- 1 oraprd oinstall 3584 May 29 09:45 orapwLAPDRDB
[oraprd@prd2 dbs]$ ls -ltr initLAPDRDB.ora
-rw-r----- 1 oraprd oinstall 3691 May 29 09:35 initLAPDRDB.ora
[oraprd@prd2 dbs]$ grep -i DB_NAME initLAPDRDB.ora
*.db_name='LAP'
[oraprd@prd2 dbs]$ grep -i UNIQUE_NAME initLAPDRDB.ora
*.db_unique_name='LAPDRDB'

SQL> show parameter dg

NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------------
dg_broker_config_file1               string      /oracle/PRD/19/dbs/dr1LAPDRDB.dat
                                                
dg_broker_config_file2               string      /oracle/PRD/19/dbs/dr2LAPDRDB.dat
                                                
dg_broker_start                      boolean     TRUE


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0

SQL> create spfile from pfile;

File created.

SQL> exit


[oraprd@prd2 STANDBY]$ cat 1_create_dg_para_set.sh
sqlplus / as sysdba <<eof
show parameter LOG_ARCHIVE_DEST_2
alter system set DB_UNIQUE_NAME=LAPDRDB SCOPE=SPFILE;
--ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=" " scope=both;===>if any parameter set
alter system set dg_broker_start=true scope=both;
show parameter dg_broker_start
eof
ps -ef |grep dmon
[oraprd@prd1 STANDBY]$



Restore Database on Standby Side. 

Restore Controlfile:-

[oraprd@prd2 STANDBY]$ cat rman_rest_con.sh
#!/bin/bash
. /BKP/.rman_env
logfile=/tmp/$(date +%Y%m%d_%H%M%S)_con.log

rman target / <<EOF > ${logfile}
set echo on;
restore controlfile from "/BKP/bkp_standby_crl.0mvtefcb_1_1";
EOF

echo "Controlfile Restoration is completed..." >> ${logfile}
echo "tail -100f $logfile"
exit

List Database Backup:- 
[oraprd@prd2 STANDBY]$ cat rman_list_db.sh
#!/bin/bash
. /BKP/.rman_env
logfile=/tmp/$(date +%Y%m%d_%H%M%S)_con.log

rman target / <<EOF > ${logfile}
set echo on;
list backup of database;
list backup of archivelog all;
EOF

echo "tail -100f $logfile"

[oraprd@prd2 STANDBY]$

Restore Database:-

[oraprd@prd2 STANDBY]$ cat rman_rest_db.sh
#!/bin/bash
. /BKP/.rman_env
logfile=/tmp/$(date +%Y%m%d_%H%M%S)_${ORACLE_SID}.log


echo "tail -100f $logfile"
echo "Restoration started..." > ${logfile}

rman target / <<EOF >> ${logfile}
set echo on;
run
{
restore database;
recover database;
}
EOF

echo "Database  Restoration is completed..." >> ${logfile}
exit
[oraprd@prd2 STANDBY]$


[oraprd@prd2 STANDBY]$ cat add_standby_redo.sh
sqlplus -s / as sysdba <<eof
recover managed standby database cancel;
alter database add standby logfile group 4 ('/u001/oradata/LAP/redo04.log') size 200m reuse;
alter database add standby logfile group 5 ('/u001/oradata/LAP/redo05.log') size 200m reuse;
alter database add standby logfile group 6 ('/u001/oradata/LAP/redo06.log') size 200m reuse;
alter database add standby logfile group 7 ('/u001/oradata/LAP/redo07.log') size 200m reuse;
eof


[oraprd@prd2 STANDBY]$ cat show_redo.sh
sqlplus -s / as sysdba <<eof
select group#,thread#,sequence#,bytes,archived,status from v\$log;
select group#,sequence#,bytes,used,archived,status from v\$standby_log;

select member from v\$logfile;
eof
[oraprd@prd2 STANDBY]$


Stop And Start the Standby Database.
[oraprd@prd2 STANDBY]$ cat stop_start_standby.sh
export ORACLE_SID=LAPDRDB
sta()
{
sqlplus -s / as sysdba <<eof
startup nomount
alter database mount standby database;
alter database recover managed standby database disconnect from session;
select process from v\$managed_standby;
set lines 200
col destination for a40
select destination,status,error from v\$archive_dest_status
where rownum< 3;
eof
}


stp()
{
sqlplus -s / as sysdba <<eof
alter database recover managed standby database cancel;
shut immediate;
eof
}


stp
sta


[oraprd@prd2 STANDBY]$ cat stat.sh
sqlplus -s / as sysdba <<eof
set lines 200
col destination for a40
select destination,status,error from v\$archive_dest_status
where rownum< 3;
select process from v\$managed_standby;
show parameter  service name
select name,database_role,open_mode,db_unique_name from v\$database;
eof
[oraprd@prd2 STANDBY]$



[oraprd@prd2 STANDBY]$ cat arch_stat.sh
export NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS'
sqlplus -s / as sysdba<<eof

set lines 200


SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME,FIRST_CHANGE#,NEXT_CHANGE#
FROM V\$ARCHIVED_LOG ORDER BY SEQUENCE#;


SELECT SEQUENCE#,APPLIED FROM V\$ARCHIVED_LOG
ORDER BY SEQUENCE#;
eof

[oraprd@prd2 STANDBY]$



From Primary Database Server.

[oraprd@prd1 STANDBY]$ cat 2_create_dg_add_prim_db.sh
dgmgrl <<eof
connect sys/abc#123@lapprimdb
create configuration 'DRsolution' as primary database is 'LAPPRIMDB' connect identifier is LAPPRIMDB;
show configuration;
eof
[oraprd@prd1 STANDBY]$


[oraprd@prd1 STANDBY]$ cat 3_create_dg_add_standby_db.sh
dgmgrl <<eof
connect sys/abc#123@LAPPRIMDB
add database LAPDRDB as connect identifier is LAPDRDB;
show configuration;
eof
[oraprd@prd1 STANDBY]$


[oraprd@prd1 STANDBY]$ cat 4_created_enable_dg.sh
dgmgrl <<eof
connect sys/abc#123@lapprimdb
show configuration;
enable configuration;
show configuration;
eof
[oraprd@prd1 STANDBY]$

To verify the Configuration 

[oraprd@prd1 STANDBY]$ cat show_dg.sh
dgmgrl <<eof
connect sys/abc#123@lapprimdb
show configuration;
show configuration verbose
show database verbose 'LAPDRDB';
show database verbose 'LAPPRIMDB';
exit
eof

echo "Bye...:"
[oraprd@prd1 STANDBY]$



[oraprd@prd1 STANDBY]$ dgmgrl /
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon May 31 18:19:40 2021
Version 19.8.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "LAPPRIMDB"
Connected as SYSDG.
DGMGRL> connect sys/abc#123@lapprimdb
Connected to "LAPPRIMDB"
Connected as SYSDBA.
DGMGRL> show configuration;

Configuration - NewDR

  Protection Mode: MaxAvailability
  Members:
  LAPPRIMDB   - Primary database
    lapdrdb - Physical standby database

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 11 seconds ago)

DGMGRL>

Please update StaticConnectIdentifier  value with tnsentry.

[oraprd@prd1 STANDBY]$ cat updat_staticConnection.sh
upd()
{
dgmgrl <<eof
connect sys/abc#123@lap
edit database lapprimdb set property StaticConnectIdentifier='lapprimdb';
edit database lapdrdb set property StaticConnectIdentifier='lapdrdb';
eof
}


**********************************************************************************
                                                         EOD
**********************************************************************************


DGMGRL : Switchover Activity.

 Switchover Activity.

[oraprd@prd2 STANDBY]$ dgmgrl
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon May 31 18:21:07 2021
Version 19.8.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
Welcome to DGMGRL, type "help" for information.
DGMGRL> connect sys/abc#123@lapdrdb
Connected to "LAPDRDB"
Connected as SYSDBA.
DGMGRL> show configuration;
Configuration - NewDR
  Protection Mode: MaxAvailability
  Members:
  LAPDRDB   - Primary database
    lapprimdb - Physical standby database
Fast-Start Failover:  Disabled
Configuration Status:
SUCCESS   (status updated 33 seconds ago)
DGMGRL>


[oraprd@prd2 STANDBY]$ ./stat.sh
DESTINATION                              STATUS    ERROR
---------------------------------------- --------- -----------------------------------------------------------------
/u001/PRD/arch                           VALID
lapprimdb                                VALID
PROCESS
---------
ARCH
DGRD
DGRD
ARCH
ARCH
ARCH
DGRD
LGWR
8 rows selected.
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      LAPDRDB.hana.com
NAME      DATABASE_ROLE    OPEN_MODE            DB_UNIQUE_NAME
--------- ---------------- -------------------- ------------------------------
LAP       PRIMARY          READ WRITE           LAPDRDB
[oraprd@prd2 STANDBY]$



[oraprd@prd1 STANDBY]$ cat validate_dg.sh
dgmgrl <<eof
connect sys/abc#123@lapdrdb
show configuration
validate database 'lapdrdb'
eof
[oraprd@prd1 STANDBY]$


[oraprd@prd1 STANDBY]$ ./validate_dg.sh
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon May 31 18:26:49 2021
Version 19.8.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
Welcome to DGMGRL, type "help" for information.
DGMGRL> Connected to "LAPDRDB"
Connected as SYSDBA.
DGMGRL>
Configuration - NewDR
  Protection Mode: MaxAvailability
  Members:
  LAPDRDB   - Primary database
    lapprimdb - Physical standby database
Fast-Start Failover:  Disabled
Configuration Status:
SUCCESS   (status updated 3 second ago)
DGMGRL>
  Database Role:    Primary database
  Ready for Switchover:  Yes
  Flashback Database Status:
    LAPDRDB:  Off
  Managed by Clusterware:
    LAPDRDB:  NO
    Validating static connect identifier for the primary database LAPDRDB...
    The static connect identifier allows for a connection to database "LAPDRDB".
DGMGRL> DGMGRL> [oraprd@prd1 STANDBY]$


[oraprd@prd1 STANDBY]$ cat ./validate_dg.sh
dgmgrl <<eof
connect sys/abc#123@lapdrdb
show configuration
validate database 'lapdrdb'
eof


look like we can do switchover,

[oraprd@prd2 STANDBY]$ dgmgrl /
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon May 31 18:28:04 2021
Version 19.8.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
Connected to "LAPDRDB"
Connected as SYSDG.
DGMGRL> connect sys/abc#123@lapdrd
Connected to "LAPDRDB"
Connected as SYSDBA.
DGMGRL> show configuration;

Configuration - NewDR

  Protection Mode: MaxAvailability
  Members:
  LAPDRDB   - Primary database
    lapprimdb - Physical standby database

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 35 seconds ago)

DGMGRL> switchover to lapprimdb;
Performing switchover NOW, please wait...
Operation requires a connection to database "lapprimdb"
Connecting ...
Connected to "LAPPRIMDB"
Connected as SYSDBA.
New primary database "lapprimdb" is opening...
Operation requires start up of instance "LAPDRDB" on database "LAPDRDB"
Starting instance "LAPDRDB"...
Connected to an idle instance.
ORACLE instance started.
Connected to "LAPDRDB"
Database mounted.
Connected to "LAPDRDB"
Switchover succeeded, new primary is "lapprimdb"
DGMGRL>


After Switchover.===>

DGMGRL> show configuration;

Configuration - NewDR

  Protection Mode: MaxAvailability
  Members:
  lapprimdb - Primary database
    LAPDRDB   - Physical standby database
      Warning: ORA-16854: apply lag could not be determined

Fast-Start Failover:  Disabled

Configuration Status:
WARNING   (status updated 38 seconds ago)

DGMGRL>

LAPPRIMDB Become Primary Database and LAPDRDB become Standby Database.

******************************************************************
                          EOD
******************************************************************

 

DGMRL Switch Over Error :- ORA-12541: TNS:no listener, ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

While Playing with DGMGRL ,During Switchover testing I got following Two Errors

Error Number 1: 
Unable to connect to database using (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=prd1.hana.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=LAPPRIMDB_DGMGRL.hana.com)(INSTANCE_NAME=LAPPRIMDB)(SERVER=DEDICATED)))
ORA-12541: TNS:no listener
Failed.
Please complete the following steps to finish switchover:
        start up and mount instance "LAPPRIMDB" of database "lapprimdb"

Error Number 2:
Starting instance "LAPDRDB"...
Unable to connect to database using (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.19)(PORT=1526))(CONNECT_DATA=(SERVICE_NAME=LAPDRDB_DGMGRL.hana.com)(INSTANCE_NAME=LAPDRDB)(SERVER=DEDICATED)))
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
Failed.
Please complete the following steps to finish switchover:
        start up and mount instance "LAPDRDB" of database "LAPDRDB"

After Switchover I have to start a database Manually.  But  this is not correct setup , something gone Wrong .
So let's see the 
show  database lapdrdb verbose
show database lapprimdb verbose
I checked the connection and I see the Service_name=LAPPRIMDB_DGMGRL.hana.com  its used
on both side.
StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=prd1.hana.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=LAPPRIMDB_DGMGRL.hana.com)(INSTANCE_NAME=LAPPRIMDB)(SERVER=DEDICATED)))'
StaticConnectIdentifier ='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.19)(PORT=1526))(CONNECT_DATA=(SERVICE_NAME=LAPDRDB_DGMGRL.hana.com)(INSTANCE_NAME=LAPDRDB)(SERVER=DEDICATED)))'

And my tns entry does not contain Service_name=LAPPRIMDB_DGMGRL.hana.com on prim and Standby Side.

LAPPRIMDB =
  (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.18)(PORT = 1526))
  )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = LAPPRIMDB)======> Here SID Used Not Sevice_name
    )
  )
LAPDRDB =
  (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.19)(PORT = 1526))
  )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = LAPDRDB)======>Here SID Used Not Sevice_name
    )
  )

To resolve the above error  I  update the StaticConnectIdentifier value.
upd()
{
dgmgrl <<eof
connect sys/abc#123@lapdrdb
edit database lapprimdb set property StaticConnectIdentifier='lapprimdb';
edit database lapdrdb set property StaticConnectIdentifier='lapdrdb';
eof
}
upd

Then I have begin one more time Switchover activity.
[oraprd@prd2 STANDBY]$ dgmgrl /
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon May 31 16:00:27 2021
Version 19.8.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected to "LAPDRDB"
Connected as SYSDG.
DGMGRL> connect sys/abc#123@lapdrdb
Connected to "LAPDRDB"
Connected as SYSDBA.
DGMGRL> show configuration;
Configuration - NewDR
  Protection Mode: MaxAvailability
  Members:
  LAPDRDB   - Primary database
    lapprimdb - Physical standby database
Fast-Start Failover:  Disabled
Configuration Status:
SUCCESS   (status updated 59 seconds ago)
DGMGRL> switchover to 'lapprimdb';
Performing switchover NOW, please wait...
Operation requires a connection to database "lapprimdb"
Connecting ...
Connected to "LAPPRIMDB"
Connected as SYSDBA.
New primary database "lapprimdb" is opening...
Operation requires start up of instance "LAPDRDB" on database "LAPDRDB"
Starting instance "LAPDRDB"...
Connected to an idle instance.
ORACLE instance started.
Connected to "LAPDRDB"
Database mounted.
Connected to "LAPDRDB"
Switchover succeeded, new primary is "lapprimdb"

This Time I am successful to do switchover Without Error.

So Please  careful while Setup the DGMGRL , Particular about the tnsentry and Listener ora configuration , Because sometime we used the Service_name or  SID  in Configuration.
And here in my setup I have used the SID in both tns & Listener file.


By default, the broker assumes a static service name of db_unique_name_DGMGRL.db_domain and expects the listener has been started with the following content in the listener.ora file:

LISTENER = (DESCRIPTION =
     (ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)
     (PORT=port_num))))
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=sid_name)
     (GLOBAL_DBNAME=db_unique_name_DGMGRL.db_domain)
     (ORACLE_HOME=oracle_home)
     (ENVS="TNS_ADMIN=oracle_home/network/admin")))


My Entry :- 

SID_LIST_LISTENERDRDB =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = LAPDRDB.hana.com)
      (ORACLE_HOME = /oracle/PRD/19)
      (SID_NAME = LAPDRDB)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = LAPDRDB_DGMGRL)
      (ORACLE_HOME = /oracle/PRD/19)
      (SID_NAME = LAPDRDB)
    )
  )
LISTENERDRDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.19)(PORT = 1526))
  )

SP2-0642: SQL*Plus internal error state 2021, context 1:1821:0 Unsafe to proceed ERROR: ORA--0001: Message -1 not found; product=RDBMS; facility=ORA SP2-0152: ORACLE may not be functioning properly

 SP2-0642: SQL*Plus internal error state 2021, context 1:1821:0

Unsafe to proceed

ERROR:

ORA--0001: Message -1 not found;  product=RDBMS; facility=ORA


Today while working on one of the Shell script , I got the above the error, and its weird and  I have experienced first time   So not sure what's going on.


ssdqt.wt:oraqt 99> sh nil.sh QT

QWT
31-MAY-2021 15:59:06
QWT
SP2-0642: SQL*Plus internal error state 2021, context 1:1821:0
Unsafe to proceed
ERROR:
ORA--0001: Message -1 not found;  product=RDBMS; facility=ORA
SP2-0152: ORACLE may not be functioning properly
ssdqt.wt:oraqt 99> 


Till now this script was running fine , but today its giving me error . But after looking at Script Minutely .

Snippets from main script , which giving me above error.

ssdqt.wt:oraqt 99> cat nil.sh
chk_dbconn()
{
sqlplus -s /  <<EOF
set pages  0
set lines  132
set term   off
set recsep off
set feedback off
select name from v\$database;
EOF
}
###############################################################################
# chk_conn
###############################################################################
chk_conn()
{
sqlplus -s / <<-EOF
set pages  0
set lines  132
set term   off
set recsep off
set feedback off
select name from v\$database;
EOF
}
###############################################################################
# sel_date
###############################################################################
sel_date1()
{
sqlplus -s / <<-EOF
set pages  0
set lines  132
set term   off
set recsep off
set feedback off
select to_char(sysdate, 'DD-MON-YYYY HH24:MI:SS') from dual;
EOF
}


ORACLE_SID=$1
LEVEL=L0
if [ -z "$ORACLE_SID" ]
then
        echo "ORACLE_SID is null"
        exit
fi
.  /home/oraqt/.rman_env
CONT=$(chk_dbconn)
echo $CONT
sel_date1
SID=`echo $ORACLE_SID | tr '[:upper:]' '[:lower:]'`
if [ $LOGNAME != "ora${SID}" ]
then
        echo "Unix id must be ora${SID}"
        exit
fi
DT=`date "+%m_%d_%y_%H_%M"`
export NLS_DATE_FORMAT='DD-MON-YYYY H24:MI:SS'==> Not proper 
DIR=/tmp
if [ "$ORACLE_SID" != "$CONT" ]
then
        echo "Source database is down [$CONN] "
        exit
fi
echo $CONT
cat $DIR/RMAN_DATE

ssdqt.wt:oraqt 99> 

After correcting Value My Script able to run Properly.
export NLS_DATE_FORMAT='DD-MON-YYYY HH24:MI:SS'


************************************************************
                        EOD
************************************************************

Small Test:- I did small Test case on Database.

[oraprd@prd2 STANDBY]$ echo $NLS_DATE_FORMAT
[oraprd@prd2 STANDBY]$ export NLS_DATE_FORMAT=MM-mon-YYYY
[oraprd@prd2 STANDBY]$ sqlplus /nolog
SP2-0642: SQL*Plus internal error state 2021, context 1:1816:0
Unsafe to proceed
ERROR:
ORA--0001: Message -1 not found;  product=RDBMS; facility=ORA
SP2-0152: ORACLE may not be functioning properly
[oraprd@prd2 STANDBY]$
[oraprd@prd2 STANDBY]$ sqlplus /  as sysdba 
SP2-0642: SQL*Plus internal error state 2021, context 1:1816:0
Unsafe to proceed
ERROR:
ORA--0001: Message -1 not found;  product=RDBMS; facility=ORA
SP2-0152: ORACLE may not be functioning properly
[oraprd@prd2 STANDBY]$ export NLS_DATE_FORMAT=DD-MON-YYYY
[oraprd@prd2 STANDBY]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Mon May 31 14:50:03 2021
Version 19.8.0.0.0
Copyright (c) 1982, 2020, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.8.0.0.0
SQL>
I can  login to the Database..

CONFIGURATION SET PROTECTION MODE


CONFIGURATION SET PROTECTION MODE


Syntax for  change the Mode.

 dgmgrl <<eof
connect sys/abc#123@lapprimdb
EDIT DATABASE 'lapdrdb' SET PROPERTY 'LogXptMode'='SYNC';
EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
show configuration;
exit;
eof
[oraprd@prd1 STANDBY]$ cat change_mode_dg.sh
dgmgrl <<eof
connect sys/abc#123@lapprimdb
EDIT CONFIGURATION SET PROTECTION MODE AS MAXPERFORMANCE;
show configuration;
exit;
eof
dgmgrl <<eof
connect sys/abc#123@lapdrdb
show configuration;
show configuration verbose
show database verbose 'LAPDRDB';
show database verbose 'LAPPRIMDB';
exit
eof
echo "Bye...:"


[oraprd@prd2 STANDBY]$ ./5_show_dg.sh
Welcome to DGMGRL, type "help" for information.
DGMGRL> Connected to "LAPDRDB"
Connected as SYSDBA.
DGMGRL>
Configuration - NewDR
  Protection Mode: MaxPerformance
  Members:
  LAPDRDB   - Primary database
    lapprimdb - Physical standby database
Fast-Start Failover:  Disabled
Configuration Status:
SUCCESS   (status updated 55 seconds ago)
DGMGRL>

Configuration - NewDR
  Protection Mode: MaxPerformance ====> Change to Max Availability Mode
  Members:
  LAPDRDB   - Primary database

    lapprimdb - Physical standby database
  Properties:
    FastStartFailoverThreshold      = '30'
    OperationTimeout                = '30'
    TraceLevel                      = 'USER'
    FastStartFailoverLagLimit       = '30'
    CommunicationTimeout            = '180'
    ObserverReconnect               = '0'
    FastStartFailoverAutoReinstate  = 'TRUE'
    FastStartFailoverPmyShutdown    = 'TRUE'
    BystandersFollowRoleChange      = 'ALL'
    ObserverOverride                = 'FALSE'
    ExternalDestination1            = ''
    ExternalDestination2            = ''
    PrimaryLostWriteAction          = 'CONTINUE'
    ConfigurationWideServiceName    = 'LAP_CFG'
Fast-Start Failover:  Disabled
Configuration Status:
SUCCESS
DGMGRL>
Database - LAPDRDB
  Role:               PRIMARY
  Intended State:     TRANSPORT-ON
  Instance(s):
    LAPDRDB
  Properties:
    DGConnectIdentifier             = 'lapdrdb'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = ''
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = ''
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '0'
    LogArchiveMinSucceedDest        = '0'
    DataGuardSyncLatency            = '0'
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = ''
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    ArchiveLocation                 = ''
    AlternateLocation               = ''
    StandbyArchiveLocation          = ''
    StandbyAlternateLocation        = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    LogXptStatus                    = '(monitor)'
    SendQEntries                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    HostName                        = 'prd2.hana.com'
    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.19)(PORT=1526))(CONNECT_DATA=(SERVICE_NAME=LAPDRDB_DGMGRL.hana.com)(INSTANCE_NAME=LAPDRDB)(SERVER=DEDICATED)))'
    TopWaitEvents                   = '(monitor)'
    SidName                         = '(monitor)'
  Log file locations:
    Alert log               : /oracle/PRD/diag/rdbms/lapdrdb/LAPDRDB/trace/alert_LAPDRDB.log
    Data Guard Broker log   : /oracle/PRD/diag/rdbms/lapdrdb/LAPDRDB/trace/drcLAPDRDB.log
Database Status:
SUCCESS
DGMGRL>
Database - lapprimdb
  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 10.00 KByte/s
  Active Apply Rate:  661.00 KByte/s
  Maximum Apply Rate: 4.21 MByte/s
  Real Time Query:    OFF
  Instance(s):
    LAPPRIMDB
  Properties:
    DGConnectIdentifier             = 'lapprimdb'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = ''
    LogXptMode                      = 'ASYNC'
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = ''
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '0'
    LogArchiveMinSucceedDest        = '0'
    DataGuardSyncLatency            = '0'
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = ''
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    ArchiveLocation                 = ''
    AlternateLocation               = ''s
    StandbyArchiveLocation          = ''
    StandbyAlternateLocation        = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    LogXptStatus                    = '(monitor)'
    SendQEntries                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    HostName                        = 'prd1.hana.com'
    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=prd1.hana.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=LAPPRIMDB_DGMGRL.hana.com)(INSTANCE_NAME=LAPPRIMDB)(SERVER=DEDICATED)))'
    TopWaitEvents                   = '(monitor)'
    SidName                         = '(monitor)'
  Log file locations:
    Alert log               : /oracle/PRD/diag/rdbms/lapprimdb/LAPPRIMDB/trace/alert_LAPPRIMDB.log
    Data Guard Broker log   : /oracle/PRD/diag/rdbms/lapprimdb/LAPPRIMDB/trace/drcLAPPRIMDB.log
Database Status:
SUCCESS




Welcome to DGMGRL, type "help" for information.
DGMGRL> Connected to "LAPPRIMDB"
Connected as SYSDBA.
DGMGRL>
Property "LogXptMode" updated
DGMGRL> Error: ORA-16627: operation disallowed since no member would remain to support protection mode ===> i Got this Error 

Failed.
DGMGRL>
Configuration - NewDR

  Protection Mode: MaxPerformance===> Still Show Performance???
  Members:
  LAPDRDB   - Primary database
    lapprimdb - Physical standby database

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 41 seconds ago)




DGMGRL>
Database - LAPDRDB

  Role:               PRIMARY
  Intended State:     TRANSPORT-ON
  Instance(s):
    LAPDRDB

  Properties:
    DGConnectIdentifier             = 'lapdrdb'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = ''
    LogXptMode                      = 'SYNC'===> Primary Show SYNC 

BUT DR SIDE Show ASYNCH 

DGMGRL>
Database - lapprimdb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 6.00 KByte/s
  Active Apply Rate:  204.00 KByte/s
  Maximum Apply Rate: 204.00 KByte/s
  Real Time Query:    OFF
  Instance(s):
    LAPPRIMDB

  Properties:
    DGConnectIdentifier             = 'lapprimdb'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = ''
    LogXptMode                      = 'ASYNC'===> DR side still show 
let me update ASYNC to SYNC
    DelayMins                       = '0'
    Binding                         = 'optional'
    MaxFailure                      = '0'
    ReopenSecs                      = '300'
    NetTimeout                      = '30'
    RedoCompression                 = 'DISABLE'
    PreferredApplyInstance          = ''
    ApplyInstanceTimeout            = '0'
    ApplyLagThreshold               = '30'
    TransportLagThreshold           = '30'
    TransportDisconnectedThreshold  = '30'
    ApplyParallel                   = 'AUTO'
    ApplyInstances                  = '0'
    StandbyFileManagement           = ''
    ArchiveLagTarget                = '0'
    LogArchiveMaxProcesses          = '0'
    LogArchiveMinSucceedDest        = '0'
    DataGuardSyncLatency            = '0'
    LogArchiveTrace                 = '0'
    LogArchiveFormat                = ''
    DbFileNameConvert               = ''
    LogFileNameConvert              = ''
    ArchiveLocation                 = ''
    AlternateLocation               = ''
    StandbyArchiveLocation          = ''
    StandbyAlternateLocation        = ''
    InconsistentProperties          = '(monitor)'
    InconsistentLogXptProps         = '(monitor)'
    LogXptStatus                    = '(monitor)'
    SendQEntries                    = '(monitor)'
    RecvQEntries                    = '(monitor)'
    HostName                        = 'prd1.hana.com'
    StaticConnectIdentifier         = '(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=prd1.hana.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=LAPPRIMDB_DGMGRL.hana.com)(INSTANCE_NAME=LAPPRIMDB)(SERVER=DEDICATED)))'
    TopWaitEvents                   = '(monitor)'
    SidName                         = '(monitor)'

  Log file locations:
    Alert log               : /oracle/PRD/diag/rdbms/lapprimdb/LAPPRIMDB/trace/alert_LAPPRIMDB.log
    Data Guard Broker log   : /oracle/PRD/diag/rdbms/lapprimdb/LAPPRIMDB/trace/drcLAPPRIMDB.log

Database Status:
SUCCESS

DGMGRL> Bye...:


Let me Update DR side.


[oraprd@prd1 STANDBY]$ cat change_mode_ava_dg.sh
dgmgrl <<eof
connect sys/abc#123@lapprimdb
EDIT DATABASE 'lapprimdb' SET PROPERTY 'LogXptMode'='SYNC';
show configuration;
exit;
eof

[oraprd@prd1 STANDBY]$ ./update_synch.sh
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon May 31 12:17:34 2021
Version 19.8.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> Connected to "LAPPRIMDB"
Connected as SYSDBA.
DGMGRL>
Property "LogXptMode" updated
DGMGRL>
Configuration - NewDR

  Protection Mode: MaxPerformance
  Members:
  LAPDRDB   - Primary database
    lapprimdb - Physical standby database

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 52 seconds ago)

DGMGRL> [oraprd@prd1 STANDBY]$


[oraprd@prd1 STANDBY]$ ./show_dg.sh

DGMGRL>
Database - lapprimdb

  Role:               PHYSICAL STANDBY
  Intended State:     APPLY-ON
  Transport Lag:      0 seconds (computed 1 second ago)
  Apply Lag:          0 seconds (computed 1 second ago)
  Average Apply Rate: 3.00 KByte/s
  Active Apply Rate:  204.00 KByte/s
  Maximum Apply Rate: 204.00 KByte/s
  Real Time Query:    OFF
  Instance(s):
    LAPPRIMDB

  Properties:
    DGConnectIdentifier             = 'lapprimdb'
    ObserverConnectIdentifier       = ''
    FastStartFailoverTarget         = ''
    PreferredObserverHosts          = ''
    LogShipping                     = 'ON'
    RedoRoutes                      = ''
    LogXptMode                      = 'SYNC'====> SYNCH
    DelayMins                       = '0'


Now lets Try to Make it Max Available Mode.



[oraprd@prd2 STANDBY]$ ./change_mode_ava_dg.sh
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Mon May 31 12:19:15 2021
Version 19.8.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Welcome to DGMGRL, type "help" for information.
DGMGRL> Connected to "LAPPRIMDB"
Connected as SYSDBA.
DGMGRL> Property "LogXptMode" updated
DGMGRL> Succeeded.
DGMGRL>
Configuration - NewDR

  Protection Mode: MaxAvailability
  Members:
  LAPDRDB   - Primary database
    lapprimdb - Physical standby database

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS   (status updated 16 seconds ago)

DGMGRL>
[oraprd@prd2 STANDBY]$
[oraprd@prd2 STANDBY]$


DGMGRL>
Configuration - NewDR

  Protection Mode: MaxAvailability ====> Max Available
  Members:
  LAPDRDB   - Primary database
    lapprimdb - Physical standby database

  Properties:
    FastStartFailoverThreshold      = '30'
    OperationTimeout                = '30'
    TraceLevel                      = 'USER'
    FastStartFailoverLagLimit       = '0'
    CommunicationTimeout            = '180'
    ObserverReconnect               = '0'
    FastStartFailoverAutoReinstate  = 'TRUE'
    FastStartFailoverPmyShutdown    = 'TRUE'
    BystandersFollowRoleChange      = 'ALL'
    ObserverOverride                = 'FALSE'
    ExternalDestination1            = ''
    ExternalDestination2            = ''
    PrimaryLostWriteAction          = 'CONTINUE'
    ConfigurationWideServiceName    = 'LAP_CFG'

Fast-Start Failover:  Disabled

Configuration Status:
SUCCESS


Long Story in short would be.

1)EDIT DATABASE 'lapprimdb' SET PROPERTY 'LogXptMode'='SYNC';
2)EDIT DATABASE 'lapdrdb' SET PROPERTY 'LogXptMode'='SYNC';
3)connect sys/abc#123@lapdrdb
  EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
4)connect sys/abc#123@lapprimdb
EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;