這篇文章主要介紹如何使用jdbc配置連接數據庫(oracle的RAC配置的數據庫)達到負載均衡的情況 該例子是以 個NODE的情況說明 希望對大家有所幫助
我的問題是我需要設置oracle x的thin客戶端連接到oracle的RAC環境上
註:這樣連接可以通過RAC自動平衡負載
原文如下:
Hi Tom
I couldn t find this information easily on the net ? So I m submitting it hereand hope you make it available for anyone else looking for this information
My problem was I needed to configure the Oracle x thin driver (type IV) toconnect to an Oracle Real Application Cluster (RAC) environment
For example assuming you have a database called RAC_DB with o nodes node and node
You would need to configure your tnsnames ora with the following information inthe following way:
RAC_DB =? (DESCRIPTION = (ADDRESS_LIST =? (ADDRESS = (PROTOCOL = TCP)(HOST = node )(PORT = ))? (ADDRESS = (PROTOCOL = TCP)(HOST = node )(PORT = ))? (LOAD_BALANCE = yes)? (FAILOVER = on) ) (CONNECT_DATA =? (SERVICE_NAME = RAC_DB)? (FAILOVER_MODE = (TYPE = SELECT)? (METHOD = BASIC)? (RETRIES = )? (DELAY = )? ) )? )
Now if you start a SQL*PLUS session then you should see a connection on thenode instance ? If you start another SQL*PLUS session then Oracle shouldconnect you to the node instance (automatic load balancing) ? It s actuallypretty cool to see the first time
To pass this same information to the Oracle s JDBC thin driver you essentiallyconcatenate a shorten version of the tnsnames information above and pass this tothe driver
String userid = scott ;? String password = tiger ;
String tnsnames_info = (DESCRIPTION=(ADDRESS_LIST= + (ADDRESS=(PROTOCOL=TCP)(HOST=node )(PORT= )) + (ADDRESS=(PROTOCOL=TCP)(HOST=node )(PORT= )) + (LOAD_BALANCE=yes)(FAILOVER=on)) + (CONNECT_DATA=(SERVICE_NAME=rac_db))) ;
String url = jdbc:oracle:thin:@ + tnsnames_info;
DriverManager registerDriver(new oracle jdbc OracleDriver());? Connection dbConnection = DriverManager getConnection(url userid password);
That s it ? If your application creates multiple connection to the database then you should see these connections load balance across the o instances
One last note Oracle only supports connection to a RAC configuration with the i drivers so you should try to get the latest Oracle JDBC thin driver
HTH Peter
and we said
you made it really hard ? you just needed the service!? the load balancing andall could be/should be setup on the listener side!
you have one listener both databases register with it as a service
that would be another option
Reviews
I think we tried that and it didn t work ? September Reviewer:? Peter Tran? from Houston TX USA
Hi Tom
I m pretty sure we tried that but it didn t work with the thin driver ? Thatapproach will work if you use the OCI driver but not with the thin driver
Please send me an example of what you mean or what files I should configure totest it out
I m always opened to easier options
Thanks Peter
Followup:you need to set up mts and a single listener thats it
pmon on each of the rac instances will tell the listener about the load and awayit goes ? you might not see the round robin right off (both are not yetloaded ) so it ll be an unbalanced load balance initially but as the systemramps it ll balance out
Unknown territory ? September Reviewer:? Peter Tran? from Houston TX USA
I m sorry but I really lost you with that last remendation ? Rather thanfrustrate you with my ignorance can you remend the Oracle documentation thatI should read to brush up on this information?
I ll read this first and e back with questions if I m still lost
For example I don t understand why you want me to setup the database as MTS Why can t I use dedicated server mode?
Thanks for the quick response
Peter
Followup:in order for a single listener to service many instances on differentmachines the listener must be servicing shared server connections thelistener cannot fork/exec a dedicated server since the listener may well notbe running on the machine the instance is on ? it needs to know dispatcheraddresses to redirect the client request to
lishixinzhi/Article/program/Oracle/201311/17131