dbExpress连接远程Oracle数据库问题
最近遇到问题,Delphi的dbExpress在安装数据库的本机连接没有问题,本机未安装instant client 数据库客户端。OracleConnection的database填IP,但是同个局域网电脑,安装了32位oracle client, 配置相同的OracleConnection就连接不上。报错:ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA使用PLSQL数据库工具也无法连接。
最终恢复做了以下尝试,供大家参考。
1 本机通过sqlplus user@IP,(这里的IP我理解是字符串连接符,即在tnsnames.ora中配置的连接符),如果这步输入密码后能正常连接上,说明listener.ora和tnsnames.ora没有问题,监听和数据库也都正常。
2 如果上一步连接不上数据库,可以用数据库的配置工具Net Configuration Assistant,可以直接在cmd里netca调起来,这样好处在于能看到调试信息。重新配置监听和网络服务名。
3 注意listener.ora配置。这里要修改的地方是SID_NAME和HOST。改成对应的数据库实例名和IP
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = C:\app\Administrator\product\11.2.0\dbhome_1)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.7)(PORT = 1521))
)
)
4 注意tnsnames.ora配置。这里要修改的地方是SERVICE_NAME和HOST。改成对应的数据库实例名和IP
orcl =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.7 )(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
5 经过以上配置可以用tnsping IP测试数据库连通,如果正常本机连接就没有问题了。
6 网络服务名的配置 image选择重新配置,服务名ORCL,主机名为IP,直到配置完成。
7 远程电脑Delphi通过dbExpress的OracleConnection连接时候database 填IP\Service_name即可正常连接。本例中192.168.0.7/ORCL
发生上述问题的原因,我觉得是oracleConnection并没有去读本地的tnsnames.ora,database字段也就不能只是写连接描述符。这个问题在PLSQL中同样通过hosts/service-name解决,在其他语言中也同样存在。
网友评论