java oracle thin 和 oci 串連方式實現多資料庫的故障切換,thinoci

來源:互聯網
上載者:User

java oracle thin 和 oci 串連方式實現多資料庫的故障切換,thinoci

java oracle thin 和 oci 串連方式實現多資料庫的故障切換

一、thin方式
其中URL為
jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)
      (ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))
      (ADDRESS=(PROTOCOL=TCP)(HOST=10.132.111.14)(PORT=1521))
      (CONNECT_DATA=(SERVICE_NAME=bomc)))

其中LOAD_BALANCE=on表示負載開啟,java以隨機的方式建立會話串連;
LOAD_BANLANCE=off表示負載關閉,java以順序的方式建立會話串連,只有
當第一個資料庫出現故障無法串連時才會選擇第二個資料庫進行會話串連。


二、oci方式
1. 具體程式部署的本機需要安裝oracle用戶端,並在PATH路徑下指定oracle用戶端bin目錄,並拷貝
oracle用戶端裡內建的jdbc驅動到自己的工程項目。

2. 配置TNSNAMES.ORA檔案如下:
HA_DB =
  (DESCRIPTION_LIST =
     (LOAD_BALANCE = on)
     (FAILOVER = on)    
       (DESCRIPTION =
           (ADDRESS_LIST =
              (LOAD_BALANCE=OFF)
              (FAILOVER=ON)
              (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
           )
           (CONNECT_DATA =
              (SERVICE_NAME = bomc)
              (INSTANCE_NAME = bomc)
              (FAILOVER_MODE=(TYPE=session)(METHOD=basic)(RETRIES=4)(DELAY=1))
           )
        )
        (DESCRIPTION =
           (ADDRESS_LIST =
              (LOAD_BALANCE=OFF)
              (FAILOVER=ON)
              (ADDRESS = (PROTOCOL = TCP)(HOST = 10.132.111.14)(PORT = 1521))
           )
           (CONNECT_DATA =
             (SERVICE_NAME = bomc)
             (INSTANCE_NAME = bomc)
             (FAILOVER_MODE=(TYPE=session)(METHOD=basic)(RETRIES=4)(DELAY=1))
           )
        )
        (DESCRIPTION =
           (ADDRESS_LIST =
              (LOAD_BALANCE=OFF)
              (FAILOVER=ON)
              (ADDRESS = (PROTOCOL = TCP)(HOST = 10.112.11.161)(PORT = 1521))
           )
           (CONNECT_DATA =
              (SERVICE_NAME = bomc)
              (INSTANCE_NAME = bomc)
              (FAILOVER_MODE=(TYPE=session)(METHOD=basic)(RETRIES=4)(DELAY=1))
           )
        )
       
  )
 
關於其中的配置參數作用請查相關資料!
 
3. java jdbc串連
其中URL寫為java:oracle:oci:@ha_db


 


java的oci方式串連資料庫的問題

OCI 只是一種串連方式,既然你使用 Java 來做用戶端程式,為什麼要使用 Native 方式的驅動?
你應該使用 java:oracle:thin:@ 的 thin 協議來串連資料庫。

OCI 本身是為 C++, VB 這樣的程式準備的。Java 版本的程式建議使用 thin 協議的驅動。

Java 驅動有4種類型,type 1 - type 4,現在已經基本上普及了type 4驅動,幾乎所有的廠商都提供 type 4驅動,它是說伺服器端和驅動程式之間是廠商內部網路通訊格式,驅動程式和 java 程式之間是純 java。而依賴廠商的 DLL 的驅動就是 type 2,它是要求在當前 path 變數路徑或 java.library.path 參數的路徑上能找到 oracle 驅動程式的 DLL。所以如果你堅持使用 oci 驅動,你需要把 oracle 的 BIN 目錄 (可能還有其它目錄,反正有Oracle 的 DLL 的目錄你都得確認一下)添加到 PATH 變數中。

而且要記得,type 2 驅動跟版本之間的依賴關係比較大,可能它要求特定版本的 DLL,而 type 2 則不同,它本身不依賴 dll,驅動與伺服器之間本來就是純 java 版的,它本身代替了DLL 的功能,所以版本依賴關係小。

你的 -Djava.library.path 的路徑是真實存在的 oracle 用戶端目錄嗎?裡面說的那個 dll 能找到嗎?你的程式中 println(System.getProperty("java.library.path")) 得到的結果是什嗎?
 
oracle的thin與oci串連

先看看thin和oci的url寫法上的區別:
jdbc:oracle:thin:@server ip: service
jdbc:oracle:oci:@service
1)從使用上來說,oci必須在客戶機上安裝oracle用戶端或才能串連,而thin就不需要,因此從使用上來講thin還是更加方便,這也是thin比較常見的原因。
2)原理上來看,thin是純java實現tcp/ip的c/s通訊;而oci方式,用戶端通過native java method調用c library訪問服務端,而這個c library就是oci(oracle called interface),因此這個oci總是需要隨著oracle用戶端安裝(從oracle10.1.0開始,單獨提供OCI Instant Client,不用再完整的安裝client)
3)它們分別是不同的驅動類別,oci是二類驅動, thin是四類驅動,但它們在功能上並無差異。
4)雖然很多人說oci的速度快於thin,但找了半天沒有找到相關的測試報告。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.