Thursday, 23 April 2015

What is SCAN & How It works….

Single Client Access Name (SCAN) is a feature used in Oracle Real Application Clusters environments that  provides a single name for clients to access any Oracle Database running in a cluster. You can think of SCAN as a cluster alias for databases in the cluster.
 
The benefit is that the client’s connect information does not need to change if you add or remove nodes or databases in the cluster. SCAN was first introduced with Oracle Real Application Clusters
 (RAC) 11g Release 2 and provides additional functionality in Oracle RAC 12c. Having a single name to access the cluster to connect to a database in this cluster allows clients to use EZConnect and the simple JDBC thin URL to access any database running in the cluster, independently of the number of databases or servers running in the cluster and regardless on which server(s) in the cluster  the
requested database is actually active Each term SCAN NAME, SCAN VIP, SCAN Listener,
Node VIP, Local_Listener and Remote_Listenerhas its own meaning and role to play
in RAC environment


SCAN NAME: SCAN NAME was introduced in Oracle 11g R2 version. This a name which can resolve upto maximum three IP address and minimum one is required for Oracle 11g R2 Real Application
 Cluster installation. SCAN NAME must be unique in Entire Organization network, This name is used in Tnsname.ora file of client system, all database connection are made thorugh this name. DBA can use below commands to file SCAN NAME details.

[oracle@database bin]$ srvctl config scan

SCAN name: orarac-scan, Network: 1/10.141.132.0/255.255.254.0/eth8

SCAN VIP name: scan1, IP: /orarac-scan/10.191.111.57

SCAN VIP name: scan2, IP: /orarac-scan/10.191.111.55

SCAN VIP name: scan3, IP: /orarac-scan/10.191.111.56


[oracle@database bin]$ nslookup orarac-scan

Server: 111.12.128.13

Address: 111.12.128.13#53

Name: orarac-scan.oracle.com

Address: 10.191.111.55

Name: orarac-scan.oracle.com

Address: 10.191.111.56

Name: orarac-scan.oracle.com

Address: 10.191.111.57


SCAN VIP: SCAN NAME resolves to one or more than one IP addresses, these IP address are called as SCAN VIP or SCAN IP. Each Scan VIP has a SCAN Listener generated corresponding to it. If there is one SCAN IP one SCAN Listener will be generated, if there are three SCAN IP's three SCAN Listeners
will be generated. These SCAN Listener runs on any of three nodes on the RAC environment or it could be two SCAN Listener on one node if there are three SCAN Listener and only two nodes.
SCAN VIP and SCAN Listener works as a pair when SCAN VIP fails over to other node, the corresponding SCAN listener will also be failed over to the same node. Whenever SCAN VIP fails over happens, it will always select a node with least running SCAN VIP, i.e., if SCAN VIP runs on node1, node2 and node3 of a 4-node cluster, if node3 goes down, the SCAN VIP and corresponding SCAN listener will be failed over to node4 as the other two nodes already have one SCAN VIP running on each node. Database Administrator can use below command to find SCAN Listener running on a node and SCAN VIP corresponding to it.
 
 
[oracle@database ~]$ ps -ef | grep tnslsnr

oracle 18181 10705 0 15:07 pts/0 00:00:00 grep tnslsnr

grid 22438 1 0 Jul24 ? 00:00:39 /u01/app/11.2.0.3/grid/bin/tnslsnr LISTENER_SCAN2 -inherit

grid 25927 1 0 Jul24 ? 00:01:31 /u01/app/11.2.0.3/grid/bin/tnslsnr LISTENER -inherit

grid 29211 1 0 Jul28 ? 00:00:27 /u01/app/11.2.0.3/grid/bin/tnslsnr LISTENER_SCAN3 -inherit


[oracle@database bin]$ lsnrctl status LISTENER_SCAN3

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 06-AUG-2013 16:16:22

Copyright (c) 1991, 2011, Oracle. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN3)))

STATUS of the LISTENER

------------------------

Alias LISTENER_SCAN3

Version TNSLSNR for Linux: Version 11.2.0.3.0 - Production

Start Date 28-JUL-2013 08:38:01

Uptime 9 days 7 hr. 38 min. 21 sec

Trace Level off

Security ON: Local OS Authentication

SNMP OFF

Listener Parameter File /u01/app/11.2.0.3/grid/network/admin/listener.ora

Listener Log File /u01/app/11.2.0.3/grid/log/diag/tnslsnr/node2/listener_scan3/alert/log.xml

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN3)))
 
 
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.191.111.57)(PORT=1521)))

Services Summary...

Service "newdb" has 2 instance(s).

Instance "newdb1", status READY, has 1 handler(s) for this service...

Instance "newdb2", status READY, has 1 handler(s) for this service...

Service "newdbXDB" has 2 instance(s).

Instance "newdb1", status READY, has 1 handler(s) for this service...

Instance "newdb2", status READY, has 1 handler(s) for this service...

The command completed successfully
 
From the above grep command DBA can see, this system has two SCAN Listener running at this moment. SCAN Listener having name LISTENER_SCAN3 is running on SCAN VIP 10.191.111.57 as shown in HOST parameter of lsnrctl status output.
 
 
SCAN Listener: As explained above Each SCAN VIP has SCAN Listener associated with each other and both works as a pair. One SCAN Listener is created corresponding  to one SCAN VIP.

SCAN Listener used to run on database nodes. At max there could be three SCAN Listeners in the whole cluster. To file where all these SCAN Listeners are running use
 
 
[oracle@database ~]$ srvctl status scan_listener

SCAN Listener LISTENER_SCAN1 is enabled

SCAN listener LISTENER_SCAN1 is running on node node1

SCAN Listener LISTENER_SCAN2 is enabled

SCAN listener LISTENER_SCAN2 is running on node node2

SCAN Listener LISTENER_SCAN3 is enabled

SCAN listener LISTENER_SCAN3 is running on node node2

In this example, This is a two node RAC having three SCAN Listeners, Node1 has LISTENER_SCAN1 running

while Node2 has LISTENER_SCAN2 and LISTENER_SCAN3 running.


Node VIP: Each Database node in Real Application cluster environment has one node IP and one Node VIP address, The main difference between these two is Node VIP can move to any  other
system in case if current owning system is down but Node IP can't do that. When ever a new connection request is made the SCAN listener listening on a SCAN IP address and the SCAN port is contracted on a client's behalf.
Because all services on the cluster are registered with the SCAN listener, the SCAN listener replies with the address of the local listener as Node VIP address on the least-loaded node (Each scan listener keeps updated cluster load statistics) and connection is routed to that node.

Local Listener on the Database server is registered with Node VIP and Node IP address.
 
 
[oracle@database ~]$ lsnrctl status listener

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 07-AUG-2013 05:12:02

Copyright (c) 1991, 2011, Oracle. All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

------------------------

Alias LISTENER

Version TNSLSNR for Linux: Version 11.2.0.3.0 - Production

Start Date 24-JUL-2013 07:14:10

Uptime 13 days 21 hr. 57 min. 52 sec

Trace Level off

Security ON: Local OS Authentication

SNMP OFF

Listener Parameter File /u01/app/11.2.0.3/grid/network/admin/listener.ora

Listener Log File /u01/app/grid/diag/tnslsnr/node2/listener/alert/log.xml

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
 
 
 
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.141.21.360)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.141.21.366)(PORT=1521)))

Services Summary...

Service "+ASM" has 1 instance(s).

Instance "+ASM2", status READY, has 1 handler(s) for this service...

Service "newdb" has 1 instance(s).

Instance "newdb2", status READY, has 1 handler(s) for this service...

Service "newdbXDB" has 1 instance(s).

Instance "newdb2", status READY, has 1 handler(s) for this service...

The command completed successfully


Here, DBA can see Listner is registered with two IP addresses 10.141.21.360 is Node IP address

and 10.141.21.366 is node VIP address.

Local_Listener: This is a database parameter which is used to provide detail of local listener running on database node itself. In Real Application Cluster environment this has Node VIP address as value.
   
SQL> show parameter local_listener

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string (DESCRIPTION=(ADDRESS_LIST=(A

DDRESS=(PROTOCOL=TCP)(HOST=10.

141.21.366)(PORT=1521))))

When a new connection request is made my SCAN Listener, This address is returned to the SCAN Listener

and then connection is made to database local listener. The difference between SCAN Listener and Local

Listener is SCAN listener runs corosponding to SCAN VIP's while Local Listener runs with Node VIP or Node

IP address.SCAN Listener can move to another database node in case of node failure but local Listener

doesn't have this kind of behavior.


Remote_Listener: Each database instance has this parameter set to SCAN NAME of the cluster
environment. SCAN NAME in turn has one or more IP address further called SCAN VIP and each SCAN VIP  has SCAN Listener running on it, so finally each database instance register itself with all SCAN Listeners running across the clusterware.  
SQL> show parameter remote_listener

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_listener string orarac-scan:1521

The solo purpose of remote_listener parameter is to register each database instance with all SCAN
Listeners in RAC. This provide information on what services are being provided by the instance,the current load, and a recommendation on how many incoming connections should be directed to the instance.


 

No comments:

Post a Comment