欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

RAC Local_listener、一条 Oracle的阑尾

程序员文章站 2024-01-05 22:36:22
...

因为它会去服务端的tnsnames.ora里找啊,找不到当然解析不了

先看一段对话:

小菜鸟问:

我在参数文件中设置了local_listener='listener1',然后启动数据库有报错.

SQL> startup

ORA-00119: invalid specification for system parameter LOCAL_LISTENER

ORA-00132: syntax error or unresolved network name 'listener1'

语法不对吗?

老鸟回:

要在服务器上的tnsnames.ora里做设置,来映射listener1

类似这样:

listener1 =

(ADDRESS = (PROTOCOL = TCP)(HOST = 虚拟ip)(PORT = 1521))

或者你直接这么设置:

local_listener=' (ADDRESS = (PROTOCOL = TCP)(HOST = 虚拟ip)(PORT = 1521))'

小菜鸟眼神流露着迷茫、弱弱的问:

这样做后listener1就是系统默认的监听呢?还是告诉pmon把注册信息注册到listener1上呢?

老鸟回:

pmon注册

小菜鸟有点明白了、又问:

谢谢!加了后确实可以启动数据库了,但是不明白这内部是怎么运做的,请指教.为什么加了之后就可以启动?

老鸟回:

因为它会去服务端的tnsnames.ora里找啊,找不到当然解析不了啊、然后报错:

ORA-00132: syntax error or unresolved network name 'listener1'

在RAC环境下、客户端连接时、有时会收到 ORA-12545: 因目标主机或对象不存在, 连接失败

这个错误的处理方法也是一样的

。。。

故事到这里就谢幕了、

Local_listener有两个作用:

● PMON动态注册非标端口

动态注册默认Oracle只能注册1521端口,如果你的端口是1522或者其他,Oracle是没办法知道的

那么只要告诉ORACLE Local_listener就可以

● RAC 负载均衡

RAC负载均衡有2种,一种是CLIENT,一种是SERVER

所谓CLIENT是指直接在tnsnames.ora中配置LOAD_BALANCE=yes参数

这种类型主要是按照连接数,,或者说概率来连接Oracle

如果不配置可能也不会出错、

还有一种情况是通过SERVER、那么 Local_listener是有作用的

因为Oracle 会探测服务器负载,谁负载低就去哪里

所以当一个进程进入了其中一个节点,这个时候实际还没连接

服务器会探测哪个节点负载低,如果是本地节点直接通过 Local_listener 连接

如果是别的机器,因为Oracle不知道其他节点怎么走,所以 Remote_listener就有作用了

配置local_listener的相关步骤:

① 在listener.ora中设置监听端口

Think =
(description =
(address = (protocol = tcp)(host = loveoracle)(port = 1522))
)

lsnrctl start Think 启动listener

② 在tnsname.ora中设置net service name

Think =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = loveoracle)(PORT = 1522))
)
(CONNECT_DATA =
(service_name = orcl)
)
)

③ 然后才可以设置local_listener

alter system set local_listener=Think;

④ 向数据库注册listener

alter system register;

其实、 Local_listener 是为了解决一个BUG而设置的→→主要就是VIP

这是Oracle的阑尾,早晚要割掉!

我的环境、很多时候是没有设置

Local_listener 即使要写,也是写的VIP的地址, 10g,11g均是如此

上一篇:

下一篇: