【发布时间】:2018-03-13 14:09:04
【问题描述】:
我正在尝试通过 ruby 连接到 oracle 数据库,但出现错误: OCIError: ORA-12514: TNS:el listener no conoce actualmente el servicio solicitado en el descriptor de conexión oci8.c:659:in oci8lib_240.so 侦听器实际上并不知道连接描述符中请求的服务。
- 我将即时客户端 12_2 和 odbc 下载到 w7 64b,将 oci.dll 下载到 w7 32b,然后将其放在 ruby 文件夹中。 (http://www.oracle.com/technetwork/topics/winx64soft-089540.html)
- 我将 db 11g 第 2 版下载到 w7 64b,然后运行安装程序。我从 NET MANAGER 开始配置监听器。 (http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html)
- 我有 sql 开发人员,连接和查询工作正常。
- 我配置了tnsnames.ora、listener.ora和sqlnet.ora
名称:
SERVICE_PODVCT_ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = podvct.x.com)(PORT = 1521))
)
(CONNECT_DATA =
(SID = PODVCT)
(SERVICE_NAME = PODVCT)
(SID = PODVCT)
)
)
听众:
LISTENER_PODVCT_ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = podvct.x.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = PODVCT)
(SID = PODVCT)
)
)
sid_list_LISTENER_PODVCT_ORCL=
(sid_list=
(sid_desc=
(oracle-home=C:\app\user\product\11.2.0\dbhome_1)
(sid_name=PODVCT)))
ADR_BASE_LISTENER_PODVCT_ORCL = C:\app\user
sqlnet:
AMES.TRACE_DIRECTORY = C:\app\user\product\11.2.0\dbhome_1\NETWORK\trace
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME)
NAMES.TRACE_FILE = names.trc
NAMESCTL.TRACE_FILE = namesctl.trc
NAMES.PREFERRED_SERVERS =
(address_list =
(address = (protocol = tcp)(host = podvct.x.com)(port = 1521))
)
NAMES.LOG_FILE = names.log
NAMESCTL.TRACE_LEVEL = ADMIN
NAMES.LOG_DIRECTORY = C:\app\user\product\11.2.0\dbhome_1\NETWORK\log
NAMES.DEFAULT_DOMAIN = world
NAMESCTL.TRACE_DIRECTORY = C:\app\user\product\11.2.0\dbhome_1\NETWORK\trace
NAMES.TRACE_LEVEL = ADMIN
ADR_BASE = C:\app\user
我配置了环境变量:
PATH: ...;C:\Ruby24-x64\bin\oci.dll;C:\Oracle_odbc;%ORACLE_HOME%/network/bin;C:\app\PRIVE2\product\11.2.0\dbhome_1\bin;
ORACLE_HOME:C:\app\user\product\11.2.0\dbhome_1
ORACLE_SID:podvct
NLS_LANG: SPANISH_SPAIN.WE8MSWIN1252
TNS_ADMIN: C:\app\USER\product\11.2.0\dbhome_1\NETWORK\ADMIN
-
我用红宝石写了:
需要'dbi' 需要'oci8'
//dbh = OCI8.new(user,password,'podvct.x.com:1521/PODVCT')
dbh = DBI.connect("DBI:OCI8:podvct.x.com:1521/PODVCT",user,password)
-
我检查了自 ruby 和自 sqlplus 以来的连接,错误是:
dbh = DBI.connect("DBI:OCI8:podvct.monsanto.com:1521/PODVCT",user,password)
OCIError: ORA-12514: TNS:el listener no conoce actualmente el servicio solicitado en el descriptor de conxión oci8.c:659:in oci8lib_240.so 侦听器实际上并不知道连接描述符中请求的服务。
【问题讨论】:
-
db 和 listener 是否正在运行?
-
数据库是一个远程数据库,它运行在服务器上,监听器在我的电脑上。
-
你确认了吗,如果服务器上的监听器也启动了?
-
我需要两者兼而有之的听众吗?服务器和我的电脑?我需要像在我的电脑中一样配置监听器吗?我会确认的。
-
是的.. 服务器应该有监听器并且应该启动