oracle 监听器概念

监听就像人的耳朵,数据库装好后开启监听,客户段才能访问。

数据库软件11g安装之后默认是安装了监听,如没有安装,用netca进入到图形方式去安装。

这里面设计到几个概念, DB_NAME,INSTANCE_NAME,ORACLE_SID,GLOBAL_DBNAME,SERVICE_NAME
一、DB_NAME:数据库标识符,存在于控制文件,数据文件,参数文件,日志文件等
二、INSTANCE_NAME:实例唯一标识符,如RAC环境,存在多实例情况下,用instance_name区别每个实例,
三、ORACLE_SID:实例标识符,以环境变量形式存在,同时用于对应共享内存段,与NSTANCE_NAME的区别在于ORACLE_SID标示进程,ORACLE_SID容易更改,不像DB_NAME更改涉及到控制文件等,比如一个库里面建立了二个实例,在进入某一个具体实例之前,先export ORACLE_SID=实例名。通过ps -ef | grep oracle 也能看该SID的实例的各个进程

四global_name 是由db_name.db_domain构成的,这里在一个库中设置为SID一样,有多个数据库中这个就设置不一样了,具体的我也不遇到过,这个是在listener.ora设置的,这里设置的global_name要和listen.ora里面的service_name是一样的。

这里顺便提一下,客户端如何与数据库连接的,首先在客户端中装oracle客户端,配置里面的tnaname.ora,如

test =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.22.8.200)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

 

这里的service_name要与global_name一样,这个在用DBCA建库的时候会让我们输入的。

 

 

当你用PLSQL去连接数据库时,客户端根据tnsname.ora中的SERVICE_NAME和地址(ADDRESS = (PROTOCOL = TCP)(HOST = 172.22.8.200))(PORT = 1521)),到这个地址去访问监听器。然后监听器根据文件lisnter.ora文件中的GLOBAL_NAME来判断是否有一个GLOBAL_DBNAME 和 SERVICE_NAME 相等。如果相等,则建立客户端到SID标识的服务端实例的连接。

五 service name 这个在第四个已经讲了。

 

接下来讲讲动态注册与静态注册,所谓动态监听,就是在listener.ora文件中,不需要定义实例Instance具体名称和位置。Oracle实例会在运行之后,由后台进程pmon会周期性的(1-3分钟)到指定端口1521进行状态信息通知。Listener就会自动的进行更新Service情况。

静态注册简单的说,就是监听器的实例注册信息是直接写在listener.ora文件里的。当监听器启动之后,Oracle会根据配置的listener.ora定义的服务去进行连接匹配。

 

这个过程中,一个重点在于:Oracle的注册信息是写死在文件里面的。监听器并不能像动态注册那样切实知道Oracle实例的情况,所以静态注册的状态取值通常是UNKNOW。

通过以上信息可以发现静态监听在listener.ora多配置一些信息,主要是配置指向oracle home相关信息。

同时当数据库中

1、一个监听在一个IP一个端口上监听多个实例
2
、一个监听在不同IP不同端口上监听多个实例
3
、多个监听监听多个实例

如何配置这些监听,网上有人分分享过的。

本文出自 “落水流月” 博客,请务必保留此出处http://startliu.blog.51cto.com/1758520/1358563

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。