我想使用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吗?
答案 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");