关于Oracle 10G 配置2个监听的奇怪问题(在线等待)

dooluby 2009-02-06 05:03:38
我在虚拟机(虚拟机安装的操作系统是RedHat Enterprise Linux 5)上安装了Oracle 10G,并在安装过程中完成了第一个数据库的创建(svr)SID是svr;然后我用oralce用户登录RHEL5,用命令:dbca 创建了第二个数据库(cli)SID是cli。我的本意在一台机子上建2个Oracle数据库,并通过2个监听来实现对这2个数据库的访问。

但现在出现一个问题。我将第一个监听配置端口为1521(svr),第二个监听配置端口为1522(cli)。并启动数据库和监听。监听启动的输出:
XXXX>lsnrctl start

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 06-FEB-2009 16:42:19

Copyright (c) 1991, 2005, Oracle. All rights reserved.

Starting /home/oracle/dbhome/product/10.2.0/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /home/oracle/dbhome/product/10.2.0/network/admin/listener.ora
Log messages written to /home/oracle/dbhome/product/10.2.0/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rhel5)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date 06-FEB-2009 16:42:19
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /home/oracle/dbhome/product/10.2.0/network/admin/listener.ora
Listener Log File /home/oracle/dbhome/product/10.2.0/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rhel5)(PORT=1521)))
Services Summary...
Service "svr" has 1 instance(s).
Instance "svr", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

发现cli并没有启动。然后我用netstat -ant来查看,结果:
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1521 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:57723 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:37919 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:45143 127.0.0.1:1521 ESTABLISHED
tcp 0 0 127.0.0.1:45144 127.0.0.1:1521 ESTABLISHED
tcp 0 0 127.0.0.1:1521 127.0.0.1:45143 ESTABLISHED
tcp 0 0 127.0.0.1:1521 127.0.0.1:45144 ESTABLISHED
tcp 0 0 :::6000 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
tcp 0 0 ::ffff:192.168.0.2:22 ::ffff:192.168.0.1:1407 ESTABLISHED
tcp 0 0 ::ffff:192.168.0.2:22 ::ffff:192.168.0.1:1412 ESTABLISHED
tcp 0 0 ::ffff:192.168.0.2:22 ::ffff:192.168.0.1:1416 ESTABLISHED
tcp 0 0 ::ffff:192.168.0.2:22 ::ffff:192.168.0.1:1223 ESTABLISHED
并没有1522的监听。

REHL 5下的Oralce监听的配置文件:
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = cli)
(ORACLE_HOME = /home/oracle/dbhome/product/10.2.0)
(PROGRAM = extproc)
)
)

LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rhel5)(PORT = 1522))
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = svr)
(ORACLE_HOME = /home/oracle/dbhome/product/10.2.0)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = rhel5)(PORT = 1521))
)
)

在Windows下用Net Configuration Assistant来配置“本地NET服务名”,结果所有的配置都只能通过1521这个端口访问到RHEL5上的库(svr库和cli库都可以通过1521访问,但cli不能通过1522来访问。报错:正在连接...ORA-12541: TNS: 无监听程序)。

请问用怎样配置可以实现我的想法?
...全文
1394 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengpe23 2011-06-03
  • 打赏
  • 举报
回复
现在有些人就是这样 都来帮助你了 结果你那啥 弄好了也不告诉大家
nash01 2011-05-18
  • 打赏
  • 举报
回复
你修改的结果是什么啊
把你修改的贴出来看看
nash01 2011-05-18
  • 打赏
  • 举报
回复
这个还用改tnsnames.ora文件吗?

我的listener.ora是这样的:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = G:\10g\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = G:\10g\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
(ADDRESS = (PROTOCOL = TCP)(HOST = cyl-PC)(PORT = 1521))
)
)

LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = cyl-PC)(PORT = 1522))
)
)

SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = crm)
(ORACLE_HOME = G:\10g\app\oracle\product\10.2.0\server)
(SID_NAME = crm)
)
)

DEFAULT_SERVICE_LISTENER = (XE)

为什么没有监听listener2呢?
jiany9999 2009-10-10
  • 打赏
  • 举报
回复
OK,thanks
wang7783165 2009-10-10
  • 打赏
  • 举报
回复
11111111
dooluby 2009-02-09
  • 打赏
  • 举报
回复
to:watson110
这篇文章我看了,他这个文章是针对一个数据库配置2个不同的监听。而我是想实现 在一个操作系统里,创建2个不同的数据库,用2个监听(监听在不同的端口)来操作这2个不同的数据库。

还有就是,如果我将我的listener.ora 文件内容进行如下修改的话,会报错。
(SID_NAME = cli)
(ORACLE_HOME = /home/oracle/dbhome/product/10.2.0)
(PROGRAM = cli)
我原来的:
(SID_NAME = cli)
(ORACLE_HOME = /home/oracle/dbhome/product/10.2.0)
(PROGRAM = extproc)
红色部分为修改部分。
报错:
NS-01201: Listener cannot find executable /home/oracle/dbhome/product/10.2.0/bin/cli for SID cli
watson110 2009-02-09
  • 打赏
  • 举报
回复
listener.ora和tnsnames.ora 要配置的一一对应,或许你可以看下这篇文章:
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece76310579535480397634b8c965738848448e4380c075a71e2cf60794613d3b379640aa4435be1e73604645266ecc6949f4aabffc97f6ac96567214b914164885ff8941d73d620e65aedae1fe5b8e477ceee84dc8214029404127af1e7fa5d1763cc7886102692a78e49654860cbfa4767e828063eeb5557b737ee90367976f1e1ad285bb559&p=cb6dde0c92934eac5cb2c771094c&user=baidu
dooluby 2009-02-09
  • 打赏
  • 举报
回复
to:xiaoxiao1984
我刚测试了你这种方法,svr的监听没问题,但在Windows下用Net Configuration Assistant测试,报错:

.ORA-28547: 连接服务器失败, 可能是 Oracle Net 管理错误
测试未成功。
dooluby 2009-02-09
  • 打赏
  • 举报
回复
to:dawugui
2个IP的我原来也配置过,但我现在用的是虚拟机,不想用2个IP。呵呵。。我想在一个IP上实现对于2个端口的监听。。
dooluby 2009-02-09
  • 打赏
  • 举报
回复
各位,真不好意思,周五回家以后发现不能上网了。郁闷。
dooluby 2009-02-09
  • 打赏
  • 举报
回复
问题解决了。呵呵。。仔细看了下 wangxuhero 的方法,然后修改了一下,ok了。呵呵。非常感谢各位的回复。
wangxuhero 2009-02-06
  • 打赏
  • 举报
回复
打错了,不好意思。listener2是这个。我就是配的两个listener,当初配的时候遇到很多问题,最后总结:格式一定要正确。
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rhel5)(PORT = 1522))
)
)

SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = cli)
(ORACLE_HOME = /home/oracle/dbhome/product/10.2.0)
(SID_NAME = cli)
)
)
xiaoxiao1984 2009-02-06
  • 打赏
  • 举报
回复
呵呵,楼主只启动了默认的监听器LISTENER阿,楼主自定义的监听器LISTENER2并没有启动哦


LSNRCTL> set current_listener
Current Listener is LISTENER

start LISTENER2

status LISTENER2

启动一下就好了,默认监听器的名字是LISTENER
dawugui 2009-02-06
  • 打赏
  • 举报
回复
不是监听的问题,我也遇到过.
有时侯设置不同的IP,不同的端口号能成功,有时侯不行,不知道怎么回事情.

所以,每次只好用行的那个IP.
dooluby 2009-02-06
  • 打赏
  • 举报
回复
to:wangxuhero
看了你这个配置,发现只有针对svr的监听定义,那针对cli的呢?还是说我没看懂?呵呵。。
dooluby 2009-02-06
  • 打赏
  • 举报
回复
先回家吃饭了。晚上继续上线等。。。thx
dooluby 2009-02-06
  • 打赏
  • 举报
回复
to:lockhall

我首先在我的RHEL 5下面用命令:ps -ef | grep tnslsnr,结果:
XXXXX >ps -ef | grep tnslsnr
oracle 31539 1 0 17:53 ? 00:00:00 /home/oracle/dbhome/product/10.2.0/bin/tnslsnr LISTENER -inherit
oracle 31654 31462 0 17:57 pts/2 00:00:00 grep tnslsnr

这说明并不是你所说的那个bug,并且,我现在只是安装了oracle,并没有开始使用。

同时,我将listener.ora和tnsnames.ora里面对应cli的端口改为1522以后,在windows下用netca的图形界面测试svr的连接,报:ORA-28547: 连接服务器失败, 可能是 Oracle Net 管理错误。(该连接的配置windows下没有更改。)

我又修改了windows下cli的测试连接配置,端口号改为1522,报:ORA-12541: TNS: 无监听程序

这说明1522上还是没有监听。。。望各位高手指点。。
wangxuhero 2009-02-06
  • 打赏
  • 举报
回复
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(SID_NAME = cli)
(ORACLE_HOME = /home/oracle/dbhome/product/10.2.0)
(PROGRAM = extproc)
)
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = svr)
(ORACLE_HOME = /home/oracle/dbhome/product/10.2.0)
(PROGRAM = extproc)
)
)

这里有问题.

改为这个:
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rhel5)(PORT = 1521))
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /home/oracle/dbhome/product/10.2.0)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = svr)
(ORACLE_HOME = /home/oracle/dbhome/product/10.2.0)
(SID_NAME = svr)
)
)

LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rhel5)(PORT = 1522))
)
)

SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = svr)
(ORACLE_HOME = /home/oracle/dbhome/product/10.2.0)
(SID_NAME = svr)
)
)
lockhall 2009-02-06
  • 打赏
  • 举报
回复
不知道这个是不是可以解释?
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
最近已经收到多起关于Oracle10g启动两个监听进程的故障报告。
故障发生时数据库无法通过监听正常建立连接,检查时会发现系统上存在两个监听器进程,其中一个是另外一个的子进程。
一位朋友在我的留言板上给出了以下输出:

local1:/ #ps -ef | grep tnslsnr
oracle 925826 1 0 Apr 06 - 234:50 /u01/app/oracle/product/102/bin/tnslsnr listener1 -inherit
oracle 1081540 925826 0 21:39:39 - 0:00 /u01/app/oracle/product/102/bin/tnslsnr listener1 -inherit

有朋友在RAC环境下也遇到了类似的问题,在ITPUB上也有一个相关问题的讨论。

在Metalink上可以找到相关问题的很多解释,这个问题被最终确认为一个BUG,BUG号为:4518443
Oracle称在较大压力下,监听进程可能出现间歇性停止服务,此时Oracle会spaw出另外一个监听进程,进而导致两个监听进程互相影响的故障。

在非RAC环境下,可以通过在listener.ora中设置参数:
SUBSCRIBE_FOR_NODE_DOWN_EVENT_=OFF
来暂时回避这个BUG。

同时Oracle已经推出了相关Patch用来修正这个问题。


dooluby 2009-02-06
  • 打赏
  • 举报
回复
to:hdhai9451
tnsnames.ora中的cli的端口的确是1521。我试过将cli的端口改为1522,但重启监听以后,还是无法连接,报:ORA-12541: TNS: 无监听程序。没办法,我只好改为1521,先凑合用。
加载更多回复(2)

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧