lsnrctl 与 tnsnames.ora 的联系

平台:Windoxs XP+Oracle 11G

当使用oralce的 Net Manager创建了一个名为“L3”的Listener后,要想使用lsnrctl启动和关闭 L3 还必须在tnsnames.ora 中配置一个名为L3的条目.

listener.ora

L3 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = princessd)(PORT = 1523))
  )


SID_LIST_L3 =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = m_oracle)
      (ORACLE_HOME = F:appAdministratorproduct11.2.0home)
      (SID_NAME = oracle)
    )
  )

ADR_BASE_L3 = f:appAdministrator

*****************************************************************

tnsnames.ora

L3 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1523))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = m_oracle)
    )
  )

tnanames.ora 中,services_name 必须与你想连接的数据库所暴露出的GLOBAL_DBNAME 相同.

一个监听上是可以注册多个数据库的,而一个CONNECT_DATA只能指定一个services_name.

如果缺少 tnanames.ora 中对应的条目,L3 服务也能够起来。

因为启动监听的时候,会先启动对所定义的地址的监听程序,然后验证在TNAnames.ora中又没有对应的条目。

LSNRCTL> start L3
启动tnslsnr: 请稍候...

TNSLSNR for 32-bit Windows: Version 11.2.0.1.0 - Production
系统参数文件为F:appAdministratorproduct11.2.0homeNETWORKADMINlistener.ora
写入f:appadministratordiag nslsnrprincessdl3alertlog.xml的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=princessd)(PORT=1523)))

TNS-01101: 无法找到服务名称

虽然验证失败,但是后台的监听仍然是正确启动的,第一启动的时候还会创建一个 Windows服务,然后你就可以用那个Windows服务来启动和停止监听了。

但是如果想要用命令 stop L3来停止监听或者 status L3来查询状态,结果如下。因为lsnrctl在查询和关闭监听的时候,是先从tnsnames中找到对应的条目,

然后根据地址连接到监听程序,然后查询状态或者要求监听停止的。因为缺少名为L3的条目,所以不知道到那里查询或者停止监听.

LSNRCTL> stop L3
TNS-01101: 无法找到服务名称L3

LSNRCTL> status L3
TNS-01101: 无法找到服务名称L3

 这个时候要么从Windows服务总去停止监听,或者添加对应的条目在tnsnames.ora中.

原文地址:https://www.cnblogs.com/princessd8251/p/3339961.html