oracle listener知识总结

一、动态注册

监听的动态注册就是实例启动的时候PMON进程根据初始化参数文件中的instance_name,service_names两个参数来动态注册监听。

注意,如果在RAC中配置,必须将集群中每个实例的instance_name参数设置为一个唯一的值。

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

SID_LIST_LISTENER =

(SID_LIST =

 (SID_DESC =

   (SID_NAME = CLRExtProc)

   (ORACLE_HOME = F:appAdministratorproduct11.2.0dbhome_1)

   (PROGRAM = extproc)

   (ENVS = "EXTPROC_DLLS=ONLY:F:appAdministratorproduct11.2.0dbhome_1binoraclr11.dll")

 )

)

 

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

如:

alter system set service_names=orcl1,orcl2;

动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),因为pmon只会动态注册port等于1521的监听,否则pmon不能动态注册listener,如果需要向非默认监听注册,则需要配置local_listener参数!

将监听的信息添加到tnsnames.ora  文件中,因为pmon在动态注册监听时要从tnsnames.ora中读取相关信息。

LISTENER =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))

)

然后修改local_listener参数

SQL> alter system set local_listener=listener;

SQL> alter system register;

或者:

SQL> alter system set LOCAL_LISTENER='(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))';

SQL> alter system register;

可以看到上面使用了alter system register,这个命令是在数据库打开时的任何时候,手工地在监听器中注册服务值。这个命令对于替换因监听器重启而丢失地服务值很有用,并且它所注册地值与在数据库启动时由动态注册所设置的值完全一样。

如果没有显式设置service_names和instance_name的值,那么仅当数据库在监听器运行之后启动时,动态注册才会发生;在这种情况下,如果监听器后来发生了重启,动态注册信息将会丢失。显然,最好在所有的数据库启动之前先启动监听器,这样就会避免没有显式设置 service_names和instance_name的值时,若重启监听器带来的动态注册信息丢失的情况。

为初始化参数service_names和instance_name设置显式的值是个很好的实践,尽管如果您没有设置它们,Oracle也会为动态注册而生成默认值(基于db_name和db_main)。这样做的原因是,如果监听器在数据库启动之后重新启动,其动态注册行为将会有一些微妙的区别。

如果监听器在数据库运行之后重新启动,你们仅当您在init.ora文件中显式地设置了service_names和instance_name的值时,每个数据库的PMON进程才会在很短的时间之后自动注册数据库。

如果需要执行连接时故障转移或负载均衡,或者想要在RAC中配置在实例之间透明地分布连接,那么使用service_names参数将是必要的。为启用这些功能,您只需要将每个实例的数据库参数文件中的service_names设置为同一个值,并在客户端连接请求的service_name设置中引用该值。

二、静态注册

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

更多精彩内容:http://www.bianceng.cn/database/Oracle/

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

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

SID_LIST_LISTENER =

(SID_LIST =

 (SID_DESC =

   (SID_NAME = CLRExtProc)

   (ORACLE_HOME = F:appAdministratorproduct11.2.0dbhome_1)

   (PROGRAM = extproc)

   (ENVS = "EXTPROC_DLLS=ONLY:F:appAdministratorproduct11.2.0dbhome_1binoraclr11.dll")

 )

 (SID_DESC =

   (GLOBAL_DBNAME = orcl)

   (ORACLE_HOME = F:appAdministratorproduct11.2.0dbhome_1)

   (SID_NAME = ORCL)

 )

)

LISTENER =

(DESCRIPTION_LIST =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

 )

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

 )

)

其中global_dbname对应的是oracle对外的服务名,即初始化参数里的service_names

而sid_name对应的是oralce实例的名称,即初始化参数里的instance_name

静态注册适用的场景:

1.先启动实例,后启动监听器的时候

2.监听器重启的时候

3.oracle实例没有open的时候

三、如何判断是静态注册还是动态注册

使用命令lsnrctl status来查看到底是静态注册还是动态注册。

实例状态为UNKNOWN值时表明此服务是静态注册的。因为这时监听器用来它不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。

动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(对于一个备用数据库)来指明。不管何时关闭数据库,动态注册的数据库都会动态地从监听器注销,而与之相关的信息将从状态列表中消失。这样,不管数据库是在运行还是已经关闭,监听器总是知道它的状态。该信息将被用于连接请求的回退(fallback)和负载平衡。

本文出自 “richard的笔记-积微成著” 博客,请务必保留此出处http://zxf261.blog.51cto.com/701797/886027

时间: 2024-09-01 11:58:23

oracle listener知识总结的相关文章

Oracle Listener的动态注册

在有Oracle Listener的动态注册之前,采用的是静态注册,所谓静态注册是指Oracle实例在启动时 ,读取listener.ora里的配置,然后注册到Listener,它主要有两个缺点: 1. Listener不知道Oracle实例的实时状态 2. listener.ora里的配置比较麻烦,常需要手动修改. 动态注册 所谓动态注册是指Oracle实例启动后,会通过pmon进程实时的把实例状态和参数 (instance_name,service_name)同步给Listener,其中参数

Oracle基础知识-数据迁移

我们常需要对Oracle数据库进行迁移,迁移到更加高级的主机上.迁移到远程的机房上.迁移到不同的平台下 一.exp/imp: 这也算是最常用最简单的方法了,一般是基于应用的owner级做导出导入. 操作方法为:在新库建立好owner和表空间,停老库的应用,在老库做 [sql] view plaincopyprint? exp user/pwd owner=XXX file=exp_xxx.dmp log=exp_xxx.log buffer=6000000 传dmp文件到新库,在新库做 [sql

Oracle基础知识-启动Oracle常见疑难问题分析

实例和数据库的启动与关闭是DBA的重要职责之一.只有打开数据库,其他用户才能对数据库中的数据进行操作.一旦数据库关闭,便不能对其操作.对于DBA们来说,关闭和重新启动数据库以便优化.调整应用程序的运行是经常碰到的事情.如果用户已经进入了数据库,使用SHUTDOWN IMMEDIATE 或SHUTDOWN ABORT命令来执行关闭数据库,则用户将失去连接,直到数据库重新启动.经常关闭和启动会对数据库性能造成一定的影响,当然也会影响到用户对数据库的使用.本文从管理数据库的角度来分析在Oracle启动

[Oracle入门级]知识概况

oracle各个版本间的主要技术更新 oracle 8 增加数据库创建和存储对象 oracle 8i 整体性能提升 oracle9i 实施应用集群 oracle 10g 支持网格计算 oracle 11g 自我调整 自我管理 oracle后缀中的字母含义: i : 包含internet部署的新功能 g: 专注于新兴的网格计算模型 c: 云服务 cloud oracle中数据库与实例的概念 数据库:信息的物理存储.数据库是物理的,由存储在磁盘中的文件组成 实例:服务器上运行的软件,提供了对数据库的

Oracle基础知识-Oracle不同的启动关闭方式

Oracle中不同启动和关闭方式的区别 Oracle数据库提供了几种不同的数据库启动和关闭方式,本文将周详介绍这些启动和关闭方式之间的区别连同他们各自不同的功能.一.启动和关闭Oracle数据库 对于大多数Oracle DBA来说,启动和关闭Oracle数据库最常用的方式就是在命令行方式下的Server Manager.从Oracle 8i以后,系统将Server Manager的任何功能都集中到了SQL*Plus中,也就是说从8i以后对于数据库的启动和关闭能够直接通过SQL*Plus来完成,而

Oracle基础知识-oracle常用命令

日志管理 1.forcing log switches [sql] view plaincopyprint? sql> alter system switch logfile; 2.forcing checkpoints [sql] view plaincopyprint? sql> alter system checkpoint; 3.adding online redo log groups [sql] view plaincopyprint? sql> alter database

Oracle基础知识-SQL简单命令

SQL语句包括两个部分:1 DDL 数据定义语言 2 DML 数据控制语言 DDL: create:创建一个表 [html] view plaincopyprint? create table b( clob char(1) ); alter:增加已经定义的表列的分配 drop:删除一个表 desc:查看一个表的定义 DML: selelct: [html] view plaincopyprint? select * from b; insert: [html] view plaincopypr

Oracle基础知识-sqlplus使用

Oracle的sql*plus是与oracle进行交互的客户端工具. 在sql*plus中,可以运行sql*plus命令与sql*plus语句. 我们通常所说的DML(数据操纵语言).DDL(数据定义语言).DCL(数据库控制语言)都是sql*plus语句,它们执行完后,都可以保存在一个被称为sql buffer的内存区域中,并且只能保存一条最近执行的sql语句,我们可以对保存在sql buffer中的sql 语句进行修改,然后再次执行,sql*plus一般都与数据库打交道.除了sql*plus

Oracle Listener 动态注册 与 静态注册_oracle

一.什么是注册 注册就是将数据库作为一个服务注册到监听程序.客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库.这个服务名可能与实例名一样,也有可能不一样. 在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务(无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和服务.) 相当于是这样:在数据库服务器和客户端之间有一监听程序(Listener),在监听程序中,会记录相应数据库对应的服务名(一个数据库可能对应有多个服