------解決方法 --------------------------------------------------------p; 在項(xiàng)目遇到一個(gè)問(wèn)題,在用java中用jdbc連接oracle時(shí)出錯(cuò),log中記錄“connectin refuse(DESCRIPTION=(TMP=)(VSNNUM=168354658)(ERR=12505)(ERROR_STACK= (ERROR=(CODE=12505)(EMFI=4))))”,采用的連接url是 “jdbc:oracle:thin:@hostname:1521:ovsDB”, 由于連接的配置是在一個(gè)開(kāi)發(fā)工具中進(jìn)行的,于是寫(xiě)了一個(gè)簡(jiǎn)單的測(cè)試程序在eclipse中測(cè)試,結(jié)果是提示出錯(cuò)“ORA-12505 :listener does not currently know of SID given in connect descriptor”, oracle服務(wù)器的監(jiān)聽(tīng)器不能識(shí)別這個(gè)SID, 本地的tnsnames.ora中是這樣寫(xiě)的
ovsDB = (網(wǎng)絡(luò)服務(wù)名)
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = remotehostname)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ovsDB)
)
)
SID和tnsnames.ora配置都是維護(hù)服務(wù)器的人給的,在使用"oracle SQL developer" 和sqlplus連接時(shí)都可以正常連接上,百思不得其解.
在查閱了資料后,罪魁禍?zhǔn)字赶騍ID,在此灰常感謝參考URL中的blog主人, 原因是工具在連接時(shí)只需給其指定service_name,而使用jdbc連接是則必須要SID, 使用oracle SQL developer連接上后執(zhí)行select instance_name from v$instance后得出的instance_name是ovsDatabase,這個(gè)才是oracle服務(wù)器上的SID, 于是在url中使用這個(gè)SID連接,終于正常了!問(wèn)題解決!
在解決這個(gè)問(wèn)題過(guò)程中,總結(jié)出的東東有:
1. 工具在連接時(shí)只需給其指定service_name,而使用jdbc連接是則必須要在url中提供SID;
2.客戶(hù)端的tnsnames.ora中的網(wǎng)絡(luò)服務(wù)名并不是SID,而是一個(gè)可任意命名的代號(hào),oracle客戶(hù)端或者其他連接工具在連接服務(wù)器是使用這個(gè)代號(hào)來(lái)解析其中的service_name.
參考URL: http://www.blogjava.net/itspy/archive/2007/12/20/169072.html
http://www.hinn.cn/2009/04/oracle_sqlnetora_tnsnamesora_listenerora.html