首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 2.0 實作 Oracle 資料庫快取相依策略

     編輯:關於ASP.NET

背景與挑戰

ASP.NET 2.0 內建的 SqlCacheDependency 僅支援 SQL Server,使用 Oracle 的開發者若想享受資料變更自動使快取失效的便利,需另闢蹊徑。本文示範如何結合「檔案相依性」與「Oracle 觸發器」,輕鬆實作相依於 Oracle 資料表的頁面輸出快取。

核心概念

  • 檔案相依性: ASP.NET 可讓快取相依於實體檔案,檔案內容一變更,快取即失效。
  • Oracle 觸發器: 當目標資料表發生 INSERT/UPDATE/DELETE 時,觸發器執行 PL/SQL 區塊,修改該實體檔案的內容(如寫入時間戳)。
  • 串聯機制: 資料異動 → 觸發器更新檔案 → ASP.NET 偵測檔案變更 → 快取失效 → 下一請求重新產生頁面。

實作步驟

1. 設定頁面快取相依於文字檔

protected void Page_Load(object sender, EventArgs e)
{
    Label1.Text = "CacheByOracleDependency: " + DateTime.Now.ToString();

    string filePath = Server.MapPath("TextFile.txt");
    Response.AddFileDependency(filePath);           // 建立檔案相依性

    Response.Cache.SetExpires(DateTime.Now.AddSeconds(120)); // 120 秒過期
    Response.Cache.SetCacheability(HttpCacheability.Public);
    Response.Cache.SetValidUntilExpires(true);
}

並在專案根目錄建立 TextFile.txt(內容可為空)。

2. 設定 Oracle UTL_FILE 目錄權限

讓資料庫能讀寫作業系統檔案,有兩種方式:

  • 修改 INIT.ORA: 加入 utl_file_dir='E:\CSharp\CacheByOracleDependncy' 並重啟資料庫。
  • 建立 Directory 物件(建議,9i 以上):
    CREATE OR REPLACE DIRECTORY FILEPATH AS 'E:\CSharp\CacheByOracleDependncy';
    GRANT READ, WRITE ON DIRECTORY FILEPATH TO PUBLIC;
    

3. 建立觸發器修改快取相依檔案

CREATE OR REPLACE TRIGGER trg_dept_cache_sync
AFTER INSERT OR UPDATE OR DELETE ON SCOTT.DEPT
FOR EACH ROW
DECLARE
    fHandle UTL_FILE.FILE_TYPE;
BEGIN
    fHandle := UTL_FILE.FOPEN('FILEPATH', 'TextFile.txt', 'W');
    UTL_FILE.PUT_LINE(fHandle, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS'));
    UTL_FILE.FCLOSE(fHandle);
EXCEPTION
    WHEN OTHERS THEN
        IF UTL_FILE.IS_OPEN(fHandle) THEN UTL_FILE.FCLOSE(fHandle); END IF;
END;

運作驗證

  1. 首次瀏覽頁面,記下顯示的時間。
  2. 在 120 秒內直接重新整理,時間不變(命中快取)。
  3. 對 SCOTT.DEPT 執行任意 DML 操作。
  4. 再次重新整理,時間更新(快取已失效,頁面重新產生)。

注意事項

  • 觸發器執行權限需包含 UTL_FILE 套件的執行權限。
  • 檔案路徑在 Web 伺服器與資料庫伺服器若非同機,需使用共享網路路徑並確保雙方皆有讀寫權限。
  • 大量寫入時,頻繁觸發檔案 I/O 可能影響效能,可考慮批次更新或改用資料庫通知機制(Oracle 11g+ DBMS_CHANGE_NOTIFICATION)。

結語

透過「檔案相依性 + 觸發器修改檔案」的巧妙組合,ASP.NET 2.0 也能輕鬆支援 Oracle 資料庫的快取同步,無需第三方元件,架構簡潔且好維護。

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