美文网首页
dbExpress连接远程Oracle数据库问题

dbExpress连接远程Oracle数据库问题

作者: 寄居他乡 | 来源:发表于2019-07-23 15:49 被阅读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解决,在其他语言中也同样存在。

    相关文章

      网友评论

          本文标题:dbExpress连接远程Oracle数据库问题

          本文链接:https://www.haomeiwen.com/subject/smcalctx.html