oracle静态监听 (oracle监听服务未注册)

概述

动态服务是实例在服务器上启动并运行时向*听器侦**注册的代表,而静态服务( SID_LIST_LISTENER )可用于服务外部连接,无论是否在服务器上运行实例,连接非常有用到空闲或 NOMOUNT 数据库。

根据Oracle 19c Advanced Features of Oracle Net Services,静态服务的用例可以是以下任何一种:

  • 外部过程调用
  • Oracle 异构服务
  • Oracle Data Guard
  • 从 Oracle Enterprise Manager Cloud Control 以外的工具远程启动数据库
  • 与早于 Oracle8i 版本 2 (8.1) 的 Oracle 数据库的连接

oracle静态监听,启动oracle监听服务

1.添加单个静态服务

启用静态服务注册功能的配置非常简单,只需在监听器配置文件中添加一个名为 SID_LIST_LISTENER 的条目,该文件通常位于 $ORACLE_HOME/network/admin/listener.ora ,然后重新启动监听器。

[oracle@test ~]$ vi $ORACLE_HOME/network/admin/listener.ora...SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)(SID_NAME=ORCL)))

基本上,静态服务注册至少需要知道两项, ORACLE_HOME ORACLE_SID 。如您所见,我们在条目中提供了它们。

2.添加多个静态服务

对于更多 ORACLE_SID ,您可以像这样将 SID_LIST 附加到条目中。

[oracle@test ~]$ vi $ORACLE_HOME/network/admin/listener.ora...SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)(SID_NAME=ORCL)) (SID_DESC=(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)(SID_NAME=SMALLDB)) )

3. 使用 GLOBAL_DBNAME

对于那些 DB_DOMAIN 不为空的数据库,您应该在 SID_LIST中添加更多信息GLOBAL_DBNAME

[oracle@test ~]$ vi $ORACLE_HOME/network/admin/listener.ora...SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)(SID_NAME=ORCL)) (GLOBAL_DBNAME=orcl.example.com) )

GLOBAL_DBNAME 的格式如下:

<DB_UNIQUE_NAME>.<DB_DOMAIN>

在上述情况下,数据库的 DB_DOMAIN example.com 。请注意,如果您的 DB_DOMAIN 为空,则不必添加它。不要忘记重新启动监听器以立即生效。

4. Data Guard Broker 的静态服务

您必须为数据保护代理添加一个特殊的静态服务 <DB_UNIQUE_NAME>_DGMGRL.<DB_DOMAIN> 以启用需要重新启动实例而无需手动干预的代理操作,例如通过 switchover 在主数据库和备用数据库之间进行角色转换。

[oracle@test ~]$ vi $ORACLE_HOME/network/admin/listener.ora...SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)(SID_NAME=ORCL)) (GLOBAL_DBNAME=ORCL _DGMGRL ) )

请注意,如果您的 DB_DOMAIN 为空,则不必添加它。所有服务名称最好大写。

服务名称的状态

让我们看看他们在监听器中的状态。

[oracle@test ~]$ lsnrctl status...Services Summary...Service "ORCL" has 2 instance(s). Instance "ORCL", status UNKNOWN, has 1 handler(s) for this service... Instance "ORCL", status READY, has 1 handler(s) for this service...Service "ORCLXDB" has 1 instance(s).Instance "ORCL", status READY, has 1 handler(s) for this service...The command completed successfully

静态服务 ORCL 的状态被标记为 UNKNOWN ,而动态服务是 READY ,这意味着实例确实存在并准备好服务。