Good convention and implementation make life and automation so much simpler and more time for golfing.
I have seen some really poor and really good implementation and here’s a good one.
Wish I can take credit for it and unfortunately I cannot.
The scripts were created by whoa.
Scripts an be run from primary or standby for any instances provided profile to source database environment exists on host.
Use ORACLE_UNQNAME for DataGuard Environment
==================================================================================================== +++ PRIMARY RACONENODE ==================================================================================================== SQL> show parameter db%name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_file_name_convert string db_name string test db_unique_name string test SQL> $ sysresv|tail -1 Oracle Instance alive for sid "test_1" $ env|grep ORACLE ORACLE_SID=test_1 (db_name) ORACLE_UNQNAME=test (db_unique_name) $ srvctl config database -d $ORACLE_UNQNAME Database unique name: test Database name: test Oracle home: /u01/app/oracle/product/11g/db_1 Oracle user: oracle Spfile: +FLASH/test/spfiletest.ora Domain: Start options: open Stop options: immediate Database role: PRIMARY Management policy: AUTOMATIC Server pools: test Database instances: Disk Groups: FLASH,DATA Mount point paths: Services: testsvc Type: RACOneNode Online relocation timeout: 30 Instance name prefix: test Candidate servers: host01,host02 Database is administrator managed ==================================================================================================== +++ STANDBY NON-RAC ==================================================================================================== SQL> show parameter db%name NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_file_name_convert string db_name string test db_unique_name string testdr SQL> $ sysresv|tail -1 Oracle Instance alive for sid "test" $ env|grep ORACLE ORACLE_SID=test (db_name) ORACLE_UNQNAME=testdr (db_unique_name) $ srvctl config database -d $ORACLE_UNQNAME Database unique name: testdr Database name: test Oracle home: /u01/app/oracle/product/11g/db_1 Oracle user: oracle Spfile: Domain: Start options: open Stop options: immediate Database role: PHYSICAL_STANDBY Management policy: AUTOMATIC Database instance: test Disk Groups: DATA,FLASH Services: ==================================================================================================== DATAGUARD BROKER CONFIGURATION ==================================================================================================== DGMGRL> show configuration Configuration - dg_test (db_name) Protection Mode: MaxPerformance Databases: test - Primary database (db_unique_name) testdr - Physical standby database (db_unique_name) Fast-Start Failover: DISABLED Configuration Status: SUCCESS DGMGRL> show database test Database - test Role: PRIMARY Intended State: TRANSPORT-OFF Instance(s): test_1 test_2 Database Status: SUCCESS DGMGRL> show database testdr Database - testdr Role: PHYSICAL STANDBY Intended State: APPLY-OFF Transport Lag: 0 seconds (computed 1 second ago) Apply Lag: 7 seconds (computed 0 seconds ago) Apply Rate: (unknown) Real Time Query: OFF Instance(s): test Database Status: SUCCESS DGMGRL> exit ==================================================================================================== ls -l dg*.sh ==================================================================================================== -rwxr-xr-x 1 oracle dba 377 May 08 21:50 dg_lag.sh -rwxr-x--- 1 oracle dba 445 May 08 20:12 dg_start.sh -rwxr-xr-x 1 oracle dba 337 May 08 20:05 dg_status.sh -rwxr-x--- 1 oracle dba 447 May 08 20:12 dg_stop.sh ==================================================================================================== dg_lag.sh ==================================================================================================== #!/bin/sh -e check_dg() { dgmgrl -echo << END connect / show database ${ORACLE_SID} SendQEntries show database ${ORACLE_UNQNAME} RecvQEntries show database ${ORACLE_UNQNAME} exit END } . ~/oracle_staging check_dg . ~/oracle_testing check_dg exit ==================================================================================================== cat dg_start.sh ==================================================================================================== #!/bin/sh -e check_dg() { dgmgrl -echo << END connect / edit database ${ORACLE_SID} set state='TRANSPORT-ON'; edit database ${ORACLE_UNQNAME} set state='APPLY-ON'; show configuration show database ${ORACLE_SID} show database ${ORACLE_UNQNAME} exit END } . ~/oracle_staging check_dg . ~/oracle_testing check_dg exit ==================================================================================================== dg_status.sh ==================================================================================================== #!/bin/sh -e check_dg() { dgmgrl -echo << END connect / show configuration show database ${ORACLE_SID} show database ${ORACLE_UNQNAME} exit END } . ~/oracle_staging check_dg . ~/oracle_testing check_dg exit ==================================================================================================== dg_stop.sh ==================================================================================================== #!/bin/sh -e check_dg() { dgmgrl -echo << END connect / edit database ${ORACLE_SID} set state='TRANSPORT-OFF'; edit database ${ORACLE_UNQNAME} set state='APPLY-OFF'; show configuration show database ${ORACLE_SID} show database ${ORACLE_UNQNAME} exit END } check_dg . ~/oracle_staging check_dg . ~/oracle_testing check_dg exit