標籤:
PERAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 131.197.17.137)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 131.197.17.138)(PORT = 1521))
(LOAD_BALANCE = yes)
(FAILOVER = ON)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pe)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES=180)
(DELAY=5)
)
)
)
要我在程式配置好這一串聯接,其實很簡單。只需要把上面這一串放在以前只放置一條url串連的url標籤就可以了。以前配置的時候只是一個地址。現在有兩個,需要用上面那一串。
配置c3p0沒問題,如下:
<property name="connection.url">jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 131.197.17.137)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 131.197.17.138)(PORT = 1521))(LOAD_BALANCE = yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = pe)))</property>
但有些操作用到的是Spring的jdbcTemplate來做的。如果我想c3p0一樣把兩個地址寫在url標籤裡。會報錯,如下:
Connection refused(DESCRIPTION=(ERR=1153)(VSNNUM=169870336)(ERROR_STACK=(ERROR=(CODE=1153)(EMFI=4)(ARGS=‘(ADDRESS=(PROTOCOL=TCP)(HOST=131.197.17.138)(PORT=1521))‘))(ERROR=(CODE=305)(EMFI=1))))
剛開始我以為是138這個機器連不上,因為它提示的是138,於是我只用了137的機器去串連,結果還是報這個錯,最後換成了138去連,放而沒問題了!不過不能同時寫137和138,其實只用到了一個地址。哪怕寫一個地址的時候。也要這樣寫:
<value>jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 131.197.17.138)(PORT = 1521))(LOAD_BALANCE = yes)(CONNECT_DATA = (SERVICE_NAME=pe)))</value>
不能簡單的url+連接埠+sid,不然會報錯:
Could not get JDBC Connection; nested exception is java.sql.SQLException: Io 異常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=169870336)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
我還在嘗試,如何才能在spring的jdbcTemplate配置雙地址。難道是是因為org.springframework.jdbc.datasource.DriverManagerDataSource有關?要改成串連池?我嘗試下吧!反正以上是可以用了。
最後問題解決了!其實直接把串連串寫在url標籤就可以了。只需要你的資料庫驅動是最新的!這個很重要。我之前有的是class12.jar,用這個驅動的話很不穩定,時好時壞,於是換了ojdbc.jar,好傢夥!怎麼折騰都沒事!問題解決!
以下是網上轉載的,留檔學習:
順便記錄下配置連結字串的參數:
address後面就是串連的IP和連接埠號碼沒什麼說的。load_balance=yes;表示是否負載平衡。server = dedicated;表示專用伺服器模式,感覺可以去掉。service_name=orcl;要操作資料庫的服務名。TYPE = SESSION表示當一個串連好的會話的執行個體發生故障,系統會自動將會話切換到其他可用的執行個體,前台應用無須再度發起串連,但會話正在執行的SQL 需要重新執行。METHOD = BASIC表示初始串連就串連一個接點,他還有個選項是preconnect,表示初始串連所有的接點。RETRIES:重試次數。DELAY:重試的延 遲(以秒為單位)。
並且叢集中如果ORACLE伺服器的LISTENER配置的是原生機器名,則應用方面最好把winnt下的system32\drivers\etc\hosts檔案更改一下。最後加上IP對應的機器名,比如:
10.37.27.111 linux1-vip
10.37.27.112 linux2-vip
c3p0和jdbcTemplate配置oracle叢集RAC記錄