监听:客户端与数据库通信建立连接的时候,帮个小忙,在数据库和客户端之间建立起连接。
特点:独立性。监听是数据库独立的一个模块,它可以在数据库启动后再起监听,或者先起监听,再起数据库。监听与数据库没有太大关系。
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.工作过程:
当数据库已经启动,通过客户端(sqlplus,web页面)进行连接。如在sqlplus里面输入sqlplus hr/hr@网络服务名 。 其中用户名密码是数据库的。当客户端发起连接的时候,客户端只会做一件事:
客户端会去tnsname.ora里面解析去解析这个字符串,解析我们连谁(ip),端口号,服务名(在这个端口上面的具体服务)。所以会先连接监听。监听和数据库互相知道彼此在哪,
监听转发用户请求,转发给实例,实例会专门为这个连接启动一个前台进程,server process.同时实例将process的地址告诉监听,监听又把这个地址转发给
客户端。然后客户端知道数据库在哪了,就会直接发起一个对数据库的请求。数据库验证用户名密码,正式建立连解。注意,此时没有监听什么事了。你也可以停止监听,即监听只是知道数据库在什
么地方,和数据库之间没有长连接
而且监听,数据库和客户端建立连接的时候,负责转发。唯一出问题的就是,短时间内有大量的连接请求。感觉就是用户连接数据库的时候很慢。一般情况没有负载。
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/[email protected]:1521/orcl 这相同,只是上面有网络服务名,监听不认识,就会解析。
sqlplus / as sysdab