oracle静态监听和动态监听

oracle静态监听和动态监听
 一、什么是注册?

  注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名

就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。

  在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务(无论何时启动一个数据库,默认地都有两条信息注册

到监听器中:数据库服务器对应的实例和服务。)

  相当于是这样:在数据库服务器和客户端之间有一监听程序(Listener),在监听程序中,会记录相应数据库对应的服务名(一

个数据库可能对应有多个服务名),当客户端需要连接数据库时,只需要提供服务名,就可以建立客户端和服务器之间的连接。

  二、静态注册

  静态注册就是实例启动时读取listener.ora文件的配置,将实例和服务注册到监听程序。无论何时启动一个数据库,默认地都有

两条信息注册到监听器中:数据库服务器对应的实例和服务。

  静态注册时,listener.ora中的GLOBAL_DBNAME向外提供服务名,listener.ora中的SID_NAME提供注册的实例名。

  采取静态注册方法时,listener.ora中的内容如下:

  SID_LIST_LISTENER =

  (SID_LIST =

  (SID_DESC =

  (SID_NAME = PLSExtProc)

  (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

  (PROGRAM = extproc)

  )

  (SID_DESC =

  (GLOBAL_DBNAME =orcl)

  (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

  (SID_NAME =orcl)

  )

  (SID_DESC =

  (GLOBAL_DBNAME =orcl1)

  (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

  (SID_NAME =orcl)

  )

  )

  该文件表明数据库是单实例的,实例名为orcl,向外提供了两个服务:orcl和orcl1

三、动态注册

  动态注册是在instance启动的时候PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到

listener中。

  首先要在init.ora中指定instance_name,service_names两个参数的值。在sqlplus下通过show parameter service_names 和show

parameter instance_name可以查看这两个参数的值。

  注册到监听器中的实例值从init.ora文件中的instance_name参数取得。如果该参数没有设定值,那么它将取init.ora文件中的

db_name的值。

  注册到监听器中的服务值从init.ora文件中的参数service_names取得。如果该参数没有设定值,数据库将拼接init.ora文件中的

db_name和db_domain的值来注册自己。如果选择提供service_names值,您可以使用完全限定的名称(比如 orcl.oracle.com)或缩写

的名称(比如orcl)。如果选择缩写的名称并设置了db_domain参数,注册到监听器中的服务将是 service_name值和db_domain值的拼

接。例如下面的设置将导致服务orcl.oracle.com被注册到监听器中:

  db_domain=oracle.com

  service_names=orcl ;

  采取动态注册方法时,listener.ora中的内容如下:

  SID_LIST_LISTENER =

  (SID_LIST =

  (SID_DESC =

  (SID_NAME = PLSExtProc)

  (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

  (PROGRAM = extproc)

  )

  )

  可选择的是,您可以在service_names参数中指定多个服务值,值之间用逗号格开,这对于共享服务器配置是很有用的。

  动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),如果需要向非默认监听注册,则需要配置

local_listener参数!

  如果没有显式设置service_names和instance_name的值,那么仅当数据库在监听器运行之后启动时,动态注册才会发生;在这种

情况 下,如果监听器后来发生了重启,动态注册信息将会丢失。显然,最好在所有的数据库启动之前先启动监听器,这样就会避免没

有显式设置 service_names和instance_name的值时,若重启监听器带来的动态注册信息丢失的情况。

  为初始化参数service_names和instance_name设置显式的值是个值得可取的方法和建议。因为如果监听器在数据库运行过程中要

重新启 动,仅当你在init.ora文件中显式地设置了service_names和instance_name的值时,每个数据库的PMON进程才会在很短的 时

间之内完成动态注册。

  四、查询某服务是静态注册还是动态注册

  可以使用命令lsnrctl status来查看某服务是静态注册还是动态注册。

  实例状态为UNKNOWN值时表明此服务是静态注册的设置。这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连

接请求时,它才检查该实例是否存在。

  动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(对于一个备用数据库)来指明。不管关闭何时数据库,动态注册

的数据库都会动态地从 监听器注销,而与之相关的信息将从状态列表中消失。这样,不管数据库是在运行还是已经关闭,监听器总是

知道它的状态。该信息将被用于连接请求的回退 (fallback)和负载平衡。

时间: 2024-10-10 08:55:05

oracle静态监听和动态监听的相关文章

【oracle】动态监听与静态监听

本机客户端以sysdba身份登陆oracle数据库后 用shutdown immediate成功的关闭了数据库. 可是startup的时候,却提示 ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 查看listener.ora配置文件后,发现配置的动态监听. 动态监听会时时反应数据库的状态 依赖pmon进程的动态注册,而不像静态监听需要加载listener.ora文件的sid_list_listener部分.之所以无法再启动数据库,是由于数据库关闭后,监听器已经注销了此

Oracle 静态监听注册详解

Oracle 静态监听注册详解        网上有很多关于oracle 监听静态注册的文章,但大多都是简单说说,并没有详细的例子,这里,将结合linux as4 下的oracle 10gR2.0.1 举一个具体的例子 1.在 $ORACLE_HOME/network/admin/listener.ora 文件中加入一个静态注册的节点 [oracle@prudent oracle]$ cd $ORACLE_HOME/network/admin [oracle@prudent admin]$ vi

[20160711]关闭监听的动态注册.txt

[20160711]关闭监听的动态注册.txt --这个我给别人解决dg日志不应用的问题.问题是没有设置静态注册,又关闭动态注册.自己还第一次知道存在这个参数 --DYNAMIC_REGISTRATION_LISTENER = off --再测试环境重复测试,做1个记录: 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------

Android 如何实现动态监听连接手机的蓝牙设备是否因为某些原因断开

问题描述 Android 如何实现动态监听连接手机的蓝牙设备是否因为某些原因断开 Android蓝牙API提供的方法中,isconnected(),基本做不到实时检测连接状态,其他的方法,等到的也是设备绑定的状态,并不是我想要的.本来通过写或读数据是可以判断连接状态的,但是,自己起线程轮询的收发数据过去,判断读写异常时可以实现,但是会影响用户发送的数据,业务要求不允许.网络连接中有NetSocket.sendUrgentData(0)这个方法可以做到,偏偏蓝牙又没有,我该怎么做,求指点! 解决方

oracle lsnrctl-redha下安装oracle成功,但是lsnrctl start监听启动不了

问题描述 redha下安装oracle成功,但是lsnrctl start监听启动不了 Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521))) Services Summary... Service "orcl" has 1 instance(s). Instance "orcl", status UNKN

android 网络动态监听

问题描述 android 网络动态监听 这是Activity类: public class MainActivity extends Activity { private Utils utils; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(); setContentView(R.layou

Javascript添加监听与删除监听用法详解

 js中事件监听就是利用addEventListener来绑定一个事件,这个用法在jquery中非常常用并且简单,但在原生js中比较复杂,这里整理了addEventListener事件各方法的测试与例子供大家参考学习. 在前两天做播放器的时候添加监听后删除监听遇到了一点麻烦,删不掉,后来看了一下才发现,参数需要完全对应,什么叫完全对应呢,换句话说: 代码如下: $('.video')[0].addEventListener('timeupdate', currentTimeHandler, tr

Javascript 添加监听与删除监听的使用介绍

在前两天做播放器的时候添加监听后删除监听遇到了一点麻烦,删不掉,后来看了一下才发现,参数需要完全对应,什么叫完全对应呢,换句话说:  代码如下 复制代码 $('.video')[0].addEventListener('timeupdate', currentTimeHandler, true); 比如这句,需要传入三个参数,这样才能够删除,为什么一定要这样,没错,蛋疼的地方就在这里: 在add和remove时,第三个参数确实可以不写,但此时他们的默认情况是不一样的!!! 通常情况下addEve

java中按钮监听以及鼠标监听的使用

我们在进行java的GUI开发的时候,按钮以及鼠标监听的使用无疑是相当最要的,而如何巧妙的运用这些监听器,对今后的开发更是有很大的帮助,下面将分别介绍. 实现按钮监听的方法: 在java.awt.event下面有一个ActionListener的类,它是一个用于接收操作事件的侦听器接口,对处理操作事件感兴趣的就可以去使用这个接口. 首先我们需要写一个类去实现这个接口,然后对我们的JButton对象添加按钮响应,最后再给这个按钮添加监听器,具体代码如下: JButton bu=new JButto