监听-我的一些理解

比如如下环境:

说明/etc/hosts

#public

10.233.56.200 node1

10.233.56.210 node2

#vip

10.233.56.201 node1-vip

10.233.56.211 node2-vip

#private

192.168.56.200 node1-priv

192.168.56.210 node2-priv

[[email protected] admin]$ vi listener.ora

# listener.ora.node1 Network Configuration File:/oracle/app/oracle/product/10.2.0/db_1/network/admin/listener.ora.node1

# Generated by Oracle configuration tools.

SID_LIST_LISTENER_NODE1 =

(SID_LIST =

(SID_DESC =

(SID_NAME= PLSExtProc)

(ORACLE_HOME = /oracle/app/oracle/product/10.2.0/db_1)

(PROGRAM =extproc)

)

)

LISTENER_NODE1 =

(DESCRIPTION_LIST =

(DESCRIPTION=

(ADDRESS =(PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521)(IP = FIRST))  ##vip

(ADDRESS =(PROTOCOL = TCP)(HOST = 10.233.56.200)(PORT = 1521)(IP = FIRST))  ##public

)

)

如果使用srvctl启动监听那么,其实相当于

Lsnrctl start 监听名(注册到集群里的)

如: lsnrctl start LISTENER_NODE1

可以使用srvctl config listener –n node1查看

假设有$ORACLE_HOME/network/admin/listener.Ora文件,那么使用启动监听都会去读取这个文件,当然没有参数文件监听器也是可以启动,那时监听器依据默认的行为操作。如果不指定监听名称启动那么就会按照listener.Ora里记录的名称启动:如上面的LISTENER_NODE1,我做实验期间(SID_LIST_LISTENER_NODE1把后面的NODE1改成别的不受影响,所以暂且认为他不影响监听,或者说他只是所有监听的列表集名称),如果我没有指定名称直接lsnrctl
start 那么默认去监听文件里找listener而不会找LISTENER_NODE1,不同的监听名称会产生不同的log日志。(个人认为不管有没有指定名称,都是先找listener.ora再根据默认的启动(默认的配置监听名称是LISTENER),所以当指定的名称不是LISTENER同时在Listener.ora里也找不到,那么就会报错,但是如果没指定LISTENER,也没指定其他的,虽然在lisener.ora里找不到,但是默认的监听配置是可以启动的)

说下上面的服务注册问题,这些服务有静态的有动态注册的,

这里的SID_DESC就是静态注册的标识,status是unknow,特点是如果对一个真正的数据库静态注册,那么数据库重启的时候不会重新注册(因为不会去重新读取listener.ora除非监听也重启),所谓动态的就是不写这些(这是瞎扯)。

还有之前认为是tnsnames.ora影响监听器监听到的服务,但是其实跟tnsnames.ora没半毛钱关系。

这里的原理是如:本节点的pmon负责把服务注册到监听器上,但是这个监听器不一定是本地的,也可以是远程的.

Pmon进程在没有local_listener和remote_listener的情况下,默认是找本机1521端口的服务注册,如果找不到那么就不注册.

如果配置了local_listener,那么pmon就会接着按照这个参数值把对应的服务注册到监听中去,这个结束之后pmon还会找remote_listener的参数值,把本地的数据库注册到remote_listener指定的远程服务器监听上(remote_listener的值可以是tns的netservice或者和local_listener一样直接写)

端口的意思我是这样理解的:

1.在listener.ora中这里写的端口号,两个意思,第一是oracle服务器的端口就是这个,多个数据库可以直接在这里配置多个listener_si类似的文件,第二是说监听器需要找这个端口的服务注册--如监听文件设置的端口是11521,那么监听必须找11521端口的数据库服务,而pmon默认只找1521的数据库服务给监听注册,所以就需要依赖参数local_listener.

2.在数据库参数里的端口:如local_listener.ora的参数值,就是pmon读取它,然后注册到监听里去,避免端口不是1521,pmon注册不了。参数remote_listener和local的作用差不多,主要是pmon读取它,然后注册到remote指定的远程服务器数据库实例的监听器上。

还有说明的一点:如果平常监听正常,但是可能有了改动,导致监听器监听不到服务,查看这些文件和参数发现没什么问题后,建议重启监听,如果参数改了的话有可能没生效之类的,建议把参数改回去然后再改回来。

10grac的remote可以不需要配置remote,但是11g racedremote_listener就基本都需要配置,因为scan_listener只会在一个节点上,应用通过连接scan,然后scan自动转发给各个节点,当转发的节点不是本节点,那么因为remote_listener相互注册,所以本节点监听到了其他节点的服务,所以可以把客户端转到其他节点上去。

11g rac如:

[[email protected] admin]$ crs_stat |grep -i lis

NAME=ora.LISTENER.lsnr

TYPE=ora.listener.type

NAME=ora.LISTENER_SCAN1.lsnr

TYPE=ora.scan_listener.type

NAME=ora.rac1.LISTENER_RAC1.lsnr

NAME=ora.rac2.LISTENER_RAC2.lsnr

SQL> show parameter lis

NAME                                 TYPE        VALUE

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

listener_networks                    string

local_listener                       string       (ADDRESS=(PROTOCOL=TCP)(HOST=

10.233.56.103)(PORT=11521))

recovery_parallelism                 integer     0

remote_listener                      string      racscan:11521

local_listener的值里面的ip 是vip

10g中

SQL> show parameter lis

NAME                                 TYPE        VALUE

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

local_listener                       string      (ADDRESS=(PROTOCOL=TCP)(HOST=1

0.233.56.201)(PORT=11521))

recovery_parallelism                 integer     0

remote_listener                      string      TEST2

改监听的不需要改集群里的东西

当一个请求“如期而至”,监听器对照已经注册的服务列表,查找对应的数据库实例信息,获取到指定实例的ORACLE_HOME路径。相当于表明可以进行连接。

客户端与实例的交互不是直接的,是通过Server Process作为代理中介来实现的。所有指令SQL都是客户端通过Server Process发送到实例中,这种体系结构是Oracle对于实例和数据库文件一种保护机制。

当监听器获得请求之后,要从Oracle实例中分配一个Server Process与之对应。这里不同的Oracle连接方式存在一些差别。

如果是专用连接模式,也就是一个客户端连接对应一个Server Process。监听器就会向OS请求fork(创造)出一个Server Process,与监听器尝试交互。

如果是共享连接模式,也就是多个客户端共享一个Server Process(注意:这里还不是连接池)。监听器就会向Dispatcher进程(管理共享模式连接的进程)请求一个Server Process与之交互。

Server Process与监听器的连接,实际上就是相互信息的交换。Server Process将自身在OS中的进程编号、连接地址信息发给监听器。监听器将客户端信息传递给Server Process。

监听器获取到Server Process的信息之后,将其返回给客户端连接程序。客户端获取到信息之后,进行重连接,根据返回的信息与Server Process在制定的服务器端口进行联系。

直到这个时候,客户端程序才将连接用户名、密码等信息发给Server Process,进行登录验证等操作。监听器的工作也就到此结束。

这里面有一个技术细节,就是Server Process与客户端连接的时候,是允许不使用1521端口的。具体连接的端口,是带有随机因素的。在9i版本Windows平台下,如果安装了防火墙,只允许1521端口通信,是会带来一些连接问题。好在在其他平台上和之后的版本中,实现了一种端口共享技术,连接可以和监听器一起使用1521端口。

时间: 2024-10-29 22:34:03

监听-我的一些理解的相关文章

SWT对于监听Tab键的理解

最近,在些一个SWT的Diglog因为觉得里面的Button不好用,所以自己手动编写了一个Button类继承Cavas,但是发现对于键盘的Tab按钮并没有什么反应,为了想做到与SWT自带的Button一样对Tab事件的监听,就顺带研究了一下这个Tab按钮是如何实现的,先说说SWT是如何对Tab事件的监听,和如何推论出下一个tab移动的组件 在SWT中,键盘的TAB键是在display里面做了监听,还包括一些其他移动性按钮(上下按钮等) 所以当按Tab键的时候,控件里面的translateTrav

/var/tmp/.oracle 和 oracle listener (监听)的一点理解

关于 /var/tmp/.oracle 的作用测试 ~---查看 /var/tmp 的权限 [[email protected] var]# ll total 164 ... drwxrwxrwt  3 root root 4096 Oct 31 13:16 tmp [[email protected] .oracle]# ll total 0 srwxrwxrwx 1 oracle10g oinstall 0 Oct 31 14:11 s#12569.1 srwxrwxrwx 1 oracle

对vue中的computed属性,watch监听,计算属性理解

自己的理解: computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理: computed比较适合对多个变量或者对象进行处理后返回一个结果值,也就是数多个变量中的某一个值发生了变化则我们监控的这个值也就会发生变化,举例:购物车里面的商品列表和总金额之间的关系,只要商品列表里面的商品数量发生变化,或减少或增多或删除商品,总金额都应该发生变化.这里的这个总金额使用computed属性来进行计算是最

老男孩教育每日一题-2017年5月11-基础知识点: linux系统中监听端口概念是什么?

1.题目 老男孩教育每日一题-2017年5月11-基础知识点:linux系统中监听端口概念是什么? 2.参考答案 监听端口的概念涉及到网络概念与TCP状态集转化概念,可能比较复杂不便理解,可以按照下图简单进行理解? 将整个服务器操作系统比喻作为一个别墅 服务器上的每一个网卡比作是别墅中每间房间 服务器网卡上配置的IP地址比喻作为房间中每个人 而房间里面人的耳朵就好比是监听的端口 当默认采用监听0.0.0.0地址时,表示房间中的每个人都竖起耳朵等待别墅外面的人呼唤当别墅外面的用户向房间1的人呼喊时

关于AngularJs中监听事件及脏循环的理解

可能很多刚入行或者刚学习的前端对于AngularJs中的一些事件或者概念感觉不理解或者没有思路,今天让我们一起来剖析一下AngularJs中的一些事件. AngularJs中对于的监听事件会用到一个scope函数$watch,它包含了三个参数,首先我们在概念上来了解一下: $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEquality); 每个参数的说明如下: watchE

深入理解Spring的容器内事件发布监听机制

目录 1. 什么是事件监听机制 2. JDK中对事件监听机制的支持 2.1 基于JDK实现对任务执行结果的监听 3.Spring容器对事件监听机制的支持 3.1 基于Spring实现对任务执行结果的监听 4.Spring事件监听源码解析 4.1 初始化事件发布器流程 4.2 注册事件监听器流程 4.3 容器事件发布流程 5.总结 1. 什么是事件监听机制 在讲解事件监听机制前,我们先回顾下设计模式中的观察者模式,因为事件监听机制可以说是在典型观察者模式基础上的进一步抽象和改进.我们可以在JDK或

事件监听的理解

一, 事件监听:为同一个对象的同一个事件绑定多个事件处理程序 事件绑定:对DOM元素绑定事件处理函数  一般分为三种  1.在DOM元素中直接绑定  2.在js中绑定  3.绑定事件监听函数 事件委托:利用冒泡的原理,把事件加到父级上,触发执行效果 事件委托的好处: 1.实现对未来元素事件的绑定 未来元素:绑定事件时,页面上还不存在的元素 2.减少事件绑定,提高性能 1.事件分为DOM 0级事件和Dom 2级事件,DOM2级事件也叫做事件监听.DOM 0级事件的缺点是如果事件相同 后者的事件会覆

【COCOS CREATOR 系列教程之二】脚本开发篇&事件监听、常用函数等示例整合

[Cocos Creator ](千人群):  432818031 上一篇,介绍了Himi在使用过cc所有组件后的一篇总结,没有具体介绍每个组件的原因在于官方文档很齐全,而且也有视频的介绍. 所以希望童鞋们可以把我这两篇博文当成对组件.脚本两部分开发的整理与总结. 后续的文章,Himi应该主要更新一些官方还未补充或者还没有的教程.避免无用功. 下面直接放出代码,因为不是很难理解.所以不再一一赘述,都是常用的函数.事件监听.动作回调.定时器等开发过程中必接触的. 大致内容如下: cc 属性介绍 获

Ogre 监听类与渲染流程

Ogre中有许多监听类,我们可以简单理解成C#中的事件,这些类作用都不小,说大点可能改变流程,说小点修改参数等,下面列举一些常用的监听类. FrameListener:由Ogre中的Root负责维护,主要针对所有RenderTarget监听 frameStarted:在一桢开始的时候,所有RenderTarget更新之前. frameRenderingQueued:所有RenderTarget更新之后,但是还没交换缓冲区.(意思屏幕上显示没变) frameEnded:所有RenderTarget