从Oracle数据库中的本地命名文件tnsnames.ora来看服务别名、服务名和实例名的区别。

时间:2021-11-25 17:06:58

tnsnames.ora的作用这里就不多述了,各位应该都知道。

首先先看两个例子:

test1 =
(DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SERVER = SHARED)
    (SERVICE_NAME = ORCL)
  )
)

test2 =
(DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST =serv2.example.com )(PORT = 1521))
  )
  (CONNECT_DATA =
    (SID = ORCLPDB)
  )
)
---------------------

上面两个例子,定义了两个Oracle Net服务别名,分别为test1和test2。这里的test1和test2,可以作为客户端连接数据库时所使用的连接描述符,为什么要使用连接描述符,因为简单啊,你也可以通过简单连接方式连接数据库,格式为connect username/password@hostname:1521/orcl。这种方式明显比直接通过连接描述符复杂。

test1中,侦听器使用服务名(service_name)ORCL建立一个针对指定实例的会话。test2中,侦听器建立一个针对实例(sid)ORCLPDB的会话。