After installing SOA 11g, but the soa-infra component fails to start.java
The following error message shows up in the soa diagnostics.log file:node
oracle.mds.lcm.exception.MDSLCMException: MDS-00922: The ConnectionManager "oracle.mds.internal.persistence.db.JNDIConnectionManagerImpl" cannot be instantiated. weblogic.common.ResourceException: No good connections available.
This exception means that the application is using a MultiPool DataSource to get JDBC connections, and all the pools defined for that MultiPool are currently unable to deliver a connection for the application to use.
Here the SOA server is unable to establish a connection to the database.web
It might show that the existing data sources status will be fine. However, they do not have the SOA server as a target. Usually the issue will be the mds-soa data source.算法
The list of data sources used by applications deployed to WebLogic Server can be viewed by either connecting to the Weblogic console and navigating to Services -> JDBC -> Data Sources or in the $MW_HOME/user_projects/domains/soa_domain/config/config.xml file.數據庫
For each data source there is a separate configuration file located in the $MW_HOME/user_projects/domains/soa_domain/config/jdbc folder.服務器
Add the SOA server as a target to existing data sources using the WebLogic console and do a bounce to solve the issue.網絡
###############################################################架構
http://www.blogjava.net/jhx800/archive/2011/03/23/261052.html
轉自 兔八哥,配置ORACLE的RAC的數據源,WEBLOGIC的多池MULTI-POOL
WebLogic裏面有多池的概念,其中High availability的含義是這樣的,假設有PoolA和PoolB,正常的狀況下,只有一個PoolA起做用,其poolB是stand-by,當起做用的那個poolA出現故障,則會被WLS標記爲disable,並將請求轉發到另一個poolB上,而且定時測試被標記爲disable的poolA,若是從新鏈接成功後,則將請求再切換回PoolA上,PoolB繼續stand-by.
而上週和一個客戶討論這個問題,客戶的作法是這樣的:
後臺是Oracle的RAC數據庫,他配置了一個多池,有2個Pool,PoolA主要連RAC的A實例,PoolB主要連RAC的B實例.其實他的PoolA和PoolB都是用了RAC格式的JDBC的寫法,後面是一個主機列表,PoolA將A實例的IP寫在了前面,PoolB將B實例的IP寫在了前面,JDBC的算法是failover=yes load_banlance=no,這樣每個Pool將請求都發送到本身的第一個host的Oracle的實例上,在第一個host的Oracle實例出現故障時候切換到另一個host的Oracle實例上.
PoolA和PoolB的JDBC的寫法以下,注意failover=yes和load_banlance=yes,這樣寫的做用是當請求來的時候都轉發給第一個host,只有出現第一個host有問題,纔會將請求發送到第二個host:
WLS JDBC URL 的配置以下:
配置的多池的算法若是是High Availability的話,那麼壓力將始終壓到一個Pool上面,另一個Pool處於stand-by的狀態,除非處理請求的Pool出現故障.客戶的監控狀況也是如此,發現壓力都壓在了一個Oracle的實例上.
若是多池的算法是Load Banlance的話,那麼壓力將平均分配到2個Pool上面.若是想使用多池的high availability的算法,則不要設置test的重試次數,若是設置了,則會出錯拋出異常.
爲了能使被標記爲disable的PoolA可以恢復正常的鏈接,則須要設置HealthCheckFrequencySeconds的值在config.xml裏面,該值在console上面沒有.
另外還要可以使用TestConnectionsOnReserve.
多池就是在JDBC的鏈接池上層又加了一層請求分流的算法層.
關於Orale的RAC的JDBC的配置請參見個人另外一篇筆記:
http://rabbit8.bokee.com/4962735.html
以上是個人理解,若有錯誤,請指正,由於你的指正將會讓我理解更深入,謝謝!
本文參考了http://www.bea.com.cn/support_pattern/Investigating_JDBC_MultiPool_Issues_Pattern.html
當安裝完了Oracle的RAC後,個人Oracle就是一個雙機的集羣了,支持load banlance 和failover,可是數據源裏面的JDBC的URL須要一種不一樣的格式:
1)BEA的例子:http://www.bea.com.cn/support_pattern/Oracle_RAC_Pattern.html
WLS JDBC URL 的配置以下:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_NODE_HOSTNAME)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=SECONDARY_NODE_HOSTNAME)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DATABASE_SERVICENAME)))
個人試驗的配置:
jdbc:oracle:thin:@(description=(address_list= (address=(host=p570_b) (protocol=tcp)(port=1521))(address=(host=p570_a)(protocol=tcp) (port=1521)) (load_balance=yes)(failover=yes))(connect_data=(service_name= orcl)))
我一開始使用的是IP地址,但發現使用IP後,第一下測試鏈接成功,第二下失敗,第三下成功,第四下失敗,就是這個規律,緣由是RAC本身就有負載均衡的功能(load banlance),它會自動的分配負載(workload),而第二次的請求聽說返回的不是IP,因此在個人IP的列表裏面沒有,天然找不到(這是另外一個工程師解釋給個人,不過我不太相信,由於BEA的文檔中使用的就是IP,但我又不知道爲何)。
後來遵從那個工程師建議改爲主機名後,一切OK,但若是改主機名須要更改Windows下的WINNT/system32/drivers/etc/hosts文件,將主機名和IP對應起來。
個人RAC的數據源的配置就OK了,51後還要作DB2的雙機互備的集羣,還不知道該怎麼作,DataSource的JDBC的URL怎麼配置呢,不知道是否是和這個同樣呢?
TNS的配置:
你的TNS的名字=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = p570a)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = p570b)(PORT = 1521))
)
(load_blance=yes)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
(failover_mode=
(type=select)
(method=basic))
)
)
明天上午驗收安裝的AIX的HA和RAC,若是順利的話,下午就能夠回北京了,此次安裝AIX和RAC都不順利,那個安裝RAC的工程師這2天被蹂躪夠戧,不斷的出現新的問題,一開始AIX的版本的補丁不對,結果IBM的那個工程師早早的跑了,後來找到了緣由,後來又是安裝Oracle的Cluster層的軟件有一個NODE沒有啓動,後來知道了那個NODE是否正常啓動沒有關係,今天又是創建RAW和導入數據出現了些問題,還好都搞定了,晚上我又測試了一下集羣的數據源,明天但願上午能夠正式的測試完畢。
#####################################
http://blog.csdn.net/steelren/article/details/8453501
介紹
爲了使用戶的應用系統符合成本效益,高可用性和可擴展性一般是各種不一樣的系統所關心的問題。在包括Java EE中間層和後臺數據庫的異構複雜環境彙總,有不少已知的問題。好比,一個應用請求可能會在數據庫節點當機的時候被阻塞很長的時間。一般不會有什麼簡單的方法來判斷在捕獲到一個SQLException的時候,是否須要獲取一個新的數據庫鏈接。中間層應用不會知道有一個新的數據庫節點或者數據庫節點從新啓動或者數據庫節點運行的緩慢、掛起甚至已經當機,一般它們只會等待TCP/IP通信的超時。
Oracle WebLogic Server 11g爲Oracle Database 11g的RAC(Real Application Cluster)特性提供強大的支持,最大限度的減小數據庫的訪問時間,同時容許對豐富的鏈接池管理功能的透明訪問,最大限度的提升數據庫鏈接池的性能和有效性。
Oracle WebLogic Server 11g RAC集成解決方案已經由Oracle融合中間件和數據庫團隊聯合設計實施,並完成測試。它不只是市場上最好的高可用性解決方案,並且WebLogic Server也是惟一一個經過Oracle Database RAC 11g認證的應用服務器,經過WebLogic Server可以進行完整集成而不損失任何Java EE功能,包括安全,事務,鏈接池等等的管理。
在Oracle WebLogic Server中有兩種數據源可以支持Oracle RAC:多路數據源是從WebLogic Server 8.1 SP5發佈後就在用戶的生產部署環境中成功應用的解決方案;Oracle WebLogic 11gR1(10.3.4)開始增長的被稱做Oracle WebLogic Active GridLind for RAC的新的解決方案,該解決方案是業內領先的中間層集成解決方案,充分利用了Oracle RAC的優點。Oracle WebLogic Server Active GridLink for RAC是由Oracle推薦的支持Oracle RAC的戰略性解決方案。它可以提供其餘供應商產品所不具有的最佳的中間件與數據庫集成的特性。
Oracle WebLogic Server數據源、數據庫鏈接池解決方案和Oracle RAC的結合爲用戶提供了一個具備高性能、高可擴展性和高可用性特性的高端的任務關鍵型環境。負載均衡(Load-balancing)和關聯(Affinity)爲在線交易處理提供顯著的性能提高,並提升吞吐量和整體響應時間。失效備援(Failover)爲Oracle RAC節點的計劃和非計劃運行中斷經過端到端的快速失效監測,來支持數據庫的優雅關閉(Graceful Shutdown)。
在本文中,咱們首先對Oracle RAC作一個簡單的介紹,並對Oracle WebLogic Server 11g所支持的Oracle RAC特性進行總體描述。而後咱們將關注WebLogic Active GridLink for RAC的詳細特性和配置選項,以及樣例。全部的配置步驟和應用樣例將在本文中相應的「How-To」連接中進行介紹。
在每個特性中,對於多路數據源和Active GridLink for RAC的不一樣支持功能都將進行清晰的解釋。
ORACLE REAL APPLICATION CLUSTERS (Oracle RAC)
Oracle RAC幫助用戶創建Oracle數據庫集羣。單實例Oracle數據庫在Oracle數據庫和實例之間是一對一的關係。Oracle RAC環境在數據庫和實例之間是一對多的關係。
下圖展現了Oracle RAC如何經過多個服務器提供的單一系統映像,訪問一個Oracle數據庫的。在Oracle RAC中,每個Oracle實例一般都運行在不一樣的服務器之上。
Oracle RAC 11gR2的新特性
Oracle RAC 11gR2的新特性包括:
-
l Oracle RAC單節點:爲單實例數據庫提供加強的高可用性,在計劃或者非計劃關機中,對數據庫實例進行保護。
-
l 單一客戶端訪問名稱(SCAN):Oracle Database 11g數據庫客戶端使用SCAN鏈接數據庫,SCAN可以解析多個IP地址,對集羣中的多個監聽器進行反射,處理客戶端的鏈接。
-
l 基於版本的重定義:可以使用SRVCTL爲一個數據庫服務設置一個版本屬性,以後全部指定該服務的鏈接都以此版本做爲會話的最第一版本。
-
l 在企業管理器(Enterprise Manager)中加強對Oracle RAC的監控和診斷。
-
l 加強Oracle RAC Configuration Assistant的功能。
-
l 加強SRVCTL對網格基礎架構管理(Grid Infrastructure Management)的功能。
-
l OCI運行時鏈接負載均衡:支持在多個數據庫實例上並行執行的流程,支持跨越分佈式事務和Oracle數據庫服務質量管理服務器。
Oracle WebLogic Server 11g和Oracle 11g RAC的集成通過充分的驗證,提供高可靠性,高可擴展性和高性能。Oracle RAC服務,好比失效備援、運行時鏈接負載均衡、關聯等特性,都可以經過Oracle WebLogic Server的JDBC數據源和鏈接池實現。
Oracle WebLogic Server與RAC
在Java EE應用服務器中,數據庫交互一般都是由數據源實現的。用戶能夠配置和暴露一個數據庫鏈接做爲JDBC數據源。
在Oracle WebLogic Server中有兩種數據源可以支持Oracle RAC:多路數據源是從WebLogic Server 8.1 SP5發佈後就在用戶的生產部署環境中成功應用的解決方案;Oracle WebLogic 11gR1(10.3.4)開始增長的被稱做Oracle WebLogic Active GridLink for RAC的新的解決方案,該解決方案是業內領先的中間層集成解決方案,充分利用了Oracle RAC的優點。
多路數據源
WebLogic Server JDBC子系統從WLS 8.1 SP5開始支持Oracle RAC,最初爲Oracle 9i RAC所開發。該技術基於特殊的數據源配置類型,叫作多路數據源。該數據源是對一個或多個獨立數據源的抽象。它爲每個成員數據源的JDBC鏈接提供一個特定的策略。一個RAC 多路數據源配置須要每個成員數據源包含一個對特定RAC實例的鏈接,在下圖中展現了一個三個節點的RAC集羣的配置。
功能
WebLogic RAC 多路數據源配置提供了以下功能:
負載均衡、失效備援和XA關聯。
負載均衡
當多路數據源算法被設置了負載均衡,應用鏈接以循環方式保存對每個成員數據源起做用的請求。這與失效備援相比,提高了對集羣資源的使用率,而且也可以支持XA數據源。
失效備援
多路數據源失效備援算法使應用鏈接借用一個成員數據源中的請求,直到該成員不在有效。失效備援可以在數據庫鏈接池容量耗盡的時候發生。失效備援策略一般使用主動-被動架構。
XA關聯和失效備援
當在一個全局事務中進行數據庫訪問時,JDBC鏈接中得到的成員數據源將關聯到全局事務的生命週期當中。這能保證全部的數據庫操做可以在從多路數據源中得到鏈接上進行執行,對於特定的事務,全部的執行都在相同的RAC實例上進行。XA關聯可以提高性能,甚至是更舊版本RAC的需求,好比11g以前的版本。XA失效備援也可以被多路數據源和事務管理實現支持。若是關聯的RAC實例出現失敗,那麼一個全局事務可使用從另外一個成員數據源中得到鏈接使用不一樣的RAC實例來完成。
侷限性
Oracle 多路數據源是一個純中間層實現,可是並不能支持Oracle RAC的一些特性,好比Oracle通知服務(Oracle Notification Service, ONS)。所以,Oracle 多路數據源不能當即知道後臺數據庫發生的事情,並有以下一些侷限性:
配置複雜性
WebLogic 多路數據源須要n+1個JDBC模塊,n是RAC集羣中節點的數量。對RAC服務的配置,一個單獨的多路數據源須要爲每個RAC節點服務都進行數據源配置。此外,配置自己是靜態的,在RAC集羣的拓撲結構發生變化是,須要管理介入來增長或移除數據源。
鏈接池
多路數據源使用鏈接池機制來檢測每個JDBC鏈接的有效性和RAC集羣拓撲結構的變化。這種機制是對後臺通知服務的替代機制。雖然有效,在獨立的鏈接上執行SQL操做時會產生額外的開銷,而且在檢測RAC節點失敗時可能會產生延遲。此外,還存在可能的誤報,致使數據源池沒必要要的廢棄,終止正在被應用使用的有效鏈接。
負載均衡算法
WebLogic多路數據源採用循環式負載均衡實現跨越多個成員數據源的分佈式均衡工做。在RAC實例表現出不一樣的性能和響應時間特徵,更但願進行細粒度控制。
每一個MDS的XA關聯
每個多路數據源都提供XA關聯。當多個多路數據源參與到一個全局事務當中,有可能從不一樣的RAC實例中獲取鏈接。這就致使相同的全局事務的分支被不一樣的RAC實例處理。儘管在最近的RAC版本中,從性能角度看,它並非最佳的。
Active GridLink for RAC
Oracle WebLogic Server 10.3.4引進了一種單數據源實現來支持Oracle RAC集羣。它對FAN事件進行響應來提供快速鏈接故障轉移(Fast Connection Failover, FCF),運行時鏈接負載均衡(RCLB)和RAC實例優雅停機。在全局事務ID級別支持XA關聯。這個新的特性叫作WebLogic Active GridLink for RAC,在WebLogic Server中叫作GridLink數據源。GridLink數據源經過應用通用鏈接池(Universal Connection Pool, UCP)的RAC集成能力來提供FCF,RCLB和關聯特性。
經過關鍵基礎來提供與Oracle RAC的深度集成,這個Oracle WebLogic Server中的單數據源實現,對於做爲數據源鏈接目標的數據服務支持完整且無限制的應用。對於池中按鏈接的動態管理基於鏈接池自己的動態設置和鏈接池從RAC通知服務中得到的實時信息,Oracle通知服務(Oracle Notification Service,ONS)子系統可以向客戶端通知RAC集羣中的任何狀態變換。
通用鏈接池的Java庫集成在WebLogic Server中,而且被WebLogic GridLink數據源使用,來提供快速鏈接故障轉移,運行時鏈接負載均衡和關聯特性。
Oracle數據庫服務是Oracle數據庫中工做量管理的邏輯抽象。服務將工做量分解成邏輯獨立的組,每個服務表明一部分帶有通用屬性、服務級別閾值和優先級的工做量。服務在數據庫中創建,提供了一個單獨的工做量系統映像,工做量優先次序,真實事務的性能測量和在性能指標沒有達到時的警報和行動。服務使數據庫管理員可以配置一個工做量,對它進行管理,對它進行啓用或者禁止,並做爲一個獨立的實體測量工做量。
GridLink數據源與鏈接池關聯,鏈接池包含一組隱藏在數據服務後面的,鏈接到RAC實例的異構鏈接。當一個應用從數據源中請求一個鏈接,根據鏈接池收到的負載均衡信息和池中鏈接使用的分佈狀況,一個合適的鏈接從池中借用而且提供給應用。
經過GridLink數據源方式,簡化了Oracle RAC數據庫與WLS的結合應用,下降了使用Oracle RAC的配置與管理複雜度。要注意的是,對於RAC環境的多路數據源將會被繼續支持。將RAC多路數據源升級到GridLink數據源可以迅速實現,只需建立一個單獨的與多路數據源的JNDI名稱相同的GridLink數據源,這樣可以減小人工維護的配置數量。
快速鏈接故障轉移
快速鏈接故障轉移特性是經過通用鏈接池實現的快速應用通知(Fast Application Notification, FAN)的客戶端實現。該特性須要使用到一個Oracle JDBC驅動和Oracle RAC數據庫或者使用一個單實例的Oracle數據庫重啓。
WebLogic GridLink數據源已經在通用鏈接池與FCF進行了集成,並將FCF用於:
-
l 提供快速的失敗檢測
-
l 快速從鏈接池中終止和移除無效的鏈接
-
l 對計劃或者非計劃的Oracle RAC節點中斷進行優雅停機
-
l 適配拓撲結構的變化,好比節點的增長與移除
-
l 將運行時工做請求分佈到全部活動的Oracle RAC實例,包括哪些從新加入的集羣
Oracle RAC數據庫使用ONS廣播狀態變化的事件。GridLink數據源可以從註冊來接收從ONS發送的通知,所以可以快速感受到RAC數據庫中的任何狀態變化。使用這些狀態變化通知,GridLink數據源可以對鏈接池進行智能適配,以此在RAC數據庫發生變化時,還可以提供持續,可靠和高效訪問。
對RAC集羣狀態變化適合的響應容許WebLogic Server經過當即撤銷、關閉和丟棄與由於非計劃中斷被中止或者去掉Oracle實例的鏈接來處理中斷,而不須要按期的輪詢鏈接來確保他們有效,或者影響到讓然存在節點的無關鏈接。這種評估須要對鏈接進行測試,來保證沒有將死鏈接提供給應用而且快速將RAC節點失敗的死連接移除,在一些失敗的狀況下,這些失敗可能會掛起幾分鐘。
更進一步,它容許WebLogic Server在新的RAC實例被增長或者在中斷後重啓時,主動對鏈接進行從新分配。這就使WLS可以對RAC數據庫中的資源進行徹底的利用。此外,使用數據庫服務模型可以使數據庫管理員對RAC服務/實例的配置進行變動,經過影響WLS鏈接池,無需改變鏈接池的配置,就可以進行平滑的應用。它也不須要像多路數據源那樣建立複雜的準備,來表示RAC數據庫的專用實例。
WebLogic GridLink數據源提供快速鏈接故障轉移功能和對RAC數據庫服務與節點事件(啓,停)的響應來確保鏈接池中保存的物理鏈接都指向有效的數據庫節點,並確保這些保存的物理鏈接都很好的分佈在這些有效的數據庫節點上。快速鏈接故障轉移行爲是做爲GridLink數據源的一個配置。
快速鏈接故障轉移功能啓用,可以支持以下場景:
-
l 計劃內停機事件——計劃內中斷做爲數據庫維護或者其餘的活動,須要在一個已經肯定的時間點執行。當Oracle RAC服務可以進行優雅停機,那對於這些事件的支持就是有效的。在這類場景中,任何借用或者正在使用的鏈接都不會被中斷或者關閉,直到工做完成,對鏈接的控制返回給鏈接池爲止。這爲大型的異構客戶環境進行計劃中斷管理提供了一種很是有效的方式。
-
l 計劃外停機事件——對計劃外中斷的支持經過檢測和移除對Oracle RAC集羣的陳舊鏈接來實現。陳舊鏈接包括一位服務停機或者節點停機形成的對Oracle RAC集羣的任何節點都不在有效的鏈接服務。陳舊的借用的鏈接和有效的鏈接是可以探測的,他們的網絡鏈接在從鏈接池移除以前是可以提供服務的。這些移除的鏈接並不會被鏈接池取代。相反,應用必須在使用鏈接執行工做以前進行重試鏈接。
-
對於非計劃停機和計劃內停機的主要區別是如何處理借用的鏈接。陳舊的鏈接在鏈接池中是空閒的(不是借用的),在非計劃關機場景中,陳舊鏈接以一樣的方式被移除。
-
l 啓動事件——Oracle RAC實例從新加入和新增長實例場景——在一個Oracle RAC集羣增長實例,提供一個新的感興趣的服務使可以支持的。這個實例多是集羣中心的實例,或者多是從新啓動了一個已經停機的實例。在這兩種場景中,WebLogic的JDBC鏈接池識別新的實例並對節點建立必要的鏈接。
運行時鏈接負載均衡
WebLogic GridLink數據源和JDBC鏈接池利用Oracle RAC數據庫提供的負載均衡功能,提供更好的吞吐量和更高效的資源使用。運行時鏈接負載均衡須要使用Oracle JDBC驅動和Oracle RAC數據庫。
Oracle性能分析顯示,相對靜態的輪詢算法,使用運行時負載均衡有巨大的性能提高。即便RAC集羣中的節點經過硬件進行了均衡,而且集羣中的節點上的平均負載是複合預期的,合理並且均勻,那這種性能的提高也是很明顯的。負載的瞬時差別特性一般足夠使運行時鏈接負載均衡成爲RAC集羣的最佳負載均衡機制。
負載均衡公告服務發佈FAN事件,向客戶端通知集羣的當前狀態,包括建議哪裏可以直接進行鏈接。WebLogic Server鏈接池接收由數據庫發佈的負載均衡通告事件,以下圖所示將鏈接分佈到RAC的節點之上。
使用運行時負載均衡有以下好處:
-
l 針對高性能和高可擴展性的鏈接池管理
-
l 持續的接收工做量百分比的建議,來進行數據庫實例的路由
-
l 根據後臺節點的性能差別,好比CPU性能或者響應時間,進行工做量分佈的調整
-
l 對集羣配置,應用負載,節點過載或者掛起的等變化進行快速的響應
-
l 接收Oracle RAC負載均衡通告指標。與性能最好的實例的鏈接是最經常使用的。隨着時間的推移,會逐漸的遠離鏈接到性能不佳的實例的新的和不在使用的鏈接。當沒有達到分佈指標時,會隨機選擇鏈接。
鏈接關聯(Affinity)
WebLogic GridLink數據源利用Oracle RAC數據庫提供的關聯功能。鏈接關聯須要使用到Oracle JDBC驅動和11.1.0.6或更高版本的Oracle RAC數據庫。
鏈接關聯可以讓鏈接池選擇直接鏈接到一個特定Oracle RAC實例的鏈接,爲客戶端應用提供最好的性能。鏈接池使用運行時鏈接負載均衡來選擇一個Oracle RAC實例,建立第一個鏈接,而後會在相同的實例上建立帶有關聯的鏈接。
WebLogic GridLink數據源支持基於事務的關聯。
基於事務的關聯
基於事務的關聯是既可以被客戶端應用,也能被失敗事件釋放的與Oracle RAC實例的關聯。典型的,當須要一個長時間使用的與Oracle RAC實例的關聯,或者重定向到一個新的Oracle RAC實例的成本(性能方面)比較高的時候,應用系統使用這種類型的關聯。參與到分佈式事務中的WebLogic XA鏈接保持與Oracle RAC實例的關聯,用於對事務進行持久化。在這種狀況下,若是在分佈式事務當中,一個鏈接重定向到不一樣的Oracle RAC實例,應用系統可能會承擔比較高的系能成本。
關聯將基於全局事務ID創建,而不是獨立的數據源,以保證鏈接包括不一樣的數據源,這些數據源被配置到相同的RAC集羣,丙炔與相同的RAC實例關聯。LLR兩階段提交優化會被RAC數據源所支持,而且也參與到XA關聯當中。
http://wenku.baidu.com/view/f4425714866fb84ae45c8d3e.html
配置Oracle的RAC的數據源
當安裝完了Oracle的RAC後,個人Oracle就是一個雙機的集羣了,支持load banlance 和failover,可是數據源裏面的JDBC的URL須要一種不一樣的格式:
1)BEA的例子:http://www.bea.com.cn/support_pattern/Oracle_RAC_Pattern.html WLS JDBC URL 的配置以下:
jdbc:oracle:thin:@(description=(address_list= (address=(host=172.18.137.231) (protocol=tcp)(port=1521))(address=(host=172.18.137.230)(protocol=tcp) (port=1521)) (load_balance=yes)(failover=yes))(connect_data=(service_name= slrac.bea.com)))
2)IBM 的例子:http://publib.boulder.ibm.com/infocenter/wpdoc/v510/index.jsp?topic=/com.ibm.wp.ent.doc/wpf/plan_oracle_rac.html
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY_NODE_HOSTNAME)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=SECONDARY_NODE_HOSTNAME)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DATABASE_SERVICENAME)))
個人試驗的配置:
jdbc:oracle:thin:@(description=(address_list= (address=(host=p570_b) (protocol=tcp)(port=1521))(address=(host=p570_a)(protocol=tcp) (port=1521)) (load_balance=yes)(failover=yes))(connect_data=(service_name= orcl)))
我一開始使用的是IP地址,但發現使用IP後,第一下測試鏈接成功,第二下失敗,第三下成功,第四下失敗,就是這個規律,緣由是RAC本身就有負載均衡的功能(load banlance),它會自動的分配負載(workload),而第二次的請求聽說返回的不是IP,因此在個人IP的列表裏面沒有,天然找不到(這是另外一個工程師解釋給個人,不過我不太相信,由於BEA的文檔中使用的就是IP,但我又不知道爲何)。
後來遵從那個工程師建議改爲主機名後,一切OK,但若是改主機名須要更改Windows下的WINNT/system32/drivers/etc/hosts文件,將主機名和IP對應起來。
個人RAC的數據源的配置就OK了,51後還要作DB2的雙機互備的集羣,還不知道該怎麼作,DataSource的JDBC的URL怎麼配置呢,不知道是否是和這個同樣呢?
TNS的配置: 你的TNS的名字= (DESCRIPTION = (ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = p570a)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = p570b)(PORT = 1521)) )
(load_blance=yes) (CONNECT_DATA = (SERVICE_NAME = orcl) (failover_mode= (type=select) (method=basic)) ) )
後臺是Oracle的RAC數據庫,他配置了一個多池,有2個Pool,PoolA主要連RAC的A實例,PoolB主要連RAC的B實例.其實他的PoolA和PoolB都是用了RAC格式的JDBC的寫法,後面是一個主機列表,PoolA將A實例的IP寫在了前面,PoolB將B實例的IP寫在了前面,JDBC的算法是failover=yes load_banlance=no,這樣每個Pool將請求都發送到本身的第一個host的Oracle的實例上,在第一個host的Oracle實例出現故障時候切換到另一個host的Oracle實例上. PoolA和PoolB的JDBC的寫法以下,注意failover=yes和load_banlance=yes,這樣寫的做用是當請求來的時候都轉發給第一個host,只有出現第一個host有問題,纔會將請求發送到第二個host: WLS JDBC URL 的配置以下:
jdbc:oracle:thin:@(description=(address_list= (address=(host=172.18.137.231) (protocol=tcp)(port=1521))(address=(host=172.18.137.230)(protocol=tcp) (port=1521)) (load_balance=yes)(failover=yes))(connect_data=(service_name= slrac.bea.com))) 配置的多池的算法若是是High Availability的話,那麼壓力將始終壓到一個Pool上面,另一個Pool處於stand-by的狀態,除非處理請求的Pool出現故障.客戶的監控狀況也是如此,發現壓力都壓在了一個Oracle的實例上. 若是多池的算法是Load Banlance的話,那麼壓力將平均分配到2個Pool上面.若是想使用多池的high availability的算法,則不要設置test的重試次數,若是設置了,則會出錯拋出異常. 爲了能使被標記爲disable的PoolA可以恢復正常的鏈接,則須要設置HealthCheckFrequencySeconds的值在 config.xml裏面,該值在console上面沒有. 另外還要可以使用TestConnectionsOnReserve. 多池就是在JDBC的鏈接池上層又加了一層請求分流的算法層.