RAC Local_listener、一条 Oracle的阑尾


先看一段对话:

小菜鸟问:

我在参数文件中设置了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均是如此

相关内容