Oracle 10g Release2新功能之變化通知(轉)
引言
在.NET應用程式中,我們有很多方法實現對Oracle資料庫的訪問。 但是從功能和效能上來分析,Oracle Data Provider for .NET(ODP.NET)無疑是我們最好的選擇,它是Oracle專門為基於.NET的應用程式設計的一套介面,它的訪問速度要遠遠快於其它方法。
本文將介紹Oracle Database的新功能之一:Change Notification。為了能更好的說明這個新功能,我將用例程的方式來介紹它的定義和使用方法。
Database Change Notification的產生背景
在現在的程式開發過程中,我們經常考慮的一個提高效能的方法就是用data cache。Data cache 避免了我們每次需要資料的時候都去訪問資料庫,這樣節省了大量的時間。但是這樣就出現了一個問題,當我們用data cache的時候,如果在資料庫中的資料發生了改變,那麼我們data cache 中的資料就和資料庫的資料不一致了,這樣將會導致錯誤。為了解決這個問題,我們一般常用兩種方法。
1. 讓使用者手動的更新data cache的內容,例如提供一個更新按鈕。
2. 讓我們的程式間隔一定的時間自動去更新data cache的內容。
不難看出,這兩種方法都有相當的侷限性。
第一種方法使用者必須記住經常的去更新資料,如果資料庫中的資料改了但是使用者並沒有去更新資料,這樣將導致錯誤。第二種方法的侷限性是我們沒有辦法設定一個恰好的時間間隔使資料庫資料變化的時候保證data cache的資料也發生變化。
Database Change Notification就是為了解決這個難題。
Database Change Notification 的基本概念
Database Change Notification的作用就是當資料庫中的資料發生變化的時候,自動發出一個通知。
用Database Change Notification有三個步驟:
1. 註冊: 指定資料庫要監聽的查詢。ODP.NET自動註冊基於這個查詢的監聽事件。資料庫可以監聽DML(Data Manipulation Language)事件,DDL(Data Definition Language)事件,和global 事件(例如關閉資料庫)。
2. 通知:一旦資料庫中的資料發生變化,資料庫將自動發出通知,我們要在我們的程式中定義事件處理操作。
3. 響應:在我們的程式中,一旦收到通知,我們一般情況下會自動更新data cache,當然我們可以通知使用者資料發生改變,由他來決定是否進行更新。
舉例:
在ODP.NET中使用Database Change Notification很簡單,請看下面的例程。這個例程用HR資料庫使用者。
static void Main(string[] args){ string sql = "select first_name, last_name, salary from employees where employee_id = 149"; string constr = "User Id=hr;Password=hr;Data Source=oramag;Pooling=false"; OracleConnection con = new OracleConnection(constr); con.Open(); OracleCommand cmd = new OracleCommand(sql, con); OracleDependency dep = new OracleDependency(cmd); dep.OnChange += new OnChangeEventHandler(OnDatabaseNotification); cmd.ExecuteNonQuery(); while (notificationReceived == false) { Console.WriteLine("Waiting for notification..."); System.Threading.Thread.Sleep(2000); } cmd.Dispose(); con.Dispose(); Console.WriteLine("Press ENTER to continue..."); Console.ReadLine();}public static void OnDatabaseNotification(object src, OracleNotificationEventArgs args){ Console.WriteLine("Database Change Notification received!"); DataTable changeDetails = args.Details; Console.WriteLine("Resource {0} has changed.", changeDetails.Rows[0]["ResourceName"]); notificationReceived = true;}
HR一定要有change notification 許可權,我們用下面的命令。
grant change notification to hr;
在你的電腦上安裝ODP.NET,新增下面的using statement在你的程式碼剛開始的地方。
using System.Threading;using System.Data;using Oracle.DataAccess.Client;
現在你就可以執行這段例程了。輸出如下:
Waiting for notification...
這個時候去修改你的資料庫,例如用下面的命令,
update employees set salary = salary+10where employee_id = 149;commit;
可以看到有如下的輸出,
Database Change Notification received!Resource HR.EMPLOYEES has changed.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-954129/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 10g NLS 環境變數設定/和以前版本有變化Oracle 10g變數
- Android 8.0 Oreo 之推送通知的變化 | 中文教學視訊Android
- Android 8.0 Oreo 推送通知的變化Android
- Oracle11gr2之orapwd變化Oracle
- oracle 10g r2新功能可以跨越resetlogs 恢復Oracle 10g
- oracle 10G特性之awrOracle 10g
- oracle 10g 之RAC 搭建Oracle 10g
- Scheduler in Oracle Database 10g(轉)OracleDatabase
- Oracle效能最佳化之SQL最佳化(轉)OracleSQL
- 【轉】ORACLE 10G AWR 相關Oracle 10g
- Oracle 10g 新特性之虛擬專用資料庫(轉)Oracle 10g資料庫
- 隨著變化而變化(Observer) (轉)Server
- Oracle效能最佳化之LockContention(轉)Oracle
- “=》”關聯運算子在Oracle 10g和11g的變化差異Oracle 10g
- 期待已久的Windows 11新功能有哪些特殊變化?Windows
- Oracle效能最佳化之應用最佳化(轉)Oracle
- ORACLE 12C 之叢集日誌位置變化Oracle
- Android通知之狀態列通知Android
- 10g初始化引數AUDIT_TRAIL變化(二)AI
- 10g初始化引數AUDIT_TRAIL變化(一)AI
- oracle 10g rac轉成單機Oracle 10g
- ORACLE 10G 等待介面診斷(轉)Oracle 10g
- Oracle 10g AWR Report 分析(轉)Oracle 10g
- Oracle 10g, Export problem through OEM(轉)Oracle 10gExport
- “=》”關聯操作符在Oracle 10g和11g的變化差異Oracle 10g
- Oracle效能最佳化之Rollback(undo)Segment最佳化(轉)Oracle
- 【效能優化】Oracle 10g 資料庫之間複製統計資訊優化Oracle 10g資料庫
- 中文視訊首發 | Android 8.0 Oreo 推送通知的變化Android
- Oracle 10g SGA 的自動化管理Oracle 10g
- Oracle 10g RAC之配置時間同步Oracle 10g
- oracle 10g和11g下 CDC機制(change data capture) 變化資料捕捉Oracle 10gAPT
- [轉載]Oracle 10g RAC TAF介紹Oracle 10g
- oracle 10g rac轉成單機5Oracle 10g
- oracle 10g rac轉成單機4Oracle 10g
- oracle 10g rac轉成單機3Oracle 10g
- oracle 10g rac轉成單機2Oracle 10g
- Oracle 10G 中的"回收站"(轉)Oracle 10g
- 【轉載】Oracle 10g 配置isqlplusOracle 10gSQL