监听:客户端与数据库通信建立连接的时候,帮个小忙,在数据库和客户端之间建立起连接。

 

特点:独立性。监听是数据库独立的一个模块,它可以在数据库启动后再起监听,或者先起监听,再起数据库。监听与数据库没有太大关系。

 

1.先介绍两个文件

listener.ora:他是在数据库服务端建立的。他里面就是监听的ip地址和端口号。他和监听建立连接。

LISTENER =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL =TCP)(HOST = 172.16.40.5)(PORT = 1521))

  )

tnsname.ora:他是在客户端建立的服务命名。有了这个文件,当我们登录的时候输入的网络服务名才能够被解析。

HELLO =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL =TCP)(HOST = 172.16.40.5)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = orcl)

    )

  )

HELLO:网络服务名。tnsping +网络服务名  就是这个。自己可以随便定义。

(HOST = 172.16.40.5)(PORT = 1521):监听服务的位置。ip+端口。其实我们所说的服务也就是ip+端口。

(SERVICE_NAME = orcl) :监听可以链接到具体的库。

 

2.工作过程:

 

当数据库已经启动,通过客户端(sqlplusweb页面)进行连接。如在sqlplus里面输入sqlplus hr/hr@网络服务名 其中用户名密码是数据库的。当客户端发起连接的时候,客户端只会做一件事:


客户端会去tnsname.ora里面解析去解析这个字符串,解析我们连谁(ip),端口号,服务名(在这个端口上面的具体服务)。所以会先连接监听。监听和数据库互相知道彼此在哪,

监听转发用户请求,转发给实例,实例会专门为这个连接启动一个前台进程,server process.同时实例将process的地址告诉监听,监听又把这个地址转发给

客户端。然后客户端知道数据库在哪了,就会直接发起一个对数据库的请求。数据库验证用户名密码,正式建立连解。注意,此时没有监听什么事了。你也可以停止监听,即监听只是知道数据库在什


么地方,和数据库之间没有长连接

而且监听,数据库和客户端建立连接的时候,负责转发。唯一出问题的就是,短时间内有大量的连接请求。感觉就是用户连接数据库的时候很慢。一般情况没有负载。wKioL1V05QTAVOaSAAJs8luSF08271.jpg


3.监听就是一个端口。客户端就是连接1521端口。自己也可以定义。

4.注册。回想上面的连接过程,当我们在监听里边转发客户端请求的时候,我们怎么知道连接哪一个库,这就得在监听里面验证,验证service_name。数据库会把自己的service_name注册到监听里面


,而客户端会发送自己想要连接的service_name。监听里面就有两个,监听进行验证,如果两个相同,才进行连接。注册分为以下两种:

.动态注册。实例自动注册到监听里面默认情况下,oracle数据库会把自己的service_name注册到监听里边去。PMON进程会将service_name注册到监听

手动强制注册

alter system register;

 

.2.静态注册,是为了解决oracle动态注册不稳定的情况。他通过手动添加参数实现。

 

查看注册方式

[oracle@oracle11g admin]$ lsnrctl status

服务 "orcl"包含 2 个实例。

  实例"orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...   

  实例"orcl", 状态 READY, 包含此服务的 1 个处理程序...     

这个命令就可以查看。数据库是否在里面注册。ready这个就是自动注册。动态注册,方便。unknown这个就是手动注册的。静态注册,快,稳定。

5.方法

1)一个数据库会有很多网卡,可以用这个命令查看侦听在哪个网卡上面。

oracle@oracle11g admin]$ netstat -tunlp | grep 1521

(Not all processes could be identified, non-owned process info

 will not be shown, you wouldhave to be root to see it all.)

tcp        0      0 172.16.40.5:1521            0.0.0.0:*                   LISTEN

2)查看服务命名

SQL> show parameter service;

 

NAME                                TYPE        VALUE

------------------------------------ -----------------------------------------

service_names                       string      orcl

3)查看实例名

SQL> show parameter instance;

4)查看各种名字。

SQL> show parameter name

 

NAME                                TYPE        VALUE

------------------------------------ -----------------------------------------

db_file_name_convert                string

db_name                             string      orcl

db_unique_name                      string      orcl

global_names                        boolean     FALSE

instance_name                       string      orcl

lock_name_space                     string

log_file_name_convert               string

 

6.连接方法

sqlplus scott/tiger      不走监听

sqlplus scott/tiger@网络服务名,sqlplusscott/tiger@hello

sqlplus scott/tiger@172.16.40.5:1521/orcl              这相同,只是上面有网络服务名,监听不认识,就会解析。

sqlplus / as sysdab