Oracle Database 11g中引入了一個叫做TAF(Transparent Application Failover)的新特性。TAF可以讓應用程序在數據庫出現故障的情況下無感知地轉移到備份數據庫上,達到提高可用性和可靠性的目的。
TAF可以在不中斷業務的同時自動將客戶端連接轉移到備份數據庫。比如,當系統檢測到主數據庫出現故障的時候,自動將客戶端驅動程序轉移到備份數據庫。這種自動切換過程對于應用程序完全透明。TAF的使用需要在客戶端驅動程序和數據庫端開啟,同時在客戶端設置一些連接屬性。
下面是一個通過JDBC驅動程序啟用TAF的示例:
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=primary)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=standby)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=180)(DELAY=5))))", "scott", "tiger");
在這個示例中,我們使用服務器名和端口號來連接主庫和備庫。在連接URL尾部,還需要添加連接屬性,指定TAF的選項和參數。FAILOVER_MODE指定了TAF的模式,TYPE=SELECT表示通過查詢語句檢測故障,METHOD=BASIC表示使用最基本的TAF配置(換成ADVANCED則表示使用更為復雜的TAF配置),RETRIES和DELAY分別指定了重試次數和失敗重試間隔。
如果主庫出現故障,客戶端會自動切換到備庫,繼續執行剩余的SQL語句。在這個過程中,客戶端將不會察覺到任何中斷。而對于數據庫管理員來說,我們可以通過查看系統日志進行故障排查。如果只是簡單的TNS故障可以通過Oracle Net Services自動切換。如果是Oracle服務器本身故障,可能需要手動切換。
TAF的另外一個用途是在運行中的Oracle實例的故障時自動切換到可用的實例。假設我們有一組RAC節點作為Oracle集群,通過TAF,我們可以自動將客戶端連接轉移到其他可用節點上,繼續執行剩下的SQL語句,從而避免業務中斷。
總體而言,TAF的作用對于提高應用程序的可用性和可靠性來說非常重要。但是,需要注意的是,使用TAF會帶來一些性能開銷,因此需要根據具體情況進行權衡。同時,使用TAF需要對應用程序進行一些改動,調整連接屬性等等,因此需要更多的工作。