三个文件、位置 $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或者其他unix的nsswitch.conf文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串,
例如我们客户端输入 sqlplus sys/oracle@orcl 假如我的sqlnet.ora是下面这个样子 SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME) 那么,客户端就会首先在tnsnames.ora文件中找orcl的记录.如果没有相应的记录则尝试把orcl当作一个主机名,通过网络的途径去解析它的ip地址然后去连接这个ip上GLOBAL_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地址,连接到该dispatcher4、dispatcher接收到用户进程发出的请求以后,会将该请求放入请求队列,该队列位于SGA中,请求队列被所有的dispatcher共有5、在服务器进程中,最空闲的服务器进程会从请求队列中按照先进先出的原则,挑选一个请求进行处理6、服务器进程处理请求后,得到的结果放入响应队列,Oracle为每个dispatcher分配一个对应的响应队列7、dispatcher到相应的队列中取出结果,返回给用户进程注意:1、专用连接中,用户进程和服务器进程一一对应,用户进程对应的PGA被服务器进程独享2、共享连接中,多个服务器进程会处理多个用户请求,用户的PGA就需要在不同的服务器进程之间共享,PGA中的UGA部分就会被放入到SGA中,如果配置了large pool,则UGA会在large pool里分配,没有配置large pool,那么UGA就放在shared pool里面配置共享连接配置共享连接时,包含以下几个方面:1、配置dispatcher进程的数量show parameter dispatcherNAME 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 serviceService "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
相关示意图:
网络连接示意图
监听注册示意图
本文来源:https://www.2haoxitong.net/k/doc/eb9615d749649b6648d7471f.html
文档为doc格式