2017-06-02 225 views
1

我想用C++連接到Ubuntu本地網絡中的Oracle數據庫。正如我迄今所知,它可以通過即時客戶端庫完成。但我沒有設法連接。從ubuntu連接到Oracle數據庫

我試過其他的庫,比如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 

使用索契圖書館

 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數據庫?

回答

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目錄中。

希望它有幫助。

+0

親愛的奧斯卡,我沒有這個/網絡/管理員在我的系統,所以在互聯網上搜索,並意識到我需要有一個完整的Oracle安裝這一個!我該怎麼辦 ?我只需要Oracle驅動程序連接到數據庫,我不想安裝整個Oracle軟件包。是否有可能不需要安裝Oracle軟件包? – PsP

+0

network/admin目錄位於您安裝oracle軟件包的位置。你可以只安裝「instantclient」,這是他們所有人的打火機,但當然你必須安裝一個orackle軟件包,據我所知。 – OscarAkaElvis

0

您在索契例如缺少SID /服務名稱:

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

試試這個(與你的變化糠):

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

我試過你的解決方案,但它給出了「ORA-24454客戶端主機名未設置」錯誤信息 – PsP

+0

在該機器上「mdw.dbs.sharif.edu」是否解析?嘗試ping它。 – diarpi