java應用通過jdbc連線資料庫jdbc的串的3種寫法:

like052629發表於2015-02-27

1、通過service_name連線的串寫法:jdbc:oracle:thin:@192.168.0.214:1521/db

或jdbc:oracle:thin:@//:/

如果service_name輸入錯誤,報錯資訊如下:

javax.servlet.ServletException: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

測試執行Java 類,報錯:

java.sql.SQLException: The Network Adapter could not establish the connection

 

可以嘗試更換對應的 jdbc connection driver,官網的說明如下:

 

JDBC Thin Driver 11g Causes"Java.Sql.Sqlexception: Io Exception: The Network Adapter Could NotEstablish The Connection" While Connecting to Oracle Database 11g [ID947653.1]

 

Change the JDBC connection driver class inyour application server from:

oracle.jdbc.driver.OracleDriver

to

oracle.jdbc.OracleDriver

 

2通過SID連線的串的寫法:

jdbc:oracle:thin:@192.168.0.30:1521:db

jdbc:oracle:thin:@:: 

如果SID輸入錯誤,報錯資訊如下:

javax.servlet.ServletException: java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

3、使用tnsname

jdbc:oracle:thin:@

 

填寫完全也可:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.3)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=db)))

 

連線rac叢集,最好使用service_name連線:jdbc:oracle:thin:@scan-name:1521/db(scan_ip是寫死在hosts檔案中,如果使用dns伺服器不知是否可以正常連線?,也可以實現分發的功能

針對DG切換問題,如果不考慮IP問題,建議在備庫增加一個service_name,值與主庫一致:alter system set service_names=sdb,db scope=both;增加後即可以保證主備有相同的service_name可以進行連線。

 

Db_name:對一個資料庫的唯一標識,db_name最多8個字元。

Db_domain:定義一個資料庫所在的域,是資料庫管理員為了更好的管理分散式資料庫而根據實際情況決定的,為了方便管理,可以將其等於網際網路的域。

Global_name:對一個資料庫的唯一標識,oracle建議使用此種方法命名資料庫,該值是在建立資料庫時決定的,預設值為db_name.db_domain,在以後對引數檔案中db_namedb_domain引數的任何修改均不影響global_name的值,如果要修改global_name,只能使用alter database rename golbal_name to 命令進行修改,然後修改相應引數。 

Service_name:該引數是8i後引進的,在之前,使用SID來標識資料庫的一個例項,但是在rac環境中,一個資料庫對應多個例項,設定比較反鎖,因此引進了service_name引數,該引數對應一個資料庫,而不是一個例項,預設值為db_name.db_domain,即等於global_name,一個資料庫可以對應多個service_name,以便實現靈活的配置,可以與SID不相同。

SIDinstance_name:例項名稱,用來區分不同的例項,在10G之後instance_name的值是動態從系統中獲得,預設是取自ORACLE_SIDinstance_name除了用來區分不同例項之外,在監聽器動態註冊時,還會用於向監聽器註冊。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28258625/viewspace-1442757/,如需轉載,請註明出處,否則將追究法律責任。

相關文章