I recently blog on Oracle SEHA on ODA, see my article https://www.dbi-services.com/blog/seha-on-oda/. Oracle SEHA is used for High Availability for Standard Edition. Dbvisit Standby is a Disaster Recovery well known application designed for Oracle Standard Edition. Dbvisit guarantees database continuity, and will reduce RTO and RPO. With Dbvisit we will limit business impact in case of failure like hardware, operating system or human failure by activating a standby database. With Dbvisit we can also reduce the downtime linked to maintenance on the system. But what about combining both Oracle SEHA and Dbvisit?
Test environment
For my test I’m using :
- an ODA X5-2-HA with 2 nodes dbioda02 and dbioda03
- an ODA X8-2M with node named dbi-oda-x8
The privileged nodes for primary would be the ODA X5-2-HA so we can take advantage of Oracle SEHA. The test would be then to simulate a configuration where the primary database is usually running on a 2 nodes cluster and the standby database running on a single node. We accept to be in a lighter configuration on standby side knowing this one is less sought, and the standby node will less be activated as primary. We have some customer using such configuration with EE having a Data Guard configuration with a primary on RAC and a standby with single instance. Of course recall that Oracle SEHA is not as RAC. With Oracle SEHA we will only have one instance connected to the database at the same time compared to RAC on Enterprise Edition where you can have multiple instances.
I’m going to install Dbvcontrol on dbi-oda-x8 node.
Primary database
I have my primary database already created on the ODA X5-2-HA.
[root@dbioda02 ~]# odacli describe-database -i bed8b9fb-214a-423e-b0e8-d8c084b45dd1 Database details ---------------------------------------------------------------- ID: bed8b9fb-214a-423e-b0e8-d8c084b45dd1 Description: DBISEHA DB Name: DBISEHA DB Version: 19.15.0.0.220419 DB Type: SI DB Role: PRIMARY DB Target Node Name: dbioda03 DB Edition: SE DBID: 1535732728 Instance Only Database: false CDB: false PDB Name: PDB Admin User Name: High Availability: true Class: OLTP Shape: odb1 Storage: ASM DB Redundancy: CharacterSet: AL32UTF8 National CharacterSet: AL16UTF16 Language: AMERICAN Territory: AMERICA Home ID: 5b0b3769-0c05-435e-b7c8-5d295c05934c Console Enabled: false TDE Wallet Management: TDE Enabled: false Level 0 Backup Day: Sunday AutoBackup Enabled: false Created: January 27, 2023 9:41:13 AM CET DB Domain Name: dbi-lab.ch Associated Networks: Public-network CPU Pool Name:
Dbvisit StandbyMP current limitation with Oracle SEHA
It is important to understand that today last version of Dbvisit standbyMP (11.2.1) can only support Oracle SEHA if all database instances are running on the same nodes of the local cluster. That is to say that Dbvisit doesn’t support configuration where it needs to handle in mean time instances on both nodes. This is due to the fact that Dbvisit StandbyMP can be active only on one of the SEHA cluster nodes, not on both. This is quite annoying because you can not take all resources possibilities, but I’m sure that this limitation will be solved in a near future. Let’s keep an eye on it. This is due to the fact that Dbvisit will be using a VIP that will be started on one of the cluster node which will have all instances running. Of course, this doesn’t concern the databases that are not part of Dbvisit configuration.
Dbvisit StandbyMP prerequisites
To use Dbvisit StandbyMP with Oracle SEHA, there is a few prerequisites that are needed.
Additional VIP
Additional VIP is needed. This VIP should be different from existing cluster VIP addresses
I’m going to create a new VIP named dbvisitvippri with IP address 10.36.0.246 using root user on the node 0, dbioda02, from my primary cluster.
First I’m going to set the environment for root user:
[root@dbioda02 ~]# id uid=0(root) gid=0(root) groups=0(root) [root@dbioda02 ~]# . oraenv ORACLE_SID = [root] ? +ASM1 ORACLE_HOME = [/home/oracle] ? /u01/app/19.15.0.0/grid The Oracle base has been changed from /home/oracle to /u01/app/grid
Then I’m going to check existing network:
[root@dbioda02 ~]# srvctl config network Network 1 exists Subnet IPv4: 10.36.0.0/255.255.255.0/pubnet, static Subnet IPv6: Ping Targets: Network is enabled Network is individually enabled on nodes: Network is individually disabled on nodes:
Thus I’m going to create the application VIP on network 1:
[root@dbioda02 ~]# appvipcfg create -network=1 -ip=10.36.0.246 -vipname=dbvisitvippri -user=root Using configuration parameter file: /u01/app/19.15.0.0/grid/crs/install/crsconfig_params The log of current session can be found at: /u01/app/grid/crsdata/dbioda02/scripts/appvipcfg.log
And give the appropriate permission for oracle and grid user. I’m using role separation on my SEHA ODA cluster, thus needs to give permissions to both oracle and grid user.
[root@dbioda02 ~]# crsctl setperm resource dbvisitvippri -u user:oracle:r-x [root@dbioda02 ~]# crsctl setperm resource dbvisitvippri -u user:grid:r-x
I’m checking and can see that the VIP is for the moment not started on my node:
[root@dbioda02 ~]# ip addr sh | grep 10.36.0.246 [root@dbioda02 ~]#
Let’s start it on the node 0 from my ODA X5-2-HA:
[root@dbioda02 ~]# crsctl start resource dbvisitvippri -n dbioda02 CRS-2672: Attempting to start 'dbvisitvippri' on 'dbioda02' CRS-2676: Start of 'dbvisitvippri' on 'dbioda02' succeeded
And we can check that the IP is now attached to my node.
[root@dbioda02 ~]# ip addr sh | grep 10.36.0.246 inet 10.36.0.246/24 brd 10.36.0.255 scope global secondary pubnet:2 [root@dbioda02 ~]# ip addr sh pubnet 14: pubnet: mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether 00:10:e0:94:c2:ac brd ff:ff:ff:ff:ff:ff inet 10.36.0.232/24 brd 10.36.0.255 scope global pubnet valid_lft forever preferred_lft forever inet 10.36.0.239/24 brd 10.36.0.255 scope global secondary pubnet:1 valid_lft forever preferred_lft forever inet 10.36.0.236/24 brd 10.36.0.255 scope global secondary pubnet:3 valid_lft forever preferred_lft forever inet 10.36.0.246/24 brd 10.36.0.255 scope global secondary pubnet:2 valid_lft forever preferred_lft forever [root@dbioda02 ~]#
Let’s try to log on using the VIP:
maw@DBI-LT-MAW2 ~ % ssh [email protected] The authenticity of host '10.36.0.246 (10.36.0.246)' can't be established. ECDSA key fingerprint is SHA256:eJyu/pxpVmMVRScZBVX5uvvnsN2ARhDdRAK3aLRKln4. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '10.36.0.246' (ECDSA) to the list of known hosts. [email protected]'s password: Last failed login: Wed Feb 8 11:31:39 CET 2023 from gateway on ssh:notty There was 1 failed login attempt since the last successful login. Last login: Wed Feb 8 11:29:09 2023 Welcome on dbioda02, please select the environment: *** Environments menu *** - ODA environment - default - - DMK environment - start command: dbi - [oracle@dbioda02 ~]$
Let’s try to relocate the VIP on node 1 and check that the new VIP IP is effectively started on node 1:
[root@dbioda02 ~]# ip addr sh | grep 10.36.0.246 inet 10.36.0.246/24 brd 10.36.0.255 scope global secondary pubnet:2 [root@dbioda03 ~]$ ip addr sh | grep 10.36.0.246 [root@dbioda03 ~]$ [root@dbioda02 ~]# crsctl relocate resource dbvisitvippri -f CRS-2673: Attempting to stop 'dbvisitvippri' on 'dbioda02' CRS-2677: Stop of 'dbvisitvippri' on 'dbioda02' succeeded CRS-2672: Attempting to start 'dbvisitvippri' on 'dbioda03' CRS-2676: Start of 'dbvisitvippri' on 'dbioda03' succeeded [root@dbioda02 ~]# ip addr sh | grep 10.36.0.246 [root@dbioda02 ~]# [root@dbioda03 ~]$ ip addr sh | grep 10.36.0.246 inet 10.36.0.246/24 brd 10.36.0.255 scope global secondary pubnet:3
Let’s relocate it after the test on node 0 from the cluster:
[root@dbioda02 ~]# crsctl relocate resource dbvisitvippri -f CRS-2673: Attempting to stop 'dbvisitvippri' on 'dbioda03' CRS-2677: Stop of 'dbvisitvippri' on 'dbioda03' succeeded CRS-2672: Attempting to start 'dbvisitvippri' on 'dbioda02' CRS-2676: Start of 'dbvisitvippri' on 'dbioda02' succeeded
Shared file system for dbvisit software
I’m going to create an ACFS File System for dbvisit software that will be mounted as /u01/app/dbvisit for oracle user. This ACFS file system is of course accessible from my both cluster nodes.
[grid@dbioda02 ~]$ asmcmd ASMCMD> lsdg State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED NORMAL N 512 512 4096 4194304 96018432 94185196 6001152 44092022 0 Y DATA/ MOUNTED NORMAL N 512 512 4096 4194304 1525760 1520096 381440 569328 0 N FLASH/ MOUNTED NORMAL N 512 512 4096 4194304 23998464 23904256 1499904 11202176 0 N RECO/ MOUNTED HIGH N 512 512 4096 4194304 762880 740428 190720 183236 0 N REDO/ ASMCMD> volcreate -G RECO -s 100G DBVISIT ASMCMD> volinfo -G RECO -a Diskgroup Name: RECO Volume Name: DBVISIT Volume Device: /dev/asm/dbvisit-269 State: ENABLED Size (MB): 102400 Resize Unit (MB): 64 Redundancy: MIRROR Stripe Columns: 8 Stripe Width (K): 1024 Usage: Mountpath: [root@dbioda02 ~]# mkfs.acfs /dev/asm/dbvisit-269 mkfs.acfs: version = 19.0.0.0.0 mkfs.acfs: on-disk version = 46.0 mkfs.acfs: volume = /dev/asm/dbvisit-269 mkfs.acfs: volume size = 107374182400 ( 100.00 GB ) mkfs.acfs: Format complete. [root@dbioda02 ~]# mkdir -p /u01/app/dbvisit [root@dbioda02 ~]# cd /u01/app/19.15.0.0/grid/bin/ [root@dbioda02 bin]# ./srvctl add filesystem -volume DBVISIT -diskgroup RECO -path /u01/app/dbvisit -fstype ACFS -autostart ALWAYS -mountowner oracle [root@dbioda02 bin]# ./srvctl start filesystem -device /dev/asm/dbvisit-269 [root@dbioda02 bin]# df -h /u01/app/dbvisit Filesystem Size Used Avail Use% Mounted on /dev/asm/dbvisit-269 100G 816M 100G 1% /u01/app/dbvisit
Verify that Oracle SEHA is activated for the primary database
Of course Oracle SEHA needs to be activated on the primary database.
This can be confirmed with odacli:
[root@dbioda02 bin]# odacli describe-database -i bed8b9fb-214a-423e-b0e8-d8c084b45dd1 | grep -i Availability High Availability: true
And with srvctl as well:
oracle@dbioda02:/home/oracle/ [DBISEHA] srvctl config database -d DBISEHA | grep -i nodes Configured nodes: dbioda03,dbioda02
oratab configuration
Dbvisit needs +ASM entries in respective /etc/oratab file from all nodes. On ODA those entries are never added. I do not really like updating this file on an ODA, but without this entry the Dbvisit configuration can not be created for my ASM database and is failing. So I have added respective entries for both primary nodes and standby nodes:
[oracle@dbioda02 ~]$ grep -i +asm /etc/oratab +ASM1:/u01/app/19.15.0.0/grid:N [oracle@dbioda03 ~]$ grep -i +asm /etc/oratab +ASM2:/u01/app/19.15.0.0/grid:N [oracle@dbi-oda-x8 ~]$ grep -i +asm /etc/oratab +ASM1:/u01/app/19.17.0.0/grid:N
/etc/hosts
Knowing that my new VIP is not configured on the DNS, I have added it to the 3 nodes dbioda02, dbioda03, and dbi-oda-x8 (2 nodes for primary and one node for standby) /etc/hosts file:
[root@dbioda02 bin]# grep dbvisitvippri /etc/hosts 10.36.0.246 dbvisitvippri
And have added standby node to the /etc/hosts file from both primary nodes dbioda02 and dbioda03:
[root@dbioda02 bin]# grep dbi-oda-x8 /etc/hosts 10.36.0.241 dbi-oda-x8
Installing Dbvisit software on primary
I downloaded last package version dbvisit-standbymp11.2.1-linux.zip which I extracted on dbioda02 in the folder /home/oracle/software.
[oracle@dbioda02 software]$ unzip -q dbvisit-standbymp11.2.1-linux.zip [oracle@dbioda02 software]$ tar -xf Dbvisit\ StandbyMP\ v11.2.1\ -\ Linux.tar.gz
I then installed Dbvisit software from dbioda02 running install-agent-v11.2.1 and providing following parameter:
- The ACFS file system /u01/app/dbvisit as DBVISIT_BASE
- Agent file transfer port to be 7890
- The primary VIP dbvisitvippri for the host name
- The standby node dbi-oda-x8 for the host hosting the Control Center
- The Agent Communications Port to be 5533
- A passphrase
[oracle@dbioda02 software]$ ./install-agent-v11.2.1 +----------------------------------------------------------------------+ | ____ _ _ _ __ __ ____ | | / ___|| |_ __ _ _ __ __| | |__ _ _| \/ | _ \ | | \___ \| __/ _' | '_ \ / _' | '_ \| | | | |\/| | |_) | | | ___) | || (_| | | | | (_| | |_) | |_| | | | | __/ | | |____/ \__\__,_|_| |_|\__,_|_.__/ \__, |_| |_|_| | | Copyright 2022 |___/ By Dbvisit | +----------------------------------------------------------------------+ Welcome to Dbvisit StandbyMP setup version v11.2.1. ? Please carefully read the end-user license agreement at https://dbvisit.com/eula. Do you agree to the terms of this agreement? Yes ? Which directory should the software be installed into? /u01/app/dbvisit - - - You are now configuring the Dbvisit StandbyMP Agent - - - The Agent will listen on the following discovered addresses: - 127.0.0.1 - 192.168.16.24 - 192.168.122.1 - 10.36.0.232 - 10.36.0.239 - 10.36.0.236 - 10.36.0.246 ? Agent File Transfer Port: 7890 ? Fully Qualified Domain Name for this host: dbvisitvippri ? Fully Qualified Domain Name for the Control Center: dbi-oda-x8 ? Agent Communications Port: 5533 Each Dbvisit StandbyMP Agent and the Dbvisit StandbyMP Control Center must be configured with the same passphrase. This is how we know that they are all intended to be part of the same system. Please specify a strong passphrase - we suggest at least 12 characters, containing at least 2 numbers and 2 symbols. ? Passphrase: *********** ? Confirm Passphrase: *********** - - - Dbvisit StandbyMP Agent configuration finished - - - - - - Ready to perform installation - - - ? Do you wish to proceed with the setup using the supplied configuration options? Proceed with setup - - - Performing installation - - - Copying software files to '/u01/app/dbvisit'... Writing Agent configuration file '/u01/app/dbvisit/standbymp/conf/dbvagentmanager.ini'... - - - Installation successful! - - - To enable the installed Dbvisit StandbyMP components to run as system services, you will need to execute some commands as the "root" user in order to complete the setup. To install the system service(s), you can run, substituting the name of the user to run as if it is different from the current user: sudo /u01/app/dbvisit/standbymp/bin/dbvagentmanager service install --user oracle To start the system service(s), you can run: sudo /u01/app/dbvisit/standbymp/bin/dbvagentmanager service start - - - Configuration Summary - - - Install Directory: /u01/app/dbvisit Fully Qualified Domain Name for this host: dbvisitvippri Fully Qualified Domain Name for the Control Center: dbi-oda-x8 Agent Communications Port: 5533 Agent File Transfer Port: 7890 - - - Installation Summary - - - The following actions have been performed: - Installed Dbvisit StandbyMP Agent software into: /u01/app/dbvisit/standbymp - Agent settings are available in the configuration file: /u01/app/dbvisit/standbymp/conf/dbvagentmanager.ini - Generated new security certificates in: /u01/app/dbvisit/standbymp/certificates - - - INSTALLATION SUCCESSFUL - - - [oracle@dbioda02 software]$
dbvagentmanager relocate script
We will setup a script so the dbvagentmanager process gets automatically started on the appropriate nodes when the VIP got relocated. Of course, in our configuration, we only need to implement that script on the primary side knowing only the primary database will have High Availability. We will get this script named dbvcrs.sh from dbvisit website : https://dbvisit.atlassian.net/wiki/spaces/DSMP/pages/3500081153/Oracle+SEHA+and+RAC
I copied the script in the binary directory of Dbvisit StandbyMP:
maw@DBI-LT-MAW2 Downloads % scp dbvcrs.sh [email protected]:/u01/app/dbvisit/standbymp/bin/ [email protected]'s password: dbvcrs.sh 100% 1882 28.4KB/s 00:00
I gave appropriate permissions to the script:
[oracle@dbioda02 bin]$ chmod +x dbvcrs.sh 100% 1882 28.4KB/s 00:00
I tested the script. The script should provide following outputs:
[oracle@dbioda02 bin]$ ps -ef | grep [d]bv [oracle@dbioda02 bin]$ [oracle@dbioda02 bin]$ ./dbvcrs.sh start dbvagentmanager Starting Dbvisit dbvagentmanager Submitted check for dbvagentmanager with result running correctly, return 0 [oracle@dbioda02 bin]$ ps -ef | grep [d]bv oracle 21816 1 0 13:55 pts/0 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvagentmanager service run [oracle@dbioda02 bin]$ ./dbvcrs.sh check dbvagentmanager Submitted check for dbvagentmanager with result running correctly, return 0 [oracle@dbioda02 bin]$ ./dbvcrs.sh stop dbvagentmanager [oracle@dbioda02 bin]$ ps -ef | grep [d]bv [oracle@dbioda02 bin]$ [oracle@dbioda02 bin]$ ./dbvcrs.sh check dbvagentmanager Submitted check for dbvagentmanager with result not running correctly, return 1 [oracle@dbioda02 bin]$ ./dbvcrs.sh start dbvagentmanager Starting Dbvisit dbvagentmanager Submitted check for dbvagentmanager with result running correctly, return 0 [oracle@dbioda02 bin]$ ps -ef | grep [d]bv oracle 22990 1 1 13:55 pts/0 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvagentmanager service run [oracle@dbioda02 bin]$ ./dbvcrs.sh clean dbvagentmanager [oracle@dbioda02 bin]$ ps -ef | grep [d]bv [oracle@dbioda02 bin]$ [oracle@dbioda02 bin]$ ./dbvcrs.sh check dbvagentmanager Submitted check for dbvagentmanager with result not running correctly, return 1
As root I will now create resource for dbvagentmanager:
[root@dbioda02 ~]# . oraenv ORACLE_SID = [+ASM1] ? ORACLE_HOME = [/home/oracle] ? /u01/app/19.15.0.0/grid The Oracle base remains unchanged with value /u01/app/grid [root@dbioda02 ~]# crsctl add resource dbvagentmanager -type generic_application -attr "START_PROGRAM='/u01/app/dbvisit/standbymp/bin/dbvcrs.sh start dbvagentmanager',STOP_PROGRAM='/u01/app/dbvisit/standbymp/bin/dbvcrs.sh stop dbvagentmanager',CHECK_PROGRAMS='/u01/app/dbvisit/standbymp/bin/dbvcrs.sh check dbvagentmanager',CLEAN_PROGRAM='/u01/app/dbvisit/standbymp/bin/dbvcrs.sh clean dbvagentmanager', CHECK_INTERVAL=10,START_DEPENDENCIES='hard(dbvisitvippri) pullup(dbvisitvippri)',STOP_DEPENDENCIES='hard(dbvisitvippri)',ACL='owner:oracle:rwx,pgrp:oinstall:rwx,other::r--',PLACEMENT='favored',HOSTING_MEMBERS='dbioda02 dbioda03'"
With oracle user I’m now testing if the resource can be started:
[oracle@dbioda02 ~]$ . oraenv ORACLE_SID = [oracle] ? +ASM1 ORACLE_HOME = [/home/oracle] ? /u01/app/19.15.0.0/grid The Oracle base has been set to /u01/app/grid [oracle@dbioda02 ~]$ ps -ef | grep [d]bv [oracle@dbioda02 ~]$ crsctl start resource dbvagentmanager CRS-2672: Attempting to start 'dbvagentmanager' on 'dbioda02' CRS-2676: Start of 'dbvagentmanager' on 'dbioda02' succeeded [oracle@dbioda02 ~]$ ps -ef | grep [d]bv oracle 97351 1 3 14:43 ? 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvagentmanager service run
We will now test that with the relocation of the VIP the dbvagentmanager process is accordingly started on the respective mode:
[oracle@dbioda02 ~]$ ps -ef | grep [d]bv oracle 97351 1 0 14:43 ? 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvagentmanager service run [root@dbioda03 ~]# ps -ef | grep [d]bv [root@dbioda03 ~]# [oracle@dbioda02 ~]$ crsctl relocate resource dbvisitvippri -f CRS-2673: Attempting to stop 'dbvagentmanager' on 'dbioda02' CRS-2677: Stop of 'dbvagentmanager' on 'dbioda02' succeeded CRS-2673: Attempting to stop 'dbvisitvippri' on 'dbioda02' CRS-2677: Stop of 'dbvisitvippri' on 'dbioda02' succeeded CRS-2672: Attempting to start 'dbvisitvippri' on 'dbioda03' CRS-2676: Start of 'dbvisitvippri' on 'dbioda03' succeeded CRS-2672: Attempting to start 'dbvagentmanager' on 'dbioda03' CRS-2676: Start of 'dbvagentmanager' on 'dbioda03' succeeded [oracle@dbioda02 ~]$ ps -ef | grep [d]bv [oracle@dbioda02 ~]$ [root@dbioda03 ~]# ps -ef | grep [d]bv oracle 42877 1 0 14:48 ? 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvagentmanager service run
As we can see, with the relocation of the VIP, the dbvagentmanager process got automatically started on the respective mode.
I relocated the VIP on the node 0:
[oracle@dbioda02 ~]$ crsctl relocate resource dbvisitvippri -f CRS-2673: Attempting to stop 'dbvagentmanager' on 'dbioda03' CRS-2677: Stop of 'dbvagentmanager' on 'dbioda03' succeeded CRS-2673: Attempting to stop 'dbvisitvippri' on 'dbioda03' CRS-2677: Stop of 'dbvisitvippri' on 'dbioda03' succeeded CRS-2672: Attempting to start 'dbvisitvippri' on 'dbioda02' CRS-2676: Start of 'dbvisitvippri' on 'dbioda02' succeeded CRS-2672: Attempting to start 'dbvagentmanager' on 'dbioda02' CRS-2676: Start of 'dbvagentmanager' on 'dbioda02' succeeded
Installing Dbvisit software on standby
Here we will run a normal installation, knowing we only have one ODA Node.
Create DBVISIT_BASE directory:
[root@dbi-oda-x8 ~]# mkdir /u01/app/dbvisit [root@dbi-oda-x8 ~]# chown oracle:oinstall /u01/app/dbvisit
I installed the agent on the standby side
I then installed Dbvisit software from dbioda02 running install-agent-v11.2.1 providing following parameter:
- /u01/app/dbvisit as DBVISIT_BASE
- Agent file transfer port to be 7890
- The node name dbi-oda-x8
- The standby node dbi-oda-x8 for the host hosting the Control Center
- The Agent Communications Port to be 5533
- A passphrase
[oracle@dbi-oda-x8 software]$ ./install-agent-v11.2.1 +----------------------------------------------------------------------+ | ____ _ _ _ __ __ ____ | | / ___|| |_ __ _ _ __ __| | |__ _ _| \/ | _ \ | | \___ \| __/ _' | '_ \ / _' | '_ \| | | | |\/| | |_) | | | ___) | || (_| | | | | (_| | |_) | |_| | | | | __/ | | |____/ \__\__,_|_| |_|\__,_|_.__/ \__, |_| |_|_| | | Copyright 2022 |___/ By Dbvisit | +----------------------------------------------------------------------+ Welcome to Dbvisit StandbyMP setup version v11.2.1. ? Please carefully read the end-user license agreement at https://dbvisit.com/eula. Do you agree to the terms of this agreement? Yes ? Which directory should the software be installed into? /u01/app/dbvisit - - - You are now configuring the Dbvisit StandbyMP Agent - - - The Agent will listen on the following discovered addresses: - 127.0.0.1 - 192.168.16.24 - 10.36.0.241 - 192.168.17.2 ? Agent File Transfer Port: 7890 ? Fully Qualified Domain Name for this host: dbi-oda-x8.dbi-lab.ch ? Fully Qualified Domain Name for the Control Center: dbi-oda-x8.dbi-lab.ch ? Agent Communications Port: 5533 Each Dbvisit StandbyMP Agent and the Dbvisit StandbyMP Control Center must be configured with the same passphrase. This is how we know that they are all intended to be part of the same system. Please specify a strong passphrase - we suggest at least 12 characters, containing at least 2 numbers and 2 symbols. ? Passphrase: *********** ? Confirm Passphrase: *********** - - - Dbvisit StandbyMP Agent configuration finished - - - - - - Ready to perform installation - - - ? Do you wish to proceed with the setup using the supplied configuration options? Proceed with setup - - - Performing installation - - - Copying software files to '/u01/app/dbvisit'... Writing Agent configuration file '/u01/app/dbvisit/standbymp/conf/dbvagentmanager.ini'... - - - Installation successful! - - - To enable the installed Dbvisit StandbyMP components to run as system services, you will need to execute some commands as the "root" user in order to complete the setup. To install the system service(s), you can run, substituting the name of the user to run as if it is different from the current user: sudo /u01/app/dbvisit/standbymp/bin/dbvagentmanager service install --user oracle To start the system service(s), you can run: sudo /u01/app/dbvisit/standbymp/bin/dbvagentmanager service start - - - Configuration Summary - - - Install Directory: /u01/app/dbvisit Fully Qualified Domain Name for this host: dbi-oda-x8.dbi-lab.ch Fully Qualified Domain Name for the Control Center: dbi-oda-x8.dbi-lab.ch Agent Communications Port: 5533 Agent File Transfer Port: 7890 - - - Installation Summary - - - The following actions have been performed: - Installed Dbvisit StandbyMP Agent software into: /u01/app/dbvisit/standbymp - Agent settings are available in the configuration file: /u01/app/dbvisit/standbymp/conf/dbvagentmanager.ini - Generated new security certificates in: /u01/app/dbvisit/standbymp/certificates - - - INSTALLATION SUCCESSFUL - - -
Install and start dbvagentmanager service:
[root@dbi-oda-x8 ~]# /u01/app/dbvisit/standbymp/bin/dbvagentmanager service install --user oracle [root@dbi-oda-x8 ~]# service dbvagentmanager status Redirecting to /bin/systemctl status dbvagentmanager.service ● dbvagentmanager.service - The Dbvisit StandbyMP Agent provides connectivity to databases on this computer. This Agent is used & managed by the Dbvisit StandbyMP Control Center. Loaded: loaded (/etc/systemd/system/dbvagentmanager.service; enabled; vendor preset: disabled) Active: inactive (dead) [root@dbi-oda-x8 ~]# service dbvagentmanager start Redirecting to /bin/systemctl start dbvagentmanager.service [root@dbi-oda-x8 ~]# service dbvagentmanager status Redirecting to /bin/systemctl status dbvagentmanager.service ● dbvagentmanager.service - The Dbvisit StandbyMP Agent provides connectivity to databases on this computer. This Agent is used & managed by the Dbvisit StandbyMP Control Center. Loaded: loaded (/etc/systemd/system/dbvagentmanager.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2023-02-08 15:23:45 CET; 1s ago Main PID: 2077 (dbvagentmanager) Tasks: 13 Memory: 26.7M CGroup: /system.slice/dbvagentmanager.service └─2077 /u01/app/dbvisit/standbymp/bin/dbvagentmanager service run Feb 08 15:23:45 dbi-oda-x8 systemd[1]: Started The Dbvisit StandbyMP Agent provides connectivity to databases on this computer. This Agent is used & managed by the Dbvisit StandbyMP Control Center.. Feb 08 15:23:45 dbi-oda-x8 dbvagentmanager[2077]: Changing to directory '/u01/app/dbvisit/standbymp' Feb 08 15:23:45 dbi-oda-x8 dbvagentmanager[2077]: Using log directory '/u01/app/dbvisit/standbymp/log' Feb 08 15:23:45 dbi-oda-x8 dbvagentmanager[2077]: Setting database directory to '/u01/app/dbvisit/standbymp/db' Feb 08 15:23:45 dbi-oda-x8 dbvagentmanager[2077]: Starting service *agentmanagersvc.agentManagerService [root@dbi-oda-x8 ~]# ps -ef | grep [d]bv oracle 2077 1 0 15:23 ? 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvagentmanager service run
Install Dbvisit StandbyMP Control Center
I installed the Dbvisit StandbyMP Control Center on the standby node dbi-oda-x8 providing :
- /u01/app/dbvisit as DBVISIT_BASE
- Control Center Web Server Port to be 4433
- Agen Communications Port to be 5533
- A passphrase
[oracle@dbi-oda-x8 software]$ ./install-control-v11.2.1 +----------------------------------------------------------------------+ | ____ _ _ _ __ __ ____ | | / ___|| |_ __ _ _ __ __| | |__ _ _| \/ | _ \ | | \___ \| __/ _' | '_ \ / _' | '_ \| | | | |\/| | |_) | | | ___) | || (_| | | | | (_| | |_) | |_| | | | | __/ | | |____/ \__\__,_|_| |_|\__,_|_.__/ \__, |_| |_|_| | | Copyright 2022 |___/ By Dbvisit | +----------------------------------------------------------------------+ Welcome to Dbvisit StandbyMP setup version v11.2.1. ? Please carefully read the end-user license agreement at https://dbvisit.com/eula. Do you agree to the terms of this agreement? Yes ? Which directory should the software be installed into? /u01/app/dbvisit - - - You are now configuring the Dbvisit StandbyMP Control Center - - - The Control Center will listen on the following discovered addresses: - 127.0.0.1 - 192.168.16.24 - 10.36.0.241 - 192.168.17.2 ? Control Center Web Server Port: 4433 ? Agent Communications Port: 5533 Each Dbvisit StandbyMP Agent and the Dbvisit StandbyMP Control Center must be configured with the same passphrase. This is how we know that they are all intended to be part of the same system. Please specify a strong passphrase - we suggest at least 12 characters, containing at least 2 numbers and 2 symbols. ? Passphrase: *********** ? Confirm Passphrase: *********** - - - Dbvisit StandbyMP Control Center configuration finished - - - - - - Ready to perform installation - - - ? Do you wish to proceed with the setup using the supplied configuration options? Proceed with setup - - - Performing installation - - - Copying software files to '/u01/app/dbvisit'... Writing Control Center configuration file '/u01/app/dbvisit/standbymp/conf/dbvcontrol.ini'... - - - Installation successful! - - - To enable the installed Dbvisit StandbyMP components to run as system services, you will need to execute some commands as the "root" user in order to complete the setup. To install the system service(s), you can run, substituting the name of the user to run as if it is different from the current user: sudo /u01/app/dbvisit/standbymp/bin/dbvcontrol service install --user oracle To start the system service(s), you can run: sudo /u01/app/dbvisit/standbymp/bin/dbvcontrol service start - - - Configuration Summary - - - Install Directory: /u01/app/dbvisit Control Center Web Server Port: 4433 Agent Communications Port: 5533 - - - Installation Summary - - - The following actions have been performed: - Installed Dbvisit StandbyMP Control Center software into: /u01/app/dbvisit/standbymp - Control Center settings are available in the configuration file: /u01/app/dbvisit/standbymp/conf/dbvcontrol.ini - Generated new security certificates in: /u01/app/dbvisit/standbymp/certificates - - - INSTALLATION SUCCESSFUL - - -
Install and start dbvcontrol service:
[root@dbi-oda-x8 ~]# /u01/app/dbvisit/standbymp/bin/dbvcontrol service install --user oracle [root@dbi-oda-x8 ~]# service dbvcontrol status Redirecting to /bin/systemctl status dbvcontrol.service ● dbvcontrol.service - The Dbvisit StandbyMP Control Center provides centralized coordination for Dbvisit StandbyMP Agent operations, as well as the web-based management console. Loaded: loaded (/etc/systemd/system/dbvcontrol.service; enabled; vendor preset: disabled) Active: inactive (dead) [root@dbi-oda-x8 ~]# service dbvcontrol start Redirecting to /bin/systemctl start dbvcontrol.service [root@dbi-oda-x8 ~]# service dbvcontrol status Redirecting to /bin/systemctl status dbvcontrol.service ● dbvcontrol.service - The Dbvisit StandbyMP Control Center provides centralized coordination for Dbvisit StandbyMP Agent operations, as well as the web-based management console. Loaded: loaded (/etc/systemd/system/dbvcontrol.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2023-02-08 15:31:24 CET; 3s ago Main PID: 12525 (dbvcontrol) Tasks: 20 Memory: 107.4M CGroup: /system.slice/dbvcontrol.service └─12525 /u01/app/dbvisit/standbymp/bin/dbvcontrol service run Feb 08 15:31:24 dbi-oda-x8 systemd[1]: Started The Dbvisit StandbyMP Control Center provides centralized coordination for Dbvisit StandbyMP Agent operations, as well as the web-based management console.. Feb 08 15:31:24 dbi-oda-x8 dbvcontrol[12525]: Changing to directory '/u01/app/dbvisit/standbymp' Feb 08 15:31:24 dbi-oda-x8 dbvcontrol[12525]: Using log directory '/u01/app/dbvisit/standbymp/log' Feb 08 15:31:24 dbi-oda-x8 dbvcontrol[12525]: Setting database directory to '/u01/app/dbvisit/standbymp/db' Feb 08 15:31:24 dbi-oda-x8 dbvcontrol[12525]: Starting service *natssvc.natsSvc Feb 08 15:31:24 dbi-oda-x8 dbvcontrol[12525]: Starting service *directorsvc.directorService Feb 08 15:31:24 dbi-oda-x8 dbvcontrol[12525]: Starting service *guisvc.guiService Feb 08 15:31:24 dbi-oda-x8 dbvcontrol[12525]: Starting service *notificationsvc.notificationService Feb 08 15:31:24 dbi-oda-x8 dbvcontrol[12525]: Starting service *observersvc.observerService [root@dbi-oda-x8 ~]# ps -ef | grep [d]bv oracle 2077 1 0 15:23 ? 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvagentmanager service run oracle 12525 1 0 15:31 ? 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvcontrol service run oracle 12583 2077 0 15:31 ? 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvhelper -agentManagerId sieihpnp2rtm -directorId 3pheqx762v9xr -hostAddress dbi-oda-x8.dbi-lab.ch -natsAddress dbi-oda-x8.dbi-lab.ch -natsPort 5533 -configurationType Oracle -helperProcessKey oracle:sieihpnp2rtm
We can see that as we are now having a Control Center, we have the dbvcontrol process running on standby node and dbvhelper process running on both primary and standby nodes:
[root@dbi-oda-x8 ~]# ps -ef | grep [d]bv oracle 2077 1 0 15:23 ? 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvagentmanager service run oracle 12525 1 0 15:31 ? 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvcontrol service run oracle 12583 2077 0 15:31 ? 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvhelper -agentManagerId sieihpnp2rtm -directorId 3pheqx762v9xr -hostAddress dbi-oda-x8.dbi-lab.ch -natsAddress dbi-oda-x8.dbi-lab.ch -natsPort 5533 -configurationType Oracle -helperProcessKey oracle:sieihpnp2rtm [oracle@dbioda02 ~]$ ps -ef | grep [d]bv oracle 74593 1 2 15:32 ? 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvagentmanager service run oracle 74633 74593 1 15:32 ? 00:00:00 /u01/app/dbvisit/standbymp/bin/dbvhelper -agentManagerId 2v7stu05tncsp -directorId 3pheqx762v9xr -hostAddress dbvisitvippri -natsAddress dbi-oda-x8 -natsPort 5533 -configurationType Oracle -helperProcessKey oracle:2v7stu05tncsp
Create ACFS directory for Dbvisit archive logs on both primary and standby cluster
We will create a new ACFS file system on both primary and standby cluster to record Dbvisit archive logs.
On primary from node 0:
[grid@dbioda02 ~]$ asmcmd ASMCMD> volcreate -G RECO -s 60G DBVARCLOG ASMCMD> volinfo -G RECO -a Diskgroup Name: RECO Volume Name: DBVARCLOG Volume Device: /dev/asm/dbvarclog-269 State: ENABLED Size (MB): 61440 Resize Unit (MB): 64 Redundancy: MIRROR Stripe Columns: 8 Stripe Width (K): 1024 Usage: Mountpath: Volume Name: DBVISIT Volume Device: /dev/asm/dbvisit-269 State: ENABLED Size (MB): 102400 Resize Unit (MB): 64 Redundancy: MIRROR Stripe Columns: 8 Stripe Width (K): 1024 Usage: ACFS Mountpath: /u01/app/dbvisit [root@dbioda02 ~]# mkfs.acfs /dev/asm/dbvarclog-269 mkfs.acfs: version = 19.0.0.0.0 mkfs.acfs: on-disk version = 46.0 mkfs.acfs: volume = /dev/asm/dbvarclog-269 mkfs.acfs: volume size = 64424509440 ( 60.00 GB ) mkfs.acfs: Format complete. [root@dbioda02 ~]# mkdir -p /u90/app/oracle/dbvisit_arch [root@dbioda02 ~]# cd /u01/app/19.15.0.0/grid/bin [root@dbioda02 bin]# ./srvctl add filesystem -volume DBVARCLOG -diskgroup RECO -path /u90/app/oracle/dbvisit_arch -fstype ACFS -autostart ALWAYS -mountowner oracle [root@dbioda02 bin]# ./srvctl start filesystem -device /dev/asm/dbvarclog-269 [root@dbioda02 bin]# df -h /u90/app/oracle/dbvisit_arch Filesystem Size Used Avail Use% Mounted on /dev/asm/dbvarclog-269 60G 671M 60G 2% /u90/app/oracle/dbvisit_arch
On standby:
[grid@dbi-oda-x8 ~]$ asmcmd ASMCMD> volcreate -G RECO -s 60G DBVARCLOG ASMCMD> volinfo -G RECO -a Diskgroup Name: RECO Volume Name: DBVARCLOG Volume Device: /dev/asm/dbvarclog-233 State: ENABLED Size (MB): 61440 Resize Unit (MB): 64 Redundancy: MIRROR Stripe Columns: 8 Stripe Width (K): 1024 Usage: Mountpath: Volume Name: RDOTESTNS Volume Device: /dev/asm/rdotestns-233 State: ENABLED Size (MB): 14336 Resize Unit (MB): 64 Redundancy: HIGH Stripe Columns: 8 Stripe Width (K): 1024 Usage: ACFS Mountpath: /u04/app/oracle/redo/TESTNS Volume Name: RECO Volume Device: /dev/asm/reco-233 State: ENABLED Size (MB): 288768 Resize Unit (MB): 64 Redundancy: MIRROR Stripe Columns: 8 Stripe Width (K): 1024 Usage: ACFS Mountpath: /u03/app/oracle [root@dbi-oda-x8 ~]# mkfs.acfs /dev/asm/dbvarclog-233 mkfs.acfs: version = 19.0.0.0.0 mkfs.acfs: on-disk version = 46.0 mkfs.acfs: volume = /dev/asm/dbvarclog-233 mkfs.acfs: volume size = 64424509440 ( 60.00 GB ) mkfs.acfs: Format complete. [root@dbi-oda-x8 ~]# mkdir -p /u90/app/oracle/dbvisit_arch [root@dbi-oda-x8 ~]# cd /u01/app/19.17.0.0/grid/bin [root@dbi-oda-x8 bin]# ./srvctl add filesystem -volume DBVARCLOG -diskgroup RECO -path /u90/app/oracle/dbvisit_arch -fstype ACFS -autostart ALWAYS -mountowner oracle [root@dbi-oda-x8 bin]# ./srvctl start filesystem -device /dev/asm/dbvarclog-233 [root@dbi-oda-x8 bin]# df -h /u90/app/oracle/dbvisit_arch Filesystem Size Used Avail Use% Mounted on /dev/asm/dbvarclog-233 60G 431M 60G 1% /u90/app/oracle/dbvisit_arch
We will create appropriate subdirectories:
[oracle@dbioda02 ~]$ mkdir /u90/app/oracle/dbvisit_arch/DBISEHA [oracle@dbi-oda-x8 ~]$ mkdir /u90/app/oracle/dbvisit_arch/DBISEHA
Duplicate primary database for standby
Standby database instance has been prepared on standby node using same Oracle Version as the primary database, that’s to say 19.15.0.0.220419.
Standby database has been created with RMAN duplication:
oracle@dbi-oda-x8:/home/oracle/ [DBISEHA] DBISEHA ********* dbi services Ltd. ********* STATUS : STARTED VERSION : 19.15.0.0.0 ************************************* oracle@dbi-oda-x8:/home/oracle/ [DBISEHA] rmanh Recovery Manager: Release 19.0.0.0.0 - Production on Wed Feb 8 16:50:10 2023 Version 19.15.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. RMAN> connect target sys@DBISEHA target database Password: connected to target database: DBISEHA (DBID=1535732728) RMAN> connect auxiliary sys@DBISEHA_STD auxiliary database Password: connected to auxiliary database: DBISEHA (not mounted) RMAN> duplicate target database for standby from active database dorecover nofilenamecheck; Starting Duplicate Db at 08-FEB-2023 16:51:11 using target database control file instead of recovery catalog allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=21 device type=DISK ... ... ... deleted archived log archived log file name=+RECO/DBISEHA_STD/ARCHIVELOG/2023_02_08/thread_1_seq_4.346.1128271929 RECID=1 STAMP=1128271929 deleted archived log archived log file name=+RECO/DBISEHA_STD/ARCHIVELOG/2023_02_08/thread_1_seq_5.345.1128271929 RECID=2 STAMP=1128271929 Deleted 2 objects Finished Duplicate Db at 08-FEB-2023 16:52:18 oracle@dbi-oda-x8:/home/oracle/ [DBISEHA] DBISEHA ********* dbi services Ltd. ********* STATUS : MOUNTED DB_UNIQUE_NAME : DBISEHA_STD OPEN_MODE : MOUNTED LOG_MODE : ARCHIVELOG DATABASE_ROLE : PHYSICAL STANDBY FLASHBACK_ON : NO FORCE_LOGGING : YES VERSION : 19.15.0.0.0 CDB Enabled : NO *************************************
Create Dbvisit Database Configuration
I created the DDC (Dbvisit Database Configuration) using CLI.
We need to make sure that the VIP and the database instance is running on node 0:
[root@dbioda02 dbi]# crsctl status resource dbvisitvippri NAME=dbvisitvippri TYPE=app.appviptypex2.type TARGET=ONLINE STATE=ONLINE on dbioda02 [root@dbioda02 dbi]# ps -ef | grep [p]mon | grep -i dbiseha oracle 18471 1 0 Jan27 ? 00:00:40 ora_pmon_DBISEHA
We will need exact nodes names, so get them:
[grid@dbioda02 ~]$ crsctl check cluster -all ************************************************************** dbioda02: CRS-4537: Cluster Ready Services is online CRS-4529: Cluster Synchronization Services is online CRS-4533: Event Manager is online ************************************************************** dbioda03: CRS-4537: Cluster Ready Services is online CRS-4529: Cluster Synchronization Services is online CRS-4533: Event Manager is online ************************************************************** [grid@dbi-oda-x8 ~]$ crsctl check cluster -all ************************************************************** dbi-oda-x8: CRS-4537: Cluster Ready Services is online CRS-4529: Cluster Synchronization Services is online CRS-4533: Event Manager is online **************************************************************
I created the dbvisit configuration:
oracle@dbioda02:/u01/app/dbvisit/standbymp/oracle/ [DBISEHA] pwd /u01/app/dbvisit/standbymp/oracle oracle@dbioda02:/u01/app/dbvisit/standbymp/oracle/ [DBISEHA] ./dbvctl -o setup ========================================================= Dbvisit Standby Database Technology (11.2.1_0_g8a57214c) http://www.dbvisit.com ========================================================= =>dbvctl only needs to be run on the primary server. Is this the primary server? [Yes]: The following Dbvisit Database configuration (DDC) file(s) found on this server: DDC === 1) Create New DDC 2) Cancel Please enter choice [] : 1 Is this correct? [Yes]: ========================================================= Dbvisit Standby setup begins. ========================================================= The following Oracle instance(s) have been found on this server: SID ORACLE_HOME === =========== 1) DBITST1 /u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_1 2) DBISEHA /u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_2 3) Enter own ORACLE_SID and ORACLE_HOME Please enter choice [] : 2 Is this correct? [Yes]: =>ORACLE_SID will be: DBISEHA =>ORACLE_HOME will be: /u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_2 ------------------------------------------------------------------------------ Enter the the virtual hostname (linked to a Virtual IP) for primary database. This virtual hostname is attached to a VIP that will be able to move between the RAC nodes. Dbvisit Standby will only run on the server where this virtual hostname (VIP) resource is running. The Virtual Hostname (and VIP) should be configured as a resouce in clusterware and must be enabled and started on one of the nodes before yo continue with the setup. NOTE: If you are not using a Virtual Hostname (Highly Recommended), Dbvisit Standby can only be configured to run on one dedicated node in the RAC configuration - specify the hosts name here if you do not have a Virtual Hostname (attached to VIP) for the cluster configured. =>SOURCE is []: dbvisitvippri Your input: dbvisitvippri Is this correct? [Yes]: Choice is dbvisitvippri ------------------------------------------------------------------------------ Please enter a filesystem directory that Dbvisit Standby use to store (archive) log files. This directory is not the same as the database recovery area or archive destinations and should not be located in these areas. The ARCHSOURCE directory is located on the primary server and will become the ARCHDEST location when the primary database is converted to a standby database during a Graceful Switchover operation. This directory will ONLY contain (archive) log files related to this database. It should not contain any other (non archive log) files. Please ensure that this directory exists on =>ARCHSOURCE is [/u01/app/oracle/dbvisit_arch/DBISEHA]: /u90/app/oracle/dbvisit_arch/DBISEHA Your input: /u90/app/oracle/dbvisit_arch/DBISEHA Is this correct? [Yes]: Choice is /u90/app/oracle/dbvisit_arch/DBISEHA ------------------------------------------------------------------------------ Enter primary node 1. =>RAC1_HOST is [dbioda03]: dbioda02 Your input: dbioda02 Is this correct? [Yes]: Choice is dbioda02 ------------------------------------------------------------------------------ Enter primary ASM instance for node dbioda03. Leave null for ACFS =>RAC1_SID_ASM is []: +ASM1 Your input: +ASM1 Is this correct? [Yes]: Choice is +ASM1 ------------------------------------------------------------------------------ Enter primary node 2. =>RAC2_HOST is [dbioda02]: dbioda03 Your input: dbioda03 Is this correct? [Yes]: Choice is dbioda03 ------------------------------------------------------------------------------ Enter primary ASM instance for node dbioda02. Leave null for ACFS =>RAC2_SID_ASM is [+ASM1]: +ASM2 Your input: +ASM2 Is this correct? [Yes]: Choice is +ASM2 ------------------------------------------------------------------------------ Do you want to use SSH to connect to the standby server? Note that if you are using SSH, passwordless SSH authentication between the hosts must already be configured. By default Dbvnet will be used. =>USE_SSH is [N]: Your input: N Is this correct? [Yes]: Choice is N ------------------------------------------------------------------------------ Specify the DBVNET or SSH port number on the primary server. The default value supplied is the dbvnet port 7890. If you specified the use of SSH, please specify the SSH port here. =>NETPORT is [7890]: Your input: 7890 Is this correct? [Yes]: Choice is 7890 ------------------------------------------------------------------------------ Enter the standby database hostname. If the standby database will be Oracle RAC enabled: Enter the the Virtual Hostname (linked to a Virtual IP) for standby database. This virtual hostname is attached to a VIP that will be able to move between the RAC nodes. Dbvisit Standby will only run on the server where this virtual hostname (VIP) resource is running. The Virtual Hostname (and VIP) should be configured as a resouce in clusterware and must be enabled and started on one of the nodes before yo continue with the setup. If you are not using a Virtual Hostname (Highly Recommended), Dbvisit Standby can only be configured to run on one dedicated node in the RAC configuration - specify the hosts name here if you do not have a Virtual Hostname (attached to VIP) for the cluster configured. For non-RAC configurations specify the standby database server name here. =>DESTINATION is []: dbi-oda-x8 Your input: dbi-oda-x8 Is this correct? [Yes]: Choice is dbi-oda-x8 ------------------------------------------------------------------------------ Specify the DBVNET or SSH port number on the standby server. The default value supplied is the dbvnet port 7890. If you specified the use of SSH, please specify the SSH port here. =>NETPORT_DR is [7890]: Your input: 7890 Is this correct? [Yes]: Choice is 7890 ------------------------------------------------------------------------------ Enter Dbvisit Standby installation directory on the standby server =>DBVISIT_BASE_DR is [/u01/app/dbvisit/standbymp]: /u01/app/dbvisit/standbymp Your input: /u01/app/dbvisit/standbymp Is this correct? [Yes]: Choice is /u01/app/dbvisit/standbymp ------------------------------------------------------------------------------ Enter ORACLE_HOME directory on the standby server =>ORACLE_HOME_DR is [/u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_2]: /u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_8 Your input: /u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_8 Is this correct? [Yes]: Choice is /u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_8 ------------------------------------------------------------------------------ Enter DB_UNIQUE_NAME on the standby server =>DB_UNIQUE_NAME_DR is [DBISEHA]: DBISEHA_STD Your input: DBISEHA_STD Is this correct? [Yes]: Choice is DBISEHA_STD ------------------------------------------------------------------------------ Will the standby database be a SEHA database? =>RAC_DR is [N]: Your input: N Is this correct? [Yes]: Choice is N ------------------------------------------------------------------------------ Please enter the directory where Dbvisit Standby will transfer the (archive) log files to on standby server. This directory is not the same as the database recovery area or archive destinations and should not be located in these areas. This directory should ONLY contain (archive) log files related to this database. It should not contain any other (non archive log) files. Please ensure that this directory exists on the standby server =>ARCHDEST is [/u90/app/oracle/dbvisit_arch/DBISEHA]: Your input: /u90/app/oracle/dbvisit_arch/DBISEHA Is this correct? [Yes]: Choice is /u90/app/oracle/dbvisit_arch/DBISEHA ------------------------------------------------------------------------------ Enter ORACLE_SID on the standby server =>ORACLE_SID_DR is [DBISEHA]: Your input: DBISEHA Is this correct? [Yes]: Choice is DBISEHA ------------------------------------------------------------------------------ Enter ASM instance name on the standby server, if your standby is using ASM. If you are not using ASM on the standby or standby is ACFS leave the value null. =>ORACLE_SID_ASM_DR is []: +ASM1 Your input: +ASM1 Is this correct? [Yes]: Choice is +ASM1 ------------------------------------------------------------------------------ Please specify the name of the Dbvisit Database configuration (DDC) file. The DDC file is a plain text file that contains all the Dbvisit Standby settings. =>ENV_FILE is [DBISEHA]: Your input: DBISEHA Is this correct? [Yes]: Choice is DBISEHA ------------------------------------------------------------------------------ Provide license key. =>LICENSE_KEY is []: ******************************************* Your input: ******************************************* Is this correct? [Yes]: Choice is ******************************************* ------------------------------------------------------------------------------ Below are the list of configuration variables provided during the setup process: Configuration Variable Value Provided ====================== ============== ORACLE_SID DBISEHA ORACLE_HOME /u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_2 SOURCE dbvisitvippri ARCHSOURCE /u90/app/oracle/dbvisit_arch/DBISEHA RAC1_THREAD 1 RAC1_HOST dbioda02 RAC1_SID DBISEHA RAC1_SID_ASM +ASM1 RAC2_THREAD 1 RAC2_HOST dbioda03 RAC2_SID DBISEHA RAC2_SID_ASM +ASM2 USE_SSH N NETPORT 7890 DESTINATION dbi-oda-x8 NETPORT_DR 7890 DBVISIT_BASE_DR /u01/app/dbvisit/standbymp ORACLE_HOME_DR /u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_8 DB_UNIQUE_NAME_DR DBISEHA_STD RAC_DR N ARCHDEST /u90/app/oracle/dbvisit_arch/DBISEHA ORACLE_SID_DR DBISEHA ORACLE_SID_ASM_DR +ASM1 ENV_FILE DBISEHA LICENSE_KEY ******************************************* Are these variables correct? [Yes]: >>> Dbvisit Database configuration (DDC) file DBISEHA created. >>> Dbvisit Database repository (DDR) DBISEHA created. Repository Version 11.0 Software Version 11.0 Repository Status VALID PID:6367 TRACE:dbvisit_install.log oracle@dbioda02:/u01/app/dbvisit/standbymp/oracle/ [DBISEHA]
Sending and applying logs
I sent logs from primary database:
oracle@dbioda02:/u01/app/dbvisit/standbymp/oracle/ [DBISEHA] ./dbvctl -d DBISEHA ============================================================= Dbvisit Standby Database Technology (11.2.1_0_g8a57214c) (pid 30710) dbvctl started on dbvisitvippri: Wed Feb 8 17:43:09 2023 ============================================================= >>> Obtaining information from standby database (RUN_INSPECT=Y)... done Thread: 1 Archive log gap: 0. Transfer log gap: 5 >>> Sending heartbeat message... skipped >>> First time Dbvisit Standby runs, Dbvisit Standby configuration will be copied to dbi-oda-x8... >>> Performing a log switch... done >>> Transferring Log file(s) from DBISEHA on dbvisitvippri to dbi-oda-x8: thread 1 sequence 6 (thread_1_seq_6.328.1128274995)... done ============================================================= dbvctl ended on dbvisitvippri: Wed Feb 8 17:43:21 2023 =============================================================
I applied logs on the standby database:
oracle@dbi-oda-x8:/u01/app/dbvisit/standbymp/oracle/ [DBISEHA] ./dbvctl -d DBISEHA ============================================================= Dbvisit Standby Database Technology (11.2.1_0_g8a57214c) (pid 55512) dbvctl started on dbi-oda-x8: Wed Feb 8 17:44:54 2023 ============================================================= >>> Sending heartbeat message... skipped >>> Applying Log file(s) from dbvisitvippri to DBISEHA on dbi-oda-x8: thread 1 sequence 6 (1_6_1127209532.arc)... done Last applied log(s): thread 1 sequence 6 Next SCN required for recovery 3429450 generated at 2023-02-08:17:43:15 +01:00. Next required log thread 1 sequence 7 ============================================================= dbvctl ended on dbi-oda-x8: Wed Feb 8 17:44:59 2023 =============================================================
I checked report gap:
oracle@dbioda02:/u01/app/dbvisit/standbymp/oracle/ [DBISEHA] ./dbvctl -d DBISEHA -i ============================================================= Dbvisit Standby Database Technology (11.2.1_0_g8a57214c) (pid 36127) dbvctl started on dbvisitvippri: Wed Feb 8 17:45:38 2023 ============================================================= Dbvisit Standby log gap report for DBISEHA at 202302081745: ------------------------------------------------------------- Description | SCN | Timestamp ------------------------------------------------------------- Source 3429533 2023-02-08:17:45:37 +01:00 Destination 3429450 2023-02-08:17:43:15 +01:00 Standby database time lag (DAYS-HH:MI:SS): +00:02:22 Report for Thread 1 ------------------- SOURCE Current Sequence 7 Last Archived Sequence 6 Last Transferred Sequence 6 Last Transferred Timestamp 2023-02-08 17:43:20 DESTINATION Next Required Recovery Sequence 7 Transfer Log Gap 0 Apply Log Gap 0 ============================================================= dbvctl ended on dbvisitvippri: Wed Feb 8 17:45:41 2023 =============================================================
Conclusion
I have been setting up and testing a combination of the Oracle SEHA feature with last dbvisit StandbyMP solution having Oracle SEHA only running on the primary database. The standby database is a single node cluster. I might need to say it is a great combination providing High Availability and Disaster Recovery.
In a next blog, I will run some switchover between primary and standby as well as relocation of the instance between primary nodes.