Verifying and Troubleshooting Oracle Database SCAN Based Connect Strings Configured in a Delphix Virtualization Engine (KBA1643)
Applicable Delphix Versions
Major Release |
All Sub Releases |
6.0 | 6.0.0.0,6.0.1.0,6.0.2.0,6.0.3.0,6.0.4.0,6.0.5.0,6.0.6.0,6.0.7.0,6.0.8.0,6.0.9.0,6.0.10.0,6.0.11.0,6.0.12.0,6.0.13.0,6.0.13.0 |
5.1 |
5.1.0.0, 5.1.1.0, 5.1.2.0, 5.1.3.0, 5.1.4.0, 5.1.5.0, 5.1.5.1, 5.1.6.0, 5.1.7.0, 5.1.8.0, 5.1.8.1 |
5.0 |
5.0.1.0, 5.0.1.1, 5.0.2.0, 5.0.2.1, 5.0.2.2, 5.0.2.3, 5.0.3.0, 5.0.3.1, 5.0.4.0, 5.0.4.1 ,5.0.5.0, 5.0.5.1, 5.0.5.2, 5.0.5.3, 5.0.5.4 |
4.3 |
4.3.1.0, 4.3.2.0, 4.3.2.1, 4.3.3.0, 4.3.4.0, 4.3.4.1, 4.3.5.0 |
Background Information
The information contained in this Knowledge Base article is aimed at providing commands, diagnostics and tests that can be used to verify the configuration of SCAN based connection strings used by Delphix to connect to Oracle RAC databases in release 11.2 or above.
Delphix will typically discover in the case of a dSource or build in the case of a virtual database (VDB) connect strings appropriate to facilitating connection to the target Oracle database. If for some reason these connections start failing the aim of this article is to supply processes that aid in troubleshooting the failed connection made from Delphix.
For example an attempt to initiate a SnapSync operation against a dSource may fail or during the provisioning of a VDB Delphix could find it cannot connect to the target VDB as it attempts to create the initial snapshot and timecard for the VDB.
There are a variety of errors that might appear and these include but are not exclusive to the following:
ORA-12541 The connection request could not be completed because the listener is not running.
ORA-12514 TNS:listener does not currently know of service requested in connect descriptor.
Using the sample connect string below each of the relevant entries in listeners for accepting connections
jdbc:oracle:thin:@(DESCRIPTION_LIST=(LOAD_BALANCE=off)(FAILOVER=on) (DESCRIPTION=(ENABLE=broken) (ADDRESS=(PROTOCOL=TCP)(HOST=oelc8scan.plb.internal)(PORT=1521)) (CONNECT_DATA=(UR=A)(SERVICE_NAME=orcl112))))
This would present itself in the Delphix UI as the following connect string associated with the dSource orcl112.
Checks to Perform
SCAN based connections to Oracle databases are dependent on a sound SCAN, SCAN Listener and node listener configuration across all nodes of the cluster. Given this checks need to be performed at all these levels to determine that each step in a SCAN based connection can be and is handled correctly.
o Gather the cluster nodes that are a member of the cluster.
The Oracle Cluster in this example is a 2 Node cluster as seen from the Oracle Supplied olsnodes command which displays all cluster nodes active within the Cluster. The node list is required during later diagnostics collection and troubleshooting steps.
[oracle@oelc8n1 ~]$ su - grid Password: Last login: Mon Nov 6 09:48:52 AEDT 2017 on pts/0 [grid@oelc8n1 ~]$ . oraenv ORACLE_SID = [grid] ? +ASM1 The Oracle base has been set to /u01/app/grid [grid@oelc8n1 ~]$ olsnodes oelc8n1 oelc8n2
o Ensure that the SCAN, Single Client Access Name is being resolved correctly by the DNS.
A typical SCAN configuration will resolve the name to 3 IP Addresses. It does not have to be three addresses and one, two or three addresses is also acceptable however to take full advantage of SCAN functionality the DNS resolving to 3 addresses is recommended by Oracle.
The DNS resolving to 3 IP addresses means there will be 3 SCAN-VIP's plumbed to nodes that are members of the cluster and 3 SCAN Listeners running across the cluster members. This is described in more detail in the Oracle Documentation.
[oracle@oelc8n1 ~]$ nslookup oelc8scan Server: 192.168.0.111 Address: 192.168.0.111#53 Name: oelc8scan.plb.internal Address: 192.168.0.163 Name: oelc8scan.plb.internal Address: 192.168.0.168 Name: oelc8scan.plb.internal Address: 192.168.0.169 [oracle@oelc8n1 ~]$ nslookup oelc8scan.plb.internal Server: 192.168.0.111 Address: 192.168.0.111#53 Name: oelc8scan.plb.internal Address: 192.168.0.168 Name: oelc8scan.plb.internal Address: 192.168.0.169 Name: oelc8scan.plb.internal Address: 192.168.0.163
The DNS lookup here is resolving to 3 IP addresses, each will be linked to one of the cluster node as a SCAN VIP (Virtual IP). The Clusterware itself manages these VIP resources and chooses which node they will be linked to. As there are 3 SCAN VIP's there will be 3 SCAN Listeners running within this cluster.
o Obtain the list of SCAN VIP's present across the cluster nodes.
Logging in as the Oracle Clusterware owner (typically the "grid" user) and setting the environment up for the Clusterware home the configuration of the SCAN can be examined from the Oracle clusterware point of view.
[oracle@oelc8n1 ~]$ su - grid Password: Last login: Mon Nov 6 09:39:10 AEDT 2017 on pts/0 [grid@oelc8n1 ~]$ . oraenv ORACLE_SID = [grid] ? +ASM1 The Oracle base has been set to /u01/app/grid [grid@oelc8n1 ~]$ srvctl config scan SCAN name: oelc8scan.plb.internal, Network: 1 Subnet IPv4: 192.168.0.0/255.255.255.0/enp0s3, static Subnet IPv6: SCAN 0 IPv4 VIP: 192.168.0.163 SCAN VIP is enabled. SCAN VIP is individually enabled on nodes: SCAN VIP is individually disabled on nodes: SCAN 1 IPv4 VIP: 192.168.0.168 SCAN VIP is enabled. SCAN VIP is individually enabled on nodes: SCAN VIP is individually disabled on nodes: SCAN 2 IPv4 VIP: 192.168.0.169 SCAN VIP is enabled. SCAN VIP is individually enabled on nodes: SCAN VIP is individually disabled on nodes:
o Collect the SCAN Listener configuration and node that each SCAN listener is running from.
Running the srvctl command as the Oracle Clusterware home owner the number of scan listeners, the port they are accepting connections from and the node each is running against can be determined.
[grid@oelc8n1 ~]$ srvctl config scan_listener SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521 Registration invited nodes: Registration invited subnets: SCAN Listener is enabled. SCAN Listener is individually enabled on nodes: SCAN Listener is individually disabled on nodes: SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521 Registration invited nodes: Registration invited subnets: SCAN Listener is enabled. SCAN Listener is individually enabled on nodes: SCAN Listener is individually disabled on nodes: SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521 Registration invited nodes: Registration invited subnets: SCAN Listener is enabled. SCAN Listener is individually enabled on nodes: SCAN Listener is individually disabled on nodes: [grid@oelc8n1 ~]$ srvctl status scan_listener SCAN Listener LISTENER_SCAN1 is enabled SCAN listener LISTENER_SCAN1 is running on node oelc8n2 SCAN Listener LISTENER_SCAN2 is enabled SCAN listener LISTENER_SCAN2 is running on node oelc8n1 SCAN Listener LISTENER_SCAN3 is enabled SCAN listener LISTENER_SCAN3 is running on node oelc8n1
o Collect the services running against each SCAN Listener.
From node oelc8n1 where the SCAN listeners listener_scan2
and listener_
scan3
are running execute lsnrctl
as the owner of the listener. In an Oracle Cluster this is the Clusterware home owner. Make sure the service that Delphix is attempting to connect through is registered in the SCAN listeners and each instance associated with the RAC database is listed as READY.
[grid@oelc8n1 ~]$ lsnrctl services listener_scan2 LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 06-NOV-2017 09:49:42 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN2))) Services Summary... Service "orcl112" has 2 instance(s). Instance "orcl1121", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.164)(PORT=1521)) Instance "orcl1122", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.165)(PORT=1521)) Service "orcl112XDB" has 2 instance(s). Instance "orcl1121", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: oelc8n1.plb.internal, pid: 4187> (ADDRESS=(PROTOCOL=tcp)(HOST=oelc8n1.plb.internal)(PORT=18055)) Instance "orcl1122", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: oelc8n2.plb.internal, pid: 4083> (ADDRESS=(PROTOCOL=tcp)(HOST=oelc8n2.plb.internal)(PORT=24638)) The command completed successfully [grid@oelc8n1 ~]$ lsnrctl services listener_scan3 LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 06-NOV-2017 09:49:46 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3))) Services Summary... Service "orcl112" has 2 instance(s). Instance "orcl1121", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.164)(PORT=1521)) Instance "orcl1122", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.165)(PORT=1521)) Service "orcl112XDB" has 2 instance(s). Instance "orcl1121", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: oelc8n1.plb.internal, pid: 4187> (ADDRESS=(PROTOCOL=tcp)(HOST=oelc8n1.plb.internal)(PORT=18055)) Instance "orcl1122", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: oelc8n2.plb.internal, pid: 4083> (ADDRESS=(PROTOCOL=tcp)(HOST=oelc8n2.plb.internal)(PORT=24638)) The command completed successfully
From node oelc8n2 where the SCAN listeners listener_scan1
is running execute lsnrctl
services.
[grid@oelc8n2 ~]$ lsnrctl services listener_scan1 LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 06-NOV-2017 09:57:48 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1))) Services Summary... Service "orcl112" has 2 instance(s). Instance "orcl1121", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.164)(PORT=1521)) Instance "orcl1122", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.165)(PORT=1521)) Service "orcl112XDB" has 2 instance(s). Instance "orcl1121", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: oelc8n1.plb.internal, pid: 4187> (ADDRESS=(PROTOCOL=tcp)(HOST=oelc8n1.plb.internal)(PORT=18055)) Instance "orcl1122", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: oelc8n2.plb.internal, pid: 4083> (ADDRESS=(PROTOCOL=tcp)(HOST=oelc8n2.plb.internal)(PORT=24638)) The command completed successfully
Each SCAN listener must have the service for the database registered (in this case orcl112) within it along with the database instances (orcl1121 and orcl1122) that that are registering the service and accepting connections through the service.
o Ensure the service is also registered and present within each node listener.
From the first node oelc8n1 as the owner of the node listener which could be the Oracle Home owner or the Clusterware Home owner run lsnrctl
services against the node listener. The assistance of the sites DBA may be required to identify its name if it is not the default name of listener. Ensure the service set in the Delphix connect string is registered in each of the node listeners.
[oracle@oelc8n1 ~]$ lsnrctl services LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 06-NOV-2017 15:13:56 Copyright (c) 1991, 2013, Oracle. All rights reserved. Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) Services Summary... Service "+ASM" has 1 instance(s). Instance "+ASM1", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "orcl112" has 1 instance(s). Instance "orcl1121", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:1 refused:0 state:ready LOCAL SERVER Service "orcl112XDB" has 1 instance(s). Instance "orcl1121", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: oelc8n1.plb.internal, pid: 4187> (ADDRESS=(PROTOCOL=tcp)(HOST=oelc8n1.plb.internal)(PORT=18055)) The command completed successfully
From the second cluster node ensure the service in the Delphix connect string is registered in the node listener.
[grid@oelc8n2 ~]$ [grid@oelc8n2 ~]$ lsnrctl services listener LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 06-NOV-2017 09:57:54 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))) Services Summary... Service "+ASM" has 1 instance(s). Instance "+ASM2", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "orcl112" has 1 instance(s). Instance "orcl1122", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "orcl112XDB" has 1 instance(s). Instance "orcl1122", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: oelc8n2.plb.internal, pid: 4083> (ADDRESS=(PROTOCOL=tcp)(HOST=oelc8n2.plb.internal)(PORT=24638)) The command completed successfully
o Using SQLPlus test a connection using the connect string Delphix uses.
Delphix requires connection be established to the target database for a number of its operations including snapshots and SnapSync. After completing the verification of SCAN, SCAN Listeners and node listeners performing a test log in can be performed using the same JDBC connect string as Delphix uses.
The connect string that may be having an issue for the database in Delphix might look like the following barring different services, ports, hostnames etc. The sample connect string here is:
jdbc:oracle:thin:@(DESCRIPTION_LIST=(LOAD_BALANCE=off)(FAILOVER=on) (DESCRIPTION=(ENABLE=broken)(ADDRESS=(PROTOCOL=TCP)(HOST=oelc8scan.plb.internal)(PORT=1521)) (CONNECT_DATA=(UR=A)(SERVICE_NAME=orcl112))))
This same connect string can be tested using sqlplus from one of the cluster nodes. For other environments you would need to substitute the Delphix database user "delphix", the SCAN "oelc8scan.plb.internal", the service name "orcl112" and possibly the port number.
sqlplus delphix@'(DESCRIPTION_LIST=(LOAD_BALANCE=off)(FAILOVER=on) (DESCRIPTION=(ENABLE=broken)(ADDRESS=(PROTOCOL=TCP)(HOST=oelc8scan.plb.internal)(PORT=1521)) (CONNECT_DATA=(UR=A)(SERVICE_NAME=orcl112))))'
The connection can be tested from any one of the target environments cluster nodes or any node where 11.2 or higher of the SQLPlus client is installed.
[oracle@oelc8n1 ~]$ sqlplus delphix@'(DESCRIPTION_LIST=(LOAD_BALANCE=off)(FAILOVER=on) (DESCRIPTION=(ENABLE=broken)(ADDRESS=(PROTOCOL=TCP)(HOST=oelc8scan.plb.internal)(PORT=1521)) (CONNECT_DATA=(UR=A)(SERVICE_NAME=orcl112))))' SQL*Plus: Release 11.2.0.4.0 Production on Mon Nov 6 10:03:47 2017 Copyright (c) 1982, 2013, Oracle. All rights reserved. Enter password: Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> select db_unique_name,database_role,open_mode from v$database; DB_UNIQUE_NAME DATABASE_ROLE OPEN_MODE ------------------------------ ---------------- -------------------- orcl112 PRIMARY READ WRITE SQL> set lines 132 SQL> set pages 500 SQL> select instance_name,host_name from v$instance; INSTANCE_NAME HOST_NAME ---------------- ---------------------------------------------------------------- orcl1121 oelc8n1.plb.internal
The alternate connect string as presented in the Delphix UI can be tested using the following format via Oracle easyconnect.
[oracle@oelc8n1 ~]$ sqlplus delphix@\"oelc8scan.plb.internal:1521/orcl112\" SQL*Plus: Release 11.2.0.4.0 Production on Mon Nov 6 16:14:46 2017 Copyright (c) 1982, 2013, Oracle. All rights reserved. Enter password: Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> show user USER is "DELPHIX" SQL>
If the database service Delphix is attempting to connect through is not registered in the SCAN listeners correctly or not present in the node listeners from which the database instances are running then its likely connections will always fail or fail intermittently depending on which route a connection request takes at an Oracle level.
External Links
Oracle Clusterware SCAN Addresses and Client Connections
Relevant Oracle Notes:
Grid Infrastructure Single Client Access Name (SCAN) Explained (Doc ID 887522.1)
Top Issues That Cause Troubles with SCAN VIP and Listeners (Doc ID 1373350.1)