oracle监听管理工具,oracle监听器管理

本文介绍了Oracle数据库的静态注册与动态注册过程,包括如何配置listener.ora文件、实例和服务的注册变化,以及如何通过lsnrctl命令检查注册类型。重点讨论了静态监听和动态监听的区别及其应用场景。
摘要由CSDN通过智能技术生成

一、什么是注册?

注册就是将数据库作为一个服务注册到监听程序。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。

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

二、 静态注册

静态注册指实例启动时读取listener.ora配置文件,将实例和服务注册到监听程序。其中global_dbname对应的是oracle对外的服务名,即初始化参数里的service_names,而sid_name对应的是oralce实例的名称,即初始化参数里的instance_name。

无论何时启动一个数据库,默认都有两条信息注册到监听器中:实例和服务。如:

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。

LISTENER

=

( DESCRIPTION =

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

)

这是一个最简单的静态监听配置文件,SID_LIST_LISTENER部分的GLOBAL_DBNAME表示向外提供的服务名,SID_NAME是提供注册的实例。在tnsnames.ora文件中的CONNECT_DATA部分,可分别选择SERVICE_NAME=Ora8或SID=test为客户端提供连接。

对于配置非1521监听端口,只能选择静态注册方式。

三、 动态注册

动态注册不需要显示的配置listener.ora文件,oracle实例在open时,PMON进程根据instance_name,service_name参数将实 例和服务动态注册到listerer中。如果没有设定instance_name,将使用db_name初始化参数值。如果没有设定 service_names,将拼接db_name和db_domain(db_name.db_domain)参数值来注册监听。

SQL> show parameter service_nameI

NAME

TYPE        VALUE

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

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

service_names

string      test

SQL> show parameter

instance_name

NAME

TYPE        VALUE

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

----------- ------------------------------ instance_name

string      test

LSNRCTL>

status

Connecting to

(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the

LISTENER

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

LISTENER Version

TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Start

Date

24-SEP-2008 16:50:01

Uptime

0 days 0 hr. 0 min. 33 sec

Trace

Level

off

Security

ON: Local OS Authentication

SNMP

OFF

Listener Log File

/u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=test1)(PORT=1521)))

Services Summary...

Service "test" has 1 instance(s).

Instance "test", status READY, has 1 handler(s) for this

service...

Service "test_XPT" has 1 instance(s).

Instance "test", status READY, has 1 handler(s) for this

service...

The command completed successfully

SQL> alter

system set service_names='oratest' scope=both;

System altered.

SQL> alter system

set instance_name='instest' scope=spfile;

System altered.

SQL> shutdown

immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance

started.

Total System Global Area

96468992 bytes

Fixed

Size

1217884 bytes

Variable

Size

88083108 bytes

Database

Buffers

4194304 bytes

Redo

Buffers

2973696 bytes

Database mounted.

Database opened.

LSNRCTL> status

Connecting to

(ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

LISTENER Version

TNSLSNR for Linux: Version 10.2.0.1.0 - Production

Start

Date

24-SEP-2008 16:52:44

Uptime

0 days 0 hr. 1 min. 52 sec

Trace

Level

off

Security

ON: Local OS Authentication

SNMP

OFF

­

Listener

Log File

/u01/app/oracle/product/10.2.0/db_1/network/log/listener.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=test1)(PORT=1521)))ITPUB个人空间5r4I9yeg

uy

[6g

Services Summary...

Service "oratest" has 1 instance(s).

Instance "instest", status READY, has 1 handler(s) for this

service...

Service "test" has 1 instance(s).

Instance "instest", status READY, has 1 handler(s) for this

service...

Service "test_XPT" has 1 instance(s).

Instance "instest", status READY, has 1 handler(s) for this

service...

The command completed successfully

可以看到,监听注册的服务和实例已发生了相应的变化。同静态监听,这里也可以分别使用SERVICE_NAME=oratest或SID=instest来进行客户端的连接。 可选择的是,您可以在service_names参数中指定多个服务值,值之间用逗号格开,这对于共享服务器配置是很有用的。

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

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

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

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

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

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

因此,由于Listener动态监听,实例虽然启动,但没有注册到监听。实例是通过PMON进程注册到监听上的,而PMON进程需要在MOUNT状态下才会启动。所以造成了上面的错误,为了方便,只能将其改为静态监听

修改NETWORK\ADMIN下的listner.ora,改为

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = e:\oracle10g)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = oracle)

(ORACLE_HOME = e:\oracle10g)

(SID_NAME = oracle)

)

)

要注意的是=号左右两边的空格,否则会出错,然后再用lsnrctl start等来启动,这次的话,可以很顺利地解决shutdown后再startup mount的问题了

既然有动态监听为什么还要静态监听呢?原因如下:

1.监听器不是最早启动,oracle实例先启动

2.监听器重启

3.oracle实例没有open

一台机上即装有9i,又装有10g,此时可以只启动10g的监听器,9i的数据库可以自动注册进来,反之不行,因为10g的监听器可以监听9i的数据库,但9i的监听器不能监听10g的数据库。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15011739/viewspace-604562/,如需转载,请注明出处,否则将追究法律责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值