oracle是11g,我在服务器上部署web程序直接连本机数据库,tnsnames.ora文件
# tnsnames.ora Network Configuration File: D:\app\Administrator\product\11.1.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.LISTENERBOB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.90)(PORT = 1521))
)
(CONNECT_DATA =
(Service_Name = orcl)
(SID = orcl)
)
)
listener.ora文件内容
# listener.ora Network Configuration File: D:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.LISTENERIT =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.90)(PORT = 1521))
)SID_LIST_LISTENERIT =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = Oracle8)
(ORACLE_HOME = D:\app\Administrator\product\11.1.0\db_1)
(SID_NAME = ORCL)
)
)
一直报 “ORA-12504: TNS: 监听程序在 CONNECT_DATA 中未获得 SERVICE_NAME” 错误,以前曾经可以过,好久没动,居然不行了,于是我把监听和net服务全部重新配置了,
# tnsnames.ora Network Configuration File: D:\app\Administrator\product\11.1.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.LISTENERBOB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.90)(PORT = 1521))
)
(CONNECT_DATA =
(Service_Name = orcl)
(SID = orcl)
)
)
listener.ora文件内容
# listener.ora Network Configuration File: D:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.LISTENERIT =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.90)(PORT = 1521))
)SID_LIST_LISTENERIT =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = Oracle8)
(ORACLE_HOME = D:\app\Administrator\product\11.1.0\db_1)
(SID_NAME = ORCL)
)
)
一直报 “ORA-12504: TNS: 监听程序在 CONNECT_DATA 中未获得 SERVICE_NAME” 错误,以前曾经可以过,好久没动,居然不行了,于是我把监听和net服务全部重新配置了,
Service_Name 原来是大写的,都不行,郁闷。。
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.90)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
listener.ora文件内容改成如下:SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\app\Administrator\product\11.1.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = D:\app\Administrator\product\11.1.0\db_1)
(SID_NAME = ORCL)
)
)LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.90)(PORT = 1521))
)
)
--tnsnames.ora内容:
LISTENERBOB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.90)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)
select value$ from sys.props$ where name='GLOBAL_DB_NAME';
另外看看INIT.ORA文件里有service_names这一项吗?它的值是否等于ORCL
当然前提必须如楼上所说的你要确认名为ORCL的数据库实例存在
数据库实例是 orcl,大小写有关系吗to rexyudl INIT.ORA文件里有diagnostic_dest='<ORACLE_BASE>'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
2.oracle的service name默认是database的sid建议作如下调查:
lsnrctl status #察看database是否已经register了。
init<SID>.ora配置中察看是否有local_listener。
sqlplus usr/pwd 的时候是通过sid连接
sqlplus usr/pwd@svr 是通过本地的服务名连接,注意二者区别。
3.如果是在web应用中发生问题的话,就需要察看web端的配置了。