从ubuntu连接到Oracle数据库

时间:2017-06-02 10:27:28

标签: c++ oracle ubuntu

我想使用C ++连接到Ubuntu中本地网络中的Oracle DB。据我所知,到目前为止,它可以通过即时客户端库完成。但我没有设法连接。

我已尝试过其他库,例如soci,ODBC ..,但它们也失败了。

我可以使用Oracle SQL开发人员GUI连接到此数据库,并且没有任何问题。但使用其他库我面临许多不同的错误。我列出了一些给你的。

使用InstantClientLibrary12

user="XYZ";
pass="XYZ";
db="mdw.dbs.sharif.edu:1521";
Environment * env = Environment::createEnvironment(Environment::DEFAULT)
Connection * conn = env->createconnection(user,pass,db); //here it gives error

给出了这个错误:

     Error: ORA-12163 - TNS:connect descriptor is too long

使用Soci Library

      session sql(soci::oracle,"service=mdw.dbs.sharif.edu:1521 user=XYZ pass=XYZ"); 

这会出现此错误

      ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

这些错误是因为Oracle没有正式支持Ubuntu吗?有人在Ubuntu中成功连接到Oracle DB吗?

2 个答案:

答案 0 :(得分:0)

您的问题与开发无关。您的oracle客户端的tnsnames.ora文件中存在配置问题。您应该在此结构上重新配置它:

<addressname> =
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(Host = <hostname>)(Port = <port>))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = <service_name>)
 )
)

您可能忘记在文件中指定 SERVICE_NAME 。请记住tnsnames.ora文件位于/ network / admin目录中。

希望它有所帮助。

答案 1 :(得分:0)

您在Soci示例中缺少SID /服务名称:

  session sql(soci::oracle,"service=mdw.dbs.sharif.edu:1521 user=XYZ pass=XYZ"); 

试试这个(用你的MYSID改变):

  session sql(soci::oracle,"service=mdw.dbs.sharif.edu:1521/MYSID user=XYZ pass=XYZ");