我們都知道,ORACLE 對外提供服務有 這么幾種方式 THIN CONNECT ,OCI CONNECT ,DATALINK等數據連接方式。
1.THIN Connect
在單實例情況下,JDBC Connect String : jdbc:oracle:thin:10.11.1.243:1521/orcl
其中IP 10.11.1.243:1521 服務器IP地址和Lisener監聽端口。
orcl 為數據服務名。
在RAC環境中,JDBC Connect String :
jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)
(HOST = 10.11.1.231)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)
(HOST = 10.11.1.232)(PORT = 1521))(LOAD_BALANCE = yes)(FAILOVER = ON)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = racdb.its)(FAILOVER_MODE=(TYPE = SELECT)(METHOD = BASIC)(RETIRES = 20)(DELAY = 15))))
其中HOST為兩個幾點的Lisener的配置。FAILOVER關鍵字 為配置故障切換。Load_balance為負載均衡打開設置。
SERVICE_NAME 為RAC系統的數據庫實例名。
以下為JAVA系統的代碼:

1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.ResultSet; 4 import java.sql.Statement; 5 6 public class Test { 7 8 public static void main(String arg[]) { 9 try { 10 Class.forName("oracle.jdbc.driver.OracleDriver"); 11 String url="jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))(LOAD_BALANCE = yes)(FAILOVER = ON)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = db.domain)(FAILOVER_MODE=(TYPE = SELECT)(METHOD = BASIC)(RETIRES = 20)(DELAY = 15))))"; 12 Connection c = DriverManager.getConnection(url,"aa","aa"); 13 Statement s = c.createStatement(); 14 ResultSet r = s.executeQuery("select 1 from dual"); 15 while(r.next()) { 16 System.out.println(r.getString(1)); 17 } 18 }catch(Exception e) { 19 System.out.println(e.toString()); 20 } 21 } 22 23 }
2.OCI 連接的配置 也就是通常的TNS 配置
單實例的情況:很簡單 不多做累贅
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.1.243)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
RAC情況:
RACDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb1-vip.its)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
(INSTANCE_NAME = racdb1)
)
)
RACDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb1-vip.its)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb2-vip.its)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)
LISTENERS_RACDB =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb1-vip.its)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb2-vip.its)(PORT = 1521))
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
RACDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb1-vip.its)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb2-vip.its)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)
LISTENERS_RACDB =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = racdb1-vip.its)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = racdb2-vip.its)(PORT = 1521))
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION = (ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
RACDB2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = racdb2-vip.its)(PORT = 1521)) (CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
(INSTANCE_NAME = racdb2)
)
)
2.