ITPub博客

首页 > 数据库 > Oracle > 监听-创建静态监听

监听-创建静态监听

原创 Oracle 作者:pineapple_lch 时间:2014-12-06 18:04:19 0 删除 编辑
lisenter 注册  
1)动态监听:listener 采用的是默认端口(1521),当实例启动时,由pmon 每分钟自动将service name,本机的1521端口号注册到listener
2)静态监听:当listener 一般使用的是非标准端口(如1522),在listener.ora的文件里手工注册(添加GLOBAL_DBNAME 和instance name)

静态注册:
1)静态注册不需要数据库打开,通过读取listener.ora的静态注册描述完成监听器的注册,因为不需要数据库open,所以如果服务器端一旦启动了静态监听,便可以通过sqlplu以sys用户连接到服务器,实现远程启动/关闭数据库的任务。
2)静态注册可以使用用户指定的端口号(非1521),相对隐蔽,安全。
3)静态注册在一些特殊场合,如使用数据库复制技术时是很有用处的。


动态注册:
1)需要数据库打开才能注册成功,所以动态注册无法使用sysdba身份远程启动数据库。一般都是通过远程TELNET先以root登录服务器,这时你已经在服务器本地了,再转入oracle以sysdba身份打开数据库。之后监听器才可以进行动态注册。
2)可以不使用listener.ora,因为动态注册由PMON后台进程自动注册信息,PMON每60秒查看listener进程是否启动,启动了就注册相关服务器信息。
3)PMON默认1521端口。如果非要PMON注册其他非标准端口,需要设置服务器端的listener.ora和tnsnames.ora, 并设定local_listener,使该值为tnsnames.ora的连接符。

动态注册不需要显示的配置listener.ora文件,实例启动的时候,PMON进程根据instance_name,service_name参数将实例和服务动态注册到listerer中。如果没有设定instance_name,将使用db_name初始化参数值。如果没有设定service_names,将拼接db_name和db_domain参数值来注册监听。

第一种 静态和动态都使用1521端口注册。

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.90)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))        --如果想静态监听起作用的话,此行要删除掉。
    )
  )

SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
        (GLOBAL_DBNAME= oracle11g)     --随便起的
        (ORACLE_HOME = /u01/oracle)
        (SID_NAME = hong)
    )
    )

第二种,静态注册监听器使用其他端口,如1522端口。

LSN2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.90)(PORT = 1522))
    )
  )
  
SID_LIST_LSN2 =
    (SID_LIST =
    (SID_DESC =
        (GLOBAL_DBNAME= oracle11g)
        (ORACLE_HOME = /u01/oracle)
        (SID_NAME = hong)
    )
    )

客户端的tnsnames.ora中的动态注册与静态注册描述

90 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.90)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl11)
    )
  )


90_JT =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.90)(PORT = 1522))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = hong)
    )
  )


说明:
1、lisnter.ora中的SID_NAME的值必须与SID的值一致。通过lisnter.ora中的SID_NAME和GLOBAL_DBNAME两个参数以及客户端的tnsnames.ora中的SERVICE_NAME,这三个参数一起作用,可以实现ORACLE客户端与服务端的隔离。
2、客户端tnsnames.ora中静态注册描述时的SERVICE_NAME与服务器端listener.ora中的GLOBAL_DBNAME是对应的;listener.ora中的SID_NAME指的是实例名,与操作系统的环境变量ORACLE_SID也是一致的。
3、客户端tnsnames.ora中动态注册描述时的SERVICE_NAME值应该是SERVICE_NAMES的值(show parameter service_names可查到)。


动态注册的status


例程“hong" :与上面的SID_NAME对应,由INSTANCE_NAME参数值确定。

SQL>alter system set service_names = 'lch' scope=spfile;

修改service_names后的监听状态如下图


静态注册的status



注意:端口是1522,且status UNKNOWN 这两个信息都说明监听是以静态注册的

服务 "oracl11g" :此名称是由GLOBAL_DBNAME参数值决定的,如果未加GLOBAL_DBNAME参数,则此名称就是实例名(hong),如下图


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27661381/viewspace-1358961/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-07-22

  • 博文量
    10
  • 访问量
    40747