[oracle@node1 ~]$ srvctl status database -db DB21CRAC
Instance DB21CRAC1 is running on node node1
Instance DB21CRAC2 is running on node node2
[oracle@node1 ~]$
[oracle@node1 ~]$ srvctl status service -d DB21CRAC -s hemantpdb
PRKO-2017 : Service hemantpdb does not exist for database DB21CRAC.
[oracle@node1 ~]$ srvctl status service -db DB21CRAC -service hemantpdb -pdb HEMANTPDB
PRKO-2017 : Service hemantpdb does not exist for database DB21CRAC.
[oracle@node1 ~]$
[grid@node1 ~]$ lsnrctl status LISTENER_SCAN1
LSNRCTL for Linux: Version 21.0.0.0.0 - Production on 13-FEB-2024 15:06:11
Copyright (c) 1991, 2021, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
STATUS of the LISTENER
------------------------
Alias LISTENER_SCAN1
Version TNSLSNR for Linux: Version 21.0.0.0.0 - Production
Start Date 13-FEB-2024 14:51:13
Uptime 0 days 0 hr. 14 min. 57 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/21.3.0.0/grid/network/admin/listener.ora
Listener Log File /u01/app/grid/diag/tnslsnr/node1/listener_scan1/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.115)(PORT=1521)))
Services Summary...
Service "0f488ad896262f80e0636f38a8c0fc18" has 2 instance(s).
Instance "DB21CRAC1", status READY, has 1 handler(s) for this service...
Instance "DB21CRAC2", status READY, has 1 handler(s) for this service...
Service "DB21CRAC" has 2 instance(s).
Instance "DB21CRAC1", status READY, has 1 handler(s) for this service...
Instance "DB21CRAC2", status READY, has 1 handler(s) for this service...
Service "DB21CRACXDB" has 2 instance(s).
Instance "DB21CRAC1", status READY, has 1 handler(s) for this service...
Instance "DB21CRAC2", status READY, has 1 handler(s) for this service...
Service "hemantpdb" has 2 instance(s).
Instance "DB21CRAC1", status READY, has 1 handler(s) for this service...
Instance "DB21CRAC2", status READY, has 1 handler(s) for this service...
The command completed successfully
[grid@node1 ~]$
[oracle@node1 ~]$SQL> select inst_id, name, network_name from gv$services order by 1;
INST_ID NAME NETWORK_NAME
---------- ---------------- ----------------
1 hemantpdb hemantpdb
1 DB21CRAC DB21CRAC
1 SYS$BACKGROUND
1 DB21CRACXDB DB21CRACXDB
1 SYS$USERS
2 hemantpdb hemantpdb
2 DB21CRAC DB21CRAC
2 SYS$BACKGROUND
2 DB21CRACXDB DB21CRACXDB
2 SYS$USERS
10 rows selected.
SQL>
SQL> select inst_id, con_id, name, open_mode from gv$pdbs order by 1,2;
INST_ID CON_ID NAME OPEN_MODE
---------- ---------- ---------------- ----------
1 2 PDB$SEED READ ONLY
1 3 HEMANTPDB READ WRITE
2 2 PDB$SEED READ ONLY
2 3 HEMANTPDB READ WRITE
SQL>
Which means that I have created a custom PDB called "HEMANTPDB" and there is a default service called "hemantpdb" on each instance. However, this services is NOT listed when I check via srvctl.
This is because srvctl queries the cluster for information about services. Service"hemantpdb" is created by default when I run CREATE PLUGGABLE DATABASE HEMANTPDB.
So, I can add a new service and configure Transparent Application Failover for SELECT failover but with only the first instance(DB21CRAC1) as the only one to start the service on initially{and the second instance (DB21CRAC2) as the alternate} :
[oracle@node1 ~]$ srvctl add service -db DB21CRAC -service newservice -preferred DB21CRAC1 -available DB21CRAC2 -tafpolicy BASIC -failovertype SELECT -pdb HEMANTPDB [oracle@node1 ~]$ [oracle@node1 ~]$ srvctl config service -db DB21CRAC -service newservice Service name: newservice Server pool: Cardinality: 1 Service role: PRIMARY Management policy: AUTOMATIC DTP transaction: false AQ HA notifications: false Global: false Commit Outcome: false Reset State: NONE Failover type: SELECT Failover method: Failover retries: Failover delay: Failover restore: NONE Connection Load Balancing Goal: LONG Runtime Load Balancing Goal: NONE TAF policy specification: BASIC Edition: Pluggable database name: HEMANTPDB Hub service: Maximum lag time: ANY SQL Translation Profile: Retention: 86400 seconds Failback : no Replay Initiation Time: 300 seconds Drain timeout: Stop option: Session State Consistency: DYNAMIC GSM Flags: 0 Service is enabled Preferred instances: DB21CRAC1 Available instances: DB21CRAC2 CSS critical: no [oracle@node1 ~]$ [oracle@node1 ~]$ srvctl start service -db DB21CRAC -service newservice [oracle@node1 ~]$ srvctl status service -db DB21CRAC -service newservice Service newservice is running on instance(s) DB21CRAC1 [oracle@node1 ~]$
If the database instance DB21CRAC1 fails (crashes), the ClusterWare starts the service on DB21CRAC2. Here I kill the DB21CRAC process and then verify that the service has restarted on DB1CRAC2 :
In this case, connections using this service name ("newservice") will connect (failover) to the 2nd database instance running on node2 of the Cluster.
[oracle@node1 ~]$ srvctl status service -db DB21CRAC -service newservice Service newservice is running on instance(s) DB21CRAC1 [oracle@node1 ~]$ ps -ef |grep smon oracle 2951 1 0 16:05 ? 00:00:00 ora_smon_DB21CRAC1 root 3521 1 1 14:50 ? 00:00:48 /u01/app/21.3.0.0/grid/bin/osysmond.bin grid 4068 1 0 14:50 ? 00:00:00 asm_smon_+ASM1 oracle 4146 25526 0 16:05 pts/0 00:00:00 grep --color=auto smon [oracle@node1 ~]$ kill -9 2951 [oracle@node1 ~]$ srvctl status service -db DB21CRAC -service newservice Service newservice is running on instance(s) DB21CRAC2 [oracle@node1 ~]$
In this case, connections using this service name ("newservice") will connect (failover) to the 2nd database instance running on node2 of the Cluster.
3 comments:
Is there a way to create the service to control each node individually? i.e. stop/start the service on a specific node.
Have you tried the srvctl stop | start service command ?
srvctl stop service -db dbuniquename -service servicename -i instancename ?
Post a Comment