SINGLE CLIENT ACCESS NAME (SCAN)
Single Client Access Name (SCAN) is a new Oracle
Real Application Clusters (RAC) 11g Release 2 feature that provides a single
name for clients to access Oracle Databases running in a cluster. The benefit is that the client’s connect information does not need to change if
you add or remove nodes in the cluster. Having a single name to access the
cluster allows clients to use the EZConnect client and the simple JDBC thin URL
to access any database running in the cluster, independently of which server(s)
in the cluster the database is active. SCAN provides load balancing and
failover for client connections to the database. The SCAN works as a cluster
alias for databases in the cluster.
SCAN Concepts
- Single client access name (SCAN) is the virtual hostname to provide for all clients connecting to the cluster (as opposed to the vip hostnames in 10g and 11gR1).
- SCAN is a domain name registered to at least one and up to three IP addresses, either in the domain name service (DNS) or the Grid Naming Service (GNS).
- By default, the name used as the SCAN is also the name of the cluster and must be globally unique throughout your enterprise. The default value for the SCAN is based on the local node name. SCAN name must be at least one character long and no more than 15 characters in length, must be alphanumeric - cannot begin with a numeral and may contain hyphens (-). If you require a SCAN that is longer than 15 characters, then select an Advanced installation.
- For installation to succeed, the SCAN must resolve to at least one address.
- SCAN VIP addresses must be on the same subnet as virtual IP addresses and public IP addresses.
- Oracle strongly recommends that you do not configure SCAN VIP addresses in the hosts file. But if you use the hosts file to resolve SCAN name, you can have only one SCAN IP address.
- If hosts file is used to resolve SCAN hostname, you will receive Cluster Verification Utility failure at end of installation (see Note: 887471.1 for more details)
- For high availability and scalability, Oracle recommends that you configure the SCAN to use DNS Round Robin resolution to three addresses.
- Because the SCAN is associated with the cluster as a whole, rather than to a particular node, the SCAN makes it possible to add or remove nodes from the cluster without needing to reconfigure clients. It also adds location independence for the databases, so that client configuration does not have to depend on which nodes are running a particular database.
- Clients can continue to access the cluster in the same way as with previous releases, but Oracle recommends that clients accessing the cluster use the SCAN. Clients using the SCAN can also access the cluster using EZCONNECT.
- Grid Infrastructure will start local listener LISTENER on all nodes to listen on local VIP, and SCAN listener LISTENER_SCAN1 (up to three cluster wide) to listen on SCAN VIP(s); 11gR2 database by default will set local_listener to local LISTENER, and remote_listener to SCAN listener.
- SCAN listener will be running off GRID_HOME, and by default, in 11gR2 local listener will be running off GRID_HOME as well.
EZconnet sqlplus system/manager@krac-scan:1521/ORCL.INDIA.COM
JDBC connect jdbc:oracle:thin:@krac-scan:1521/ORCL.INDIA.COM
NETWORK
REQUIREMENTS FOR USING SCAN
The SCAN is configured during the installation of Oracle Grid
Infrastructure that is distributed with Oracle Database 11g Release2. Oracle
Grid Infrastructure is a single Oracle Home that contains Oracle Clusterware
and Oracle Automatic Storage Management. You must install Oracle Grid
Infrastructure first in order to use Oracle RAC 11g Release 2. During the interview
phase of the Oracle Grid Infrastructure installation, you will be prompted to
provide a SCAN name. There are 2 options for defining the SCAN:
1.
Define the SCAN in your corporate
DNS (Domain Name Service)
2.
Use the Grid Naming Service (GNS)
Define the SCAN in your corporate DNS (Domain Name Service)
If you choose Option 1, you must ask your network administrator to
create a single name that resolves to 3 IP addresses using a round-robin
algorithm. Three IP addresses are recommended considering load balancing and
high availability requirements regardless of the number of servers in the
cluster. The IP addresses must be on the same subnet as your public network in
the cluster. The name must be 15 characters or less in length, not including
the domain, and must be resolvable without the domain suffix (for example: “krac-scan’
must be resolvable as opposed to “krac-scan.india.com”). The IPs must not be
assigned to a network interface (on the cluster), since Oracle Clusterware will
take care of it.
kracnode-scan 192.168.1.72
192.168.1.70
192.168.1.71
You
can check the SCAN configuration in DNS using “nslookup”. If your DNS is set up
to provide round-robin access to the IPs resolved by the SCAN entry, then run
the “nslookup” command at least twice to see the round-robin algorithm work.
The result should be that each time, the “nslookup” would return a set of 3 IPs
in a different order.
First nslookup
[root@kracnode2 ~]# nslookup kracnode-scan
Server:
192.168.1.100
Address: 192.168.1.100#53
Name: kracnode-scan.india.com
Address: 192.168.1.72
Name: kracnode-scan.india.com
Address: 192.168.1.70
Name: kracnode-scan.india.com
Address: 192.168.1.71
Second nslookup
[root@kracnode2 ~]# nslookup kracnode-scan
Server: 192.168.1.100
Address:
192.168.1.100#53
Name: kracnode-scan.india.com
Address: 192.168.1.70
Name: kracnode-scan.india.com
Address: 192.168.1.71
Name: kracnode-scan.india.com
Address: 192.168.1.72
Note: If your DNS server does not
return a set of 3 IPs as shown in figure 3 or does not round-robin, ask your
network administrator to enable such a setup. DNS using a round-robin algorithm
on its own does not ensure failover of connections. However, the Oracle Client
typically handles this. It is therefore recommended that the minimum version of
the client used is the Oracle Database 11g Release 2 client. Refer about DNS configuration ClickHere.
THE GRID NAMING SERVICE (GNS)
If you choose option 2, you only need to enter the SCAN during the
interview. During the cluster configuration, three IP addresses will be
acquired from a DHCP service (using GNS assumes you have a DHCP service
available on your public network) to create the SCAN and name resolution for
the SCAN will be provided by the GNS.
IF YOU DO NOT HAVE A DNS SERVER AVAILABLE AT INSTALLATION TIME
Oracle Universal
Installer (OUI) enforces providing a SCAN resolution during the Oracle Grid
Infrastructure installation, since the SCAN concept is an essential part during
the creation of Oracle RAC 11g Release 2
databases in the cluster. All Oracle Database 11g Release 2 tools used
to create a database (e.g. the Database Configuration Assistant (DBCA), or the
Network Configuration Assistant (NetCA)) would assume its presence. Hence, OUI
will not let you continue with the installation until you have provided a
suitable SCAN resolution.
However, in order
to overcome the installation requirement without setting up a DNS-based SCAN resolution, you can use a hosts-file
based workaround. In this case, you would use a typical hosts-file entry to
resolve the SCAN to only 1 IP address and one IP address only. It is not
possible to simulate the round-robin resolution that the DNS server does using
a local host file. The host file look-up the OS performs will only return the
first IP address that matches the name. Neither will you be able to do so in
one entry (one line in the hosts-file). Thus, you will create only 1 SCAN for
the cluster. (Note that you will have to change the hosts-file on all nodes in
the cluster for this purpose.)
This workaround
might also be used when performing an upgrade from former (pre-Oracle Database
11g Release 2) releases. However, it is strongly recommended to enable the SCAN
configuration as described under “Option 1” or “Option 2” above shortly after
the upgrade or the initial installation. In order to make the cluster aware of
the modified SCAN configuration, delete the entry in the hosts-file and then
issue: "srvctl modify
scan -n <scan_name>" as the root user
on one node in the cluster. The scan_name provided can be the existing fully
qualified name (or a new name), but should be resolved through DNS, having 3
IPs associated with it, as discussed. The remaining reconfiguration is then
performed automatically.
SCAN CONFIGURATION IN THE CLUSTER
During
cluster configuration, several resources are created in the cluster for SCAN.
For each of the 3 IP addresses that the SCAN resolves to, a SCAN VIP resource
is created and a SCAN Listener is created. The SCAN Listener is dependent on
the SCAN VIP and the 3 SCAN VIPs (along with their associated listeners) will
be dispersed across the cluster. This means, each pair of resources (SCAN VIP +
Listener) will be started on a different server in the cluster, assuming the
cluster consists of three or more nodes. In case, a 2-node-cluster is used (for
which 3 IPs are still recommended for simplification reasons), one server in
the cluster will host two sets of SCAN resources under normal operations. If
the node where a SCAN VIP is running fails, the SCAN VIP and its associated
listener will failover to another node in the cluster. If by means of such a
failure the number of available servers in the cluster becomes less than three,
one server would again host two sets of SCAN resources. If a node becomes
available in the cluster again, the formerly mentioned dispersion will take
effect and relocate one set accordingly.
[oracle@kracnode1 ~]$ srvctl
config scan_listener
SCAN Listener LISTENER_SCAN1
exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN2
exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN3
exists. Port: TCP:1521
[oracle@kracnode1 ~]$ srvctl
config scan
SCAN name:
kracnode-scan.india.com, Network: 1/192.168.1.0/255.255.255.0/eth0
SCAN VIP name: scan1, IP:
/192.168.1.70/192.168.1.70
SCAN VIP name: scan2, IP:
/192.168.1.71/192.168.1.71
SCAN VIP name: scan3, IP:
/192.168.1.72/192.168.1.72
[oracle@kracnode1 ~]$
DATABASE
CONFIGURATION USING SCAN
For Oracle Database 11g Release 2,
SCAN is an essential part of the configuration and therefore the
REMOTE_LISTENER parameter is set to the SCAN per default, assuming that the
database is created using standard Oracle tools (e.g. the formerly mentioned DBCA).
This allows the instances to register with the SCAN Listeners as remote
listeners to 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.
In this context, the LOCAL_LISTENER
parameter must be considered. The LOCAL_LISTENER parameter should be set to the node-VIP. If
you need fully qualified domain names, ensure that LOCAL_LISTENER is set to the
fully qualified domain name (e.g. node-VIP.example.com). By default, a node
listener is created on each node in the cluster during cluster configuration.
With Oracle Grid Infrastructure 11g Release 2 the node listener run out of the
Oracle Grid Infrastructure home and listen on the node-VIP using the specified
port (default port is 1521).
Unlike
in former database versions, it is not recommended to set your REMOTE_LISTENER
parameter to a server side TNSNAMES alias that resolves the host to the SCAN
(HOST=kracnode-scan for example) in the address list entry, but use the
simplified “SCAN:port”
SQL> show parameter
listener
NAME TYPE VALUE
------------------------------------
----------- ------------------------------
listener_networks string
local_listener string (DESCRIPTION=(ADDRESS_LIST=(AD
DRESS=(PROTOCOL=TCP)(HOST=krac
node1-vip)(PORT=1521))))
remote_listener string kracnode-scan.india.com:1521
Note: if you
are using the easy connect naming method, you may need to modify your
SQLNET.ORA to ensure that EZCONNECT is in the list when specifying the order of
the naming methods used for the client name resolution lookups (the Oracle 11g
Release 2 default is NAMES.DIRECTORY_PATH=(tnsnames, ldap, ezconnect)).
HOW CONNECTION LOAD BALANCING WORKS USING SCAN
For
clients connecting using Oracle SQL*Net 11g Release 2, three IP addresses will
be received by the client by resolving the SCAN name through DNS as discussed.
The client will then go through the list it receives from the DNS and try
connecting through one of the IPs received. If the client receives an error, it
will try the other addresses before returning an error to the user or
application. This is similar to how client connection failover works in
previous releases when an address list is provided in the client connection
string.
When
a SCAN Listener receives a connection request, the SCAN Listener will check for
the least loaded instance providing the requested service. It will then
re-direct the connection request to the local listener on the node where the
least loaded instance is running. Subsequently, the client will be given the
address of the local listener. The local listener will finally create the
connection to the database instance.
Note: This example assumes an Oracle 11g Release 2 client using a default
TNSNAMES. ora:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = kracnode-scan.india.com)(PORT =
1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL.INDIA.COM)
)
)
VERSION AND BACKWARD COMPATIBILITY
The successful use of SCAN to connect to an Oracle RAC database in
the cluster depends on the ability of the client to understand and use the SCAN
as well as on the correct configuration of the REMOTE_LISTENER parameter setting
in the database. If the version of the Oracle Client connecting to the database
as well as the Oracle Database version used are both Oracle Database 11g
Release 2 and the default configuration is used as described in this paper, no
changes to the system are typically required.
The same holds true, if the Oracle Client version and the version
of the Oracle Database that this client is connecting to are both pre-11g
Release 2 version (e.g. Oracle Database 11g Release 1 or Oracle Database 10g
Release 2, or older). In this case, the pre-11g Release 2 client would use a
TNS connect descriptor that resolves to the node-VIPs of the cluster, while the
Oracle pre-11g Release 2 database would still use a REMOTE_LISTENER entry
pointing to the node-VIPs. The disadvantage of this configuration is that SCAN
would not be used and hence the clients are still exposed to changes every time
the cluster changes in the backend. Similarly, if an Oracle Database 11g
Release 2 is used, but the clients remain on a former version. The solution is
to change the Oracle client and / or Oracle Database REMOTE_LISTENER settings
accordingly. The following cases need to be considered:
Oracle
Client Version
|
Oracle
Database Version
|
Comment
|
Oracle
Database 11g Release 2
|
Oracle
Database 11g Release 2
|
No
change required.
|
Oracle
Database 11g Release 2
|
Pre-
Oracle Database 11g Release 2
|
Add
the SCAN VIPs as hosts to the
REMOTE_LISTENER
parameter.
|
Pre-
Oracle Database 11g Release 2
|
Oracle
Database 11g Release 2
|
Change
the client TNSNAMES.ora to include the SCAN VIPs (* see below). IF
the database was upgraded using the DBUA from a pre-11g Rel. 2
database, the DBUA will configure the REMOTE_LISTENER parameter to point to
the node-VIPs as well as the SCAN.
|
Pre-
Oracle Database 11g Release 2
|
Pre-
Oracle Database 11g Release 2
|
If
you want to make use of SCAN
(recommended):
add the SCAN VIPs as hosts to the
REMOTE_LISTENER
parameter.
AND
Change the client TNSNAMES.ora to
include
the SCAN VIPs (* see below). Otherwise, no change required.
|
Sample TNSNAMES.ora for Oracle Database pre- 11g Release 2
Clients
ORCL.INDIA.COM=(DESCRIPTION=
(ADDRESS_LIST=
(LOAD_BALANCE=on)(FAILOVER=ON)
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.70)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.71)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=
ORCL.INDIA.COM)))
Common Questions Regarding SCAN
The following is a list
of commonly asked questions regarding SCAN:
How can we configure the SCAN and SCAN listener?
During Typical
installation, you are prompted to confirm the default Single Client Access Name
(SCAN), which is used to connect to databases within the cluster irrespective
of which nodes they are running on. If you change the SCAN from the
default, then the name that you use must be globally unique throughout your
enterprise.
If the SCAN name resolves to one IP address, root script (root.sh or rootupgrade.sh) will create the number of SCAN VIP resources(ora.scan1.vip) and corresponding SCAN listener resource(ora.LISTENER_SCAN1.lsnr) depend on how many IP address the SCAN name resolves to, i.e.if the SCAN name resolves to two IP addresses, it will create two SCAN VIP resources and two corresponding SCAN listener resource.
If the SCAN name resolves to one IP address, root script (root.sh or rootupgrade.sh) will create the number of SCAN VIP resources(ora.scan1.vip) and corresponding SCAN listener resource(ora.LISTENER_SCAN1.lsnr) depend on how many IP address the SCAN name resolves to, i.e.if the SCAN name resolves to two IP addresses, it will create two SCAN VIP resources and two corresponding SCAN listener resource.
SCAN VIP and the
corresponding SCAN listener works like a pair, when SCAN VIP fails over to
other node, the corresponding SCAN listener will also be failed over to the
same node.
When 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.
Also we can use 'srvctl'
to add/modify the scan resource and the listeners. Please refer to
"Real Application Clusters Admin and Deployment Guide" or Note 1053147.1 for more information.
Do we still need to configure local listeners on each node?
Yes, you would need to
configure independent local listeners for each node. SCAN listeners are
not replacements for the node listeners.
A new set of cluster processes called scan listeners will run on three nodes in a cluster (or all nodes if there are less than 3). If you have more than three nodes, regardless of the number of nodes you have, there will be at most three scan listeners. The database registers with the SCAN listener through the remote listener parameter in the init.ora/spfile. If any of these clustered processes fail, they are automatically restarted on a new node.
A new set of cluster processes called scan listeners will run on three nodes in a cluster (or all nodes if there are less than 3). If you have more than three nodes, regardless of the number of nodes you have, there will be at most three scan listeners. The database registers with the SCAN listener through the remote listener parameter in the init.ora/spfile. If any of these clustered processes fail, they are automatically restarted on a new node.
How does SCAN work ?
"When a client
submits a request, 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 on the least-loaded node (Each scan listener
keeps updated cluster load statistics) where the service is currently being
offered. Finally, the client establishes connection to the service through the
listener on the node where service is offered.All of these actions take place
transparently to the client without any explicit configuration required in the
client."
[oracle@kracnode1]$ srvctl STATUS SCAN_LISTENER
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node
kracnode1
SCAN Listener LISTENER_SCAN2 is enabled
SCAN listener LISTENER_SCAN2 is running on node
kracnode2
SCAN Listener LISTENER_SCAN3 is enabled
SCAN listener LISTENER_SCAN3 is running on node
kracnode3
[oracle@kracnode1]$
Instead of DNS or GNS, Can we use '/etc/hosts' to resolve SCAN?
Oracle strongly
recommends that you do not configure SCAN VIP addresses in the hosts file. But
if you use the hosts file to resolve SCAN name, you can have only one SCAN IP
address.
failure at end of installation (See NOTE 887471.1 for more details)
failure at end of installation (See NOTE 887471.1 for more details)
Can we use the previous method (Using VIP) for client connection?
Clients can continue to
access the cluster in the same way as with previous releases. Vips are still
used internally, and can still be used for connections. But Oracle strongly
recommends that clients accessing the cluster use the SCAN. Clients using the
SCAN can also access the cluster using EZCONNECT.
Is it mandatory to use SCAN?
It's highly recommended
to use SCAN unless there's strong business reason preventing it from being
used.
Is it supported to remove SCAN?
Is it recommended to use COST feature?
As a Best Practice,
Oracle recommends using the COST feature to restrict instance registration with
SCAN listeners as part of your standard listener configuration. Refer to note 1340831.1 for more details.
Sample TNS entry for
SCAN
ORCL =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=kracnode-scan.india.COM)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=ORCL.INDIA.COM))
)
Sample TNS Entry
without SCAN
ORCL =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=kracnode1-vip.india.com)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=kracnode2-vip.india.com)(PORT=1521))
)
(CONNECT_DATA=(SERVICE_NAME=ORCL.INDIA.COM))
)
-------------------------------------------------------------------------------------------------------------------------
Hope! This helps...
Regards,
Kavin.
BE THE BEST!!! BE WITH THE BEST !!!.
V nice and detailed Description of Scan Names!, solved many of my doubts..
ReplyDeleteExcellent article abt SCAN ....Hats off...Keep up the good work
ReplyDeletevery useful and brilliantly explained .. keep up the good posting ..
ReplyDeleteexpecting much more from your blog..
Very useful to know about SCAN in detail...Good Article kavin :)
ReplyDeleteGreat work, Easy to understand, Keep up the good work.
ReplyDeleteExcellent.
ReplyDeleteexcellent...........................
ReplyDeleteAwesome explanation .....
ReplyDeletesuperbbb yar vry thqnq...
ReplyDeleteExcellent article ..Appreciate ur efforts ...Thanks
ReplyDeleteVary nice Article.
ReplyDeleteCan u please tell the database connection strings that an Oracle Client uses to connect to access Oracle Databases running in a cluster using ODP.net
ReplyDeleteReally Good
ReplyDeleteVery good article
ReplyDeleteIn SCAN CONFIGURATION IN THE CLUSTER ... you should to do ... srvctl modify scan_listener –u
ReplyDeletebtw ... very helpful article
ReplyDeletevery good article...
ReplyDeletevery nice can you update the client TNSNAME.ora
ReplyDeleteVery nice explanation, Thanks a heap for sharing :)
ReplyDeleteGreat help solve all my doubts regrading. I wish I could find this doc in earlier time
ReplyDeleteThank you, definitely learned quite a bit.
ReplyDeleteGood Article..
ReplyDeleteNice explanation. Really helpful .
ReplyDeleteGood one. Very Useful.
ReplyDeleteThis is an excellent piece of work. Thanks a ton.
ReplyDeleteExcellent work kavin
ReplyDelete