標籤:方法 網路 oba port strong 一個資料庫 note 好處 節點
jdbc串連資料庫使用sid和service_name的區別
部落格分類:
最近使用jdbc串連oracle時報錯:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was:
10.12.162.84:1521:xxxx
登陸oracle資料發現在network/admin/檔案夾下的tnsnames.ora中配置的是:SERVICE_NAME =xxxx。經過查詢發現,是jdbc中的串連串使用的不正確。Java JDBC Thin Driver 串連 Oracle有三種方法,如下:
格式一: Oracle JDBC Thin using a ServiceName:
jdbc:oracle:thin:@//<host>:<port>/<service_name>
Example: jdbc:oracle:thin:@//192.168.2.1:1521/XE
注意這裡的格式,@後面有//, 這是與使用SID的主要區別。
這種格式是Oracle 推薦的格式,因為對於叢集來說,每個節點的SID 是不一樣的,但是SERVICE_NAME 確可以包含所有節點。
格式二: Oracle JDBC Thin using an SID:
jdbc:oracle:thin:@<host>:<port>:<SID>
Example: jdbc:oracle:thin:@192.168.2.1:1521:X01A
Note:
Support for SID is being phased out. Oracle recommends that users switch over to usingservice names.
格式三:Oracle JDBC Thin using a TNSName:
jdbc:oracle:thin:@<TNSName>
Example: jdbc:oracle:thin:@GL
Note:
Support for TNSNames was added in the driver release 10.2.0.1
linux下查詢sid的方法:
在配置oracle環境變數的情況可以使用 echo $ORACLE_SID,如果沒有可以使用ps -ef |grep oracle 來查詢:
oracle 2548 1 0 Aug17 ? 00:00:00 ora_pmon_xxxx
後面的xxxx就是對應的sid。
在windows環境下,oracle是以後台服務的方式被管理的,所以看"控制台->管理工具->服務 裡面的名稱:"OracleServiceORCL",則ORCL就是sid;
service_name 和sid的區別:
Service_name:該參數是由oracle8i引進的。在8i以前,使用SID來表示標識資料庫的一個執行個體,但是在Oracle的並行環境中,一個資料庫對應多個執行個體,這樣就需要多個網路服務名,設定繁瑣。為了方便並行環境中的設定,引進了Service_name參數,該參數對應一個資料庫,而不是一個執行個體,而且該參數有許多其它的好處。該參數的預設值為Db_name. Db_domain,即等於Global_name。一個資料庫可以對應多個Service_name,以便實現更靈活的配置。該參數與SID沒有直接關係,即不必Service name 必須與SID一樣
sid是資料庫執行個體的名字,每個執行個體各不相同。
jdbc串連資料庫使用sid和service_name的區別(轉)