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-12 14:55:59

oracle数据库静态监听和动态监听 区别的相关文章

windows中静态库lib和动态dll的区别及使用方法

1. 静态库lib和动态dll的区别 1.1 项目类型 VS在建Win32项目时,有以下选项: windows应用程序控制台应用程序DLL静态库最后两个类型:DLL和静态库,这两种项目类型是不可以单独运行的,必须在Windows应用程序调用他们执行,是提供的库函数而已. 1.2 两种lib的区别: (1)静态库(.lib) 函数和数据被编译进一个二进制文件(通常扩展名为.LIB).在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其他模块组合起来创建

oracle共享与专用模式的动态转换及区别(转载)

一直没对专用于共享的互换搞清楚,找到了这篇文章 http://blog.csdn.net/tianlesoftware/archive/2010/06/26/5695784.aspx ,让我实践了一把,确实明白了许多.以下大多是转自该链接的,将其收藏,供以后方便查找学习. 共享与专用服务器的区别: 专用服务器(DEDICATED):一个客户端连接对应一个服务器进程 共享服务器(SHARE):多个客户端连接对应一个服务器进程,服务器端存在一个进程调度器来管理.它必须使用net services.也

oracle数据库DB_NAME、DBID、DB_UNIQUE_NAME等的区别

目录 DB_NAME DBID DB_UNIQUE_NAME: INSTANCE_NAME: SID: SERVICE_NAME GLOBAL_DATABASE_NAME: DB_NAME ①是数据库名,长度不能超过8个字符,记录在datafile.redolog和control file中 ②在DataGuard环境中DB_NAME相同而DB_UNIQUE_NAME不同 ③在RAC环境中,各个节点的DB_NAME 都相同,但是INSTANCE_NAME不同 ④DB_NAME还在动态注册监听的时

一台Oracle数据库服务器上两个监听同时使用

记得之前Oracle原厂的工程师在例行检查时发现一台Oracle数据库服务器的上启动了两个监听,分别监听的是1521和1581端口,而且两个端口都在用,当时当作一个比较奇怪的现象,没有能理解原因是什么.最近几天在看Oracle网络配置的文档,无意间在虚拟机上启动了两个监听,就又想起了之前的问题.到底是因为什么原因呢? 下面先来还原一下整个过程. 当时是在做配置静态监听的练习,在listener.ora中配置了一个静态监听: ORCL =   (DESCRIPTION=     (ADDRESS_

关于动态监听的一些测试

昨天做了一个实验,环境是这样的,建立一个静态监听端口1526以及一个动态监听端口1521,并且要通过在tnsname用两种连接字符串进行连接,静态连接的字符串直接连接没有问题,可是后来动态连接的字符串怎么也连接不进去,尝试注册 SQL> alter system register; System altered. [[email protected] ~]$ lsnrctl stat LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 26

oracle数据库问题

之前在安装webMethods的时候给装了一个oracle数据库,在使用过程中遇到了一些问题,通过网上查找资料之后解决了.由于这类问题出现了好几次,所以总结一下解决办法.一.监听器的问题:监听器的监听方式分为两种,静态监听和动态监听.两种监听单独使用的时候都可以支持webMethods的服务器,但是同时使用时便会造成访问数据库失败.监听器状态查看方法:%DB_HOME%\database>lsnrctl ——> status.当显示监听实例的状态是“READY”的时候则是启用了动态监听,当状态

oracle数据库tns配置方法详解

TNS简要介绍与应用 Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器. TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC.如果通过TNS连接Oracle,那么客户端必须安装Oracle client

oracle数据库TNS

TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,下面看一如何配置它吧: TNS简要介绍与应用 :Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器.TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯

JAVA通过JDBC连接Oracle数据库详解【转载】

JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.html Java连接Oracle步骤: 1.注册加载驱动 驱动名:DRIVER="oracle.jdbc.driver.OracleDriver"; Class.forName("驱动类名"); 2.获得连接 数据库地址: URL="jdbc:oracle:thi