首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 10g R2 新功能:資料庫變更通知在 ODP.NET 中的應用

     編輯:Oracle 資料庫基礎

背景動機

應用常用 Data Cache 提升效能,但快取與資料庫資料易不一致。傳統做法:使用者手動刷新或定時輪詢,皆有延遲或遺漏風險。Oracle 10g R2 引入 Database Change Notification (DCN),資料異動時主動推送通知,徹底解決快取同步難題。

DCN 運作三步驟

  1. 註冊:指定要監聽的查詢,ODP.NET 自動註冊事件。支援 DML、DDL、Global 事件(如關機)
  2. 通知:資料異動時資料庫自動發送通知
  3. 回應:應用收到通知自動刷新快取或提示使用者

ODP.NET 範例程式

using System;
using System.Data;
using System.Threading;
using Oracle.DataAccess.Client;

class Program {
  static bool notificationReceived = false;

  static void Main() {
    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";
    using (OracleConnection con = new OracleConnection(constr)) {
      con.Open();
      using (OracleCommand cmd = new OracleCommand(sql, con)) {
        OracleDependency dep = new OracleDependency(cmd);
        dep.OnChange += OnDatabaseNotification;
        cmd.ExecuteNonQuery();
        while (!notificationReceived) {
          Console.WriteLine("Waiting for notification...");
          Thread.Sleep(2000);
        }
      }
    }
    Console.WriteLine("Press ENTER to exit...");
    Console.ReadLine();
  }

  static void OnDatabaseNotification(object src, OracleNotificationEventArgs args) {
    Console.WriteLine("Database Change Notification received!");
    DataTable dt = args.Details;
    Console.WriteLine("Resource {0} has changed.", dt.Rows[0]["ResourceName"]);
    notificationReceived = true;
  }
}

權限與環境準備

  • 授權:GRANT CHANGE NOTIFICATION TO HR;
  • 安裝 ODP.NET,專案引用 Oracle.DataAccess.dll
  • 程式頂端加入 using System.Threading; using System.Data; using Oracle.DataAccess.Client;

驗證流程

  1. 執行程式,主控台顯示 Waiting for notification...
  2. 另開 SQL*Plus 執行 UPDATE EMPLOYEES SET SALARY=SALARY+10 WHERE EMPLOYEE_ID=149; COMMIT;
  3. 程式立即收到通知,輸出 Database Change Notification received! Resource HR.EMPLOYEES has changed.

優勢總結

DCN 讓快取同步即時、被動式輪詢成為歷史,極大提升應用資料一致性與使用者體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved