我在虚拟机(虚拟机安装的操作系统是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 startLSNRCTL for Linux: Version 10.2.0.1.0 - Production on 06-FEB-2009 16:42:19Copyright (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: 无监听程序)。请问用怎样配置可以实现我的想法?
XXXX>lsnrctl startLSNRCTL for Linux: Version 10.2.0.1.0 - Production on 06-FEB-2009 16:42:19Copyright (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: 无监听程序)。请问用怎样配置可以实现我的想法?
tnsnames.ora中的cli的端口的确是1521。我试过将cli的端口改为1522,但重启监听以后,还是无法连接,报:ORA-12541: TNS: 无监听程序。没办法,我只好改为1521,先凑合用。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
最近已经收到多起关于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用来修正这个问题。
(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)
)
)
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上还是没有监听望各位高手指点。。
看了你这个配置,发现只有针对svr的监听定义,那针对cli的呢?还是说我没看懂?呵呵。。
有时侯设置不同的IP,不同的端口号能成功,有时侯不行,不知道怎么回事情.所以,每次只好用行的那个IP.
LSNRCTL> set current_listener
Current Listener is LISTENERstart LISTENER2status 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)
)
)
2个IP的我原来也配置过,但我现在用的是虚拟机,不想用2个IP。呵呵。。我想在一个IP上实现对于2个端口的监听。。
我刚测试了你这种方法,svr的监听没问题,但在Windows下用Net Configuration Assistant测试,报错:.ORA-28547: 连接服务器失败, 可能是 Oracle Net 管理错误
测试未成功。
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece76310579535480397634b8c965738848448e4380c075a71e2cf60794613d3b379640aa4435be1e73604645266ecc6949f4aabffc97f6ac96567214b914164885ff8941d73d620e65aedae1fe5b8e477ceee84dc8214029404127af1e7fa5d1763cc7886102692a78e49654860cbfa4767e828063eeb5557b737ee90367976f1e1ad285bb559&p=cb6dde0c92934eac5cb2c771094c&user=baidu
这篇文章我看了,他这个文章是针对一个数据库配置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
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呢?