ORACLE 关于监听listener所有知识点涵盖文档

发布时间:2012-10-18 11:38:01   来源:文档文库   
字号:

三个文件位置 $ORACLE_HOME/network/adminsqlnet.ora tnsnames.ora listener.ora


监听类型:

静态注册、动态注册


监听器里的服务的状态

ready:此状态的服务是由PMON进程注册的,由于PMON进程所在的实例是打开的,这些服务名所对应的
实例已经准备(ready)好接受用户的连接请求了。

unknown:此状态的服务时静态注册的,监听器并不确定该服务名所对应的实例名是否已经打开,所以
状态时未知的。


异机监听:

利用remote_listener参数,使数据库服务与监听服务分离。

条件:

远程服务器(即监听所在服务器)安装数据库软件,监听进程正常状态。

服务器说明:

远程服务器为:192.168.10.12

数据库服务器:192.168.10.15

步骤:

(1)配置数据库服务器中 tnsnames.ora文件、remote_listener 参数


tnsnames.ora

remote12 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.12)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

alter system set remote_listener='remote12' scope=spfile/memory/both;

alter system register;


(2)查看远程服务器中对应端口监听状态,并配置tnsnames.ora文件


lsnrctl status

tnsnames.ora

remote15 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.12)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)


(3)测试是否正确监听

sqlplus xxx/xxx@remote15


文件作用:

sqlnet.ora -----作用类似于linux或者其他unixnsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串,

  
  例如我们客户端输入
  
  sqlplus sys/oracle@orcl
  
  假如我的sqlnet.ora是下面这个样子
  
  SQLNET.AUTHENTICATION_SERVICES= (NTS)
  
  NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)
  
  那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ipGLOBAL_DBNAME=orcl这个实例,当然我这里orcl并不是一个主机名
  
  如果我是这个样子
  
  NAMES.DIRECTORY_PATH= (TNSNAMES)
  
  那么客户端就只会从tnsnames.ora查找orcl的记录
  
  括号中还有其他选项,如LDAP等并不常用。

tnsnames.ora -----作用用来提供服务名 通过服务名确定连接的数据库服务器,端口。动态注册也用到服务名。


listener.ora ------作用用来配置监听。静态监听在此进行配置。一个listener配置对应一个监听进程。


参数作用:

local_listener -------作用用来确定动态注册服务名。空值则默认为listener

相关命令介绍:

lsnrctl start/status/stop

相关数据库命令介绍:

alter system set local_listener='注册的服务名' scope=memory/spfile/both;

alter system register;----手工注册

alter system set local_listener=' (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1522))';

相关配置文件解读:


listener.ora

SID_LIST_LISTENER4 = ------------配置静态监听 SID_LIST_对应的监听名称
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl) ------------------------配置全局数据库名 可用 show parameter service_name 获得
(SID_NAME = orcl) ------------------------配置SID 可用 select instance_name from v$instance;获得
(ORACLE_HOME = /u01/oracle/product/10.2.0/db_1) ------------------- $ORACLE_HOME
#(PROGRAM = extproc)
)
)

LISTENER1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1522))
)
)
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1523))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ---------------------此处用来分辨监听配置信息 如不添加所有配置信息默认为同一监听
)
)
LISTENER3 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1524))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
)
LISTENER4 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1525))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC2))
)
)

sqlnet.ora

# sqlnet.ora Network Configuration File: /u01/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

tnsnames.ora

ORCL10G = -------集中所有服务信息 用来确保所有服务名即所有监听进程(除静态注册外)都被PMON进程动态自动注册。
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1523))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1524))
)

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ORCL1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ORCL2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1523))
(CONNECT_DATA =
(SERVER = DEDICATED) -----------------------独占一个服务端进程 shared 共享服务端进程
(SERVICE_NAME = orcl)
)
)
ORCL3 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.15)(PORT = 1524))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

客户端连接方式:

专用连接

共享服务器连接


1.专用连接:默认的连接方式,一个用户进程对应一个服务器进程
用户进程退出,服务器进程也退出,释放所有的资源

2.共享服务器模式:用户进程与服务器进程是多对多的关系,多个服务器进程会处理多个用户进程

专用连接中,用户进程没有发出命令,服务器进程处于空闲状态,资源一直占用,共享模式中,
只要是服务器进程空闲,就可以处理其他用户发出的命令,因此服务器进程的数量减少,对资源的
利用更加高效,占用的PGA减少,可以支持更多的用户

共享连接的工作过程
共享连接模式下,需要配置多个名为dispatcher的组件,dispatcher作为用户进程和服务器进程之间的
协调者,负责将用户进程的请求传递给服务器进程,并将服务器进程得到结果返回给用户PMON定期
将每个dispatcher的地址、以及工作负载注册到监听器里面,当用户进程连接监听器时,监听器会选择
一个负载最低的dispatcher,并把该dispatcher的地址返回给用户进程,用户进程和dispatcher进程建立
连接,用户进程在session的整个生命期间,所连接的dispatcher不会发生改变

共享连接的具体步骤如下:

1、用户进程连接到监听器
2、监听器根据注册的各个dispatcher的负载情况,选择一个负载最低的dispatcher,并将其地址返回给用户进程
3、用户进程根据监听器返回的dispatcher地址,连接到该dispatcher
4dispatcher接收到用户进程发出的请求以后,会将该请求放入请求队列,该队列位于SGA中,请求队列被所有的dispatcher共有
5、在服务器进程中,最空闲的服务器进程会从请求队列中按照先进先出的原则,挑选一个请求进行处理
6、服务器进程处理请求后,得到的结果放入响应队列,Oracle为每个dispatcher分配一个对应的响应队列
7dispatcher到相应的队列中取出结果,返回给用户进程

注意:

1、专用连接中,用户进程和服务器进程一一对应,用户进程对应的PGA被服务器进程独享
2、共享连接中,多个服务器进程会处理多个用户请求,用户的PGA就需要在不同的服务器
进程之间共享,PGA中的UGA部分就会被放入到SGA中,如果配置了large pool,则UGA
large pool里分配,没有配置large pool,那么UGA就放在shared pool里面

配置共享连接

配置共享连接时,包含以下几个方面:

1、配置dispatcher进程的数量

show parameter dispatcher

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dispatchers string (PROTOCOL=TCP) (SERVICE=orclXD
B)

alter system set dispatchers='(PROTOCOL=TCP) (dispatchers=3)';

表示启动三个dispatcher,以tcp协议进行连接。可以通过max_dispatchers参数定义数据库里最多
可以同时启动多少个dispatchers,如;

alter system set max_dispatchers=5;

服务器进程

通过设置shared_servers来配置服务器进程,如:

alter system set shared_servers=5;

服务器进程可以根据需要动态生成。如果将shared_servers设置为0,则服务器进程一旦使用完毕就会被删除。
我们应该建立较少的服务器进程,如果不够用的话,则让系统根据负载自动创建额外的服务器进程。能够自动
同时创建的服务器进程个数有参数max_shared_servers决定。如:

alter system set max_shared_servers=20;

这时数据库默认会有5个服务器进程运行,当数据库负载增加,需要额外的服务器进程时,则会自动创建服务器
进程,最多有20个服务器进程。而当数据库负载下降时,也会自动删除服务器进程,直到剩下5个服务器进程。

共享连接的session个数

参数shared_server_sessions说明同时可以进行共享连接的session的个数。
能够同时使用专用连接的session个数等于参数sessions减去shared_server_sessions的值。

alter system set shared_server_sessions=5;

在服务器端配置了共享连接以后,还需要在客户端的tnsnames.ora文件里指明,要采用共享连接方式进行连接,如:

uplooking =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.20)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
(SERVER = shared) --------如果是专用的话是:SERVER=DEDICATED
)
)

当我们以uplooking作为客户端的连接字符串连接到数据库以后,可以用如下方式显示服务名的详细信息,从而验证是否成功建立共享连接;

lsnrctl service

Service "orcl.uplooking" has 1 instance(s).
Instance "orcl", status READY, has 4 handler(s) for this service...
Handler(s):
"D002" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER
(ADDRESS=(PROTOCOL=tcp)(HOST=uplooking)(PORT=9980))
"D001" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER
(ADDRESS=(PROTOCOL=tcp)(HOST=uplooking)(PORT=8050))
"D000" established:1 refused:0 current:1 max:1022 state:ready
DISPATCHER
(ADDRESS=(PROTOCOL=tcp)(HOST=uplooking)(PORT=3664))
"DEDICATED" established:0 refused:0 state:ready
LOCAL SERVER

可以看到,名为D001dispatcher建立了一个连接(established:0 )该dispatcher8050号端口与用户进程进行连接。

共享连接的限制

有些操作不能在共享连接下完成。
启动关闭数据库实例
创建表空间和数据文件
维护表和索引等数据库管理的工作。

共享连接适用于单纯的OLTP应用。对于需要扫描大量数据,运行时间较长的操作,不适合采用共享连接,例 如备份恢复

相关示意图:

网络连接示意图

监听注册示意图



本文来源:https://www.2haoxitong.net/k/doc/eb9615d749649b6648d7471f.html

《ORACLE 关于监听listener所有知识点涵盖文档.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式