In the doc you’ll find, it’s the Oracle system identifier.
Okay, let’s imagine the following
Environment:
ORACLE_SID=ORA001
init.ora:
DB_NAME=DB001 DB_UNIQUE_NAME=UNI001 INSTANCE_NAME=INS001 SERVICE_NAMES=SVC001,SVC002 DB_DOMAIN=EXAMPLE.COM GLOBAL_NAMES=false
database:
SQL> select * from GLOBAL_NAME; GLO001.example.com
listener.ora:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_NAME=GLO001.EXAMPLE.COM) (SID_NAME=ORA001) ) )
What is my SID? Actually there is more than one correct answer.
In the environment, Oracle SID is ORA001. This matches SID_NAME in listener.ora. It does not have to match database name, unique name, global name or instance_name.
$ lsnrctl services Services Summary... Service "GLO001.EXAMPLE.COM" has 1 instance(s). Instance "ORA001", status UNKNOWN, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:7 refused:0 LOCAL SERVER
As the instance is not running, I have only my listener.ora static connections.
The SERVICE_NAME is GLO001.EXAMPLE.COM and the SID is ORA001.
$ sqlplus "sys/***@ (DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=SRV001) (PORT=1521) ) (CONNECT_DATA= (SERVICE_NAME=GLO001.EXAMPLE.COM) ) )" as sysdba Connected to an idle instance. SQL> $ sqlplus "sys/***@ (DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=SRV001) (PORT=1521) ) (CONNECT_DATA= (SID=ORA001) ) )" as sysdba Connected to an idle instance. SQL>
Let’s start
SQL> startup
and check my services
$ lsnrctl services Services Summary... Service "SVC001.EXAMPLE.COM" has 1 instance(s). Instance "INS001", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "SVC002.EXAMPLE.COM" has 1 instance(s). Instance "INS001", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "UNI001.EXAMPLE.COM" has 1 instance(s). Instance "INS001", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "GLO001.EXAMPLE.COM" has 1 instance(s). Instance "ORA001", status UNKNOWN, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:13 refused:0 LOCAL SERVER The command completed successfully
I know have 4 service names :
- The global name in listener.ora
- the unique name in init.ora
- both service name in init.ora
And 2 sid
- The SID in listener.ora
- The instance name in init.ora
While we often have sid = oracle_sid = service_name = service_names = global_name = instance_name = db_name = db_unique_name, if you switch from SID to SERVICE_NAME, this could be help to identify legacy application.
If you read the doc carefully, you may have noticed the SID is no longer documented as a valid clause of CONNECT_DATA in 11g and 12c
In 10gR2 :
http://docs.oracle.com/cd/B19306_01/network.102/b14213/tnsnames.htm#i477921
Use the parameter SID to identify the Oracle8 database instance by its Oracle System Identifier (SID). If the database is Oracle9i or Oracle8, use the SERVICE_NAME parameter rather than the SID parameter.
This is probably a documentation bug, I would rephrase this as If the database is Oracle9i or Oracle8i or later.
In 11g and 12c, the comment disappeared. Oracle 8i was released last century, but SID didn’t completly disappear from tnsnames. Yet.
Pingback: What is the instance name? – Laurent Schneider
Always nice refresh, thanks
Pingback: sid and pluggable – Laurent Schneider