dbExpress连接远程Oracle数据库问题

2019-07-23  本文已影响0人  寄居他乡

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解决,在其他语言中也同样存在。

上一篇下一篇

猜你喜欢

热点阅读