我已经在Fedora 20虚拟机上安装了Oracle 11g XE,配置了它并设置了环境变量(运行oracle_env.sh
)。尝试通过jdbc将Eclipse与数据库连接时出现此错误,使用此字符串"jdbc.databaseurl=jdbc:oracle:thin:@192.168.88.134:1521:XE"
ORA-12505,TNS:侦听器当前不知道连接描述符中给出的SID。 Eclipse和Fedora 20通过JDBC
我可以通过SQL * Plus(sqlplus/as sysdba
)连接到虚拟机中的数据库。
$ORACLE_SID
变量没问题(XE
)。我已经尝试停止并启动侦听器,然后启动数据库,并使用alter system register;
命令。
也静态注册数据库没有成功(我不能认为我没有错误这样做,所以如果有人认为这可以解决我的问题,我会再试一次)。
这里是listener.ora
文件:
# listener.ora Network Configuration File:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.134)(PORT = 1521))
)
)
DEFAULT_SERVICE_LISTENER = (XE)
而且tnsnames.ora
文件:
# tnsnames.ora Network Configuration File:
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.134)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
而且lsnrctl status
:
LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 31-MAR-2014 01:22:35
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.2.0 - Production
Start Date 30-MAR-2014 22:41:35
Uptime 0 days 2 hr. 41 min. 1 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service XE
Listener Parameter File /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Listener Log File /u01/app/oracle/product/11.2.0/xe/log/diag/tnslsnr/192/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.88.134)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
我几乎可以肯定的是,问题是,监听者不知道数据库。上面的命令应该显示,除了它已经具备了,像
Service XE has 1 instance.
Instance "XE", status READY, has 1 handler for this service
...但它没有,我不知道如何解决这个问题。
我是新来的,主要是在Linux上,所以我会很感谢你提出的解决方案的每一个细节。
您的虚拟机是否有多个IP地址,并且它的名称(从'uname -n')解析到'/ etc/hosts'中并通过'dig'进行解析?只需检查一下,你可以从SQL * Plus会话中发出'alter system register',然后再次检查'lsnrctl services'输出;并检查'show parameters local_listener'是否显示空白值? –
据我所知它只有一个IP地址。我尝试了“更改系统寄存器”而没有成功,监听器状态保持不变。 – Tony
我刚刚看到你试图注册,对不起。但是你的机器名是什么(来自'uname'),以及'/ etc/hosts'对这个名字有什么作用? –