ASP.NET 2.0實現依賴Oracle的緩衝策略

來源:互聯網
上載者:User
asp.net|oracle|策略|緩衝   ASP.NET 2.0中的緩衝提供了對SQL依賴項的支援,也就是說當SQL SERVER資料庫中的表或行中的資料被更改後,緩衝中的頁面就失效,否則,頁面輸出可一直保留在緩衝當中。這確實為程式員提供了方便。但微軟一向很小家子氣,只為使用自家產品SQL SERVER的程式員提供了方便,那些用Oracle資料庫的ASP.NET程式員怎麼辦呢?

  其實不用著急,因為ASP.NET 2.0中的緩衝還提供了對檔案依賴項的支援,也就是緩衝依賴於某個檔案,該檔案被修改後,緩衝中的頁面就失效。只要巧妙利用ASP.NET 2.0的檔案依賴項緩衝策略和Oracle中的觸發器,就可輕鬆實現依賴Oracle的緩衝策略。思路很簡單,先將頁面的緩衝原則設定為依賴某一個檔案,再為Oracle中需要依賴的表添加一個觸發器,當表中的資料被更改時,修改緩衝所依賴的檔案中的內容。

  下面以一個小例子來具體說明:

  實驗目的:Default.aspx頁面的緩衝依賴於Oracle資料庫中SCOTT使用者的DEPT表,該表中資料被更改後,緩衝中的頁面失效。緩衝的到期時間為120秒。

   一、設定網站頁面的緩衝依賴於檔案TextFile.txt

  1、開啟Visual Studio 2005,在E:\CSharp\CacheByOracleDependncy目錄下建立一個WEB項目,在其Default.aspx頁面上添加一個Label控制項,顯示頁面產生的時間,以判斷重新整理時頁面是否為重建的,並設定頁面緩衝依賴於檔案E:\CSharp\CacheByOracleDependncy\TextFile.txt。

protected void Page_Load(object sender, EventArgs e)
{
 //顯示目前時間,以便判斷是否為緩衝中頁面
 this.Label1.Text = "CacheByOracleDependency:" + DateTime.Now.ToString();
 //緩衝依賴於檔案TextFile.txt
 string fileDependencyPath = Server.MapPath("TextFile.txt");
 Response.AddFileDependency(fileDependencyPath);
 // 設定緩衝的到期時間為120秒。
 Response.Cache.SetExpires(DateTime.Now.AddSeconds(120));
 Response.Cache.SetCacheability(HttpCacheability.Public);
 Response.Cache.SetValidUntilExpires(true);
}
  2、在E:\CSharp\CacheByOracleDependncy目錄下建立一個TextFile.txt檔案。

   二、在Oracle資料庫中建立觸發器

  1、觸發器被觸發時執行PL/SQL代碼塊。PL/SQL代碼塊直接讀寫作業系統中的檔案,需調用內建的utl_file程式包。這需要先修改Oracle的初始化參數檔案INIT.ORA,在其中添加參數utl_file_dir,來指定檔案的目錄。修改INIT.ORA檔案後,需重啟Oracle資料庫,設定的參數才會生效。

  在INIT.ORA檔案中添加下面一行內容:

  utl_file_dir='E:\CSharp\CacheByOracleDependncy'

  也可以設定為utl_file_dir=*,不指定具體目錄,即任何目錄都可以。

  如果是Oracle 9i資料庫,還有一種方法也能起到同樣的作用:在sys使用者下建立一個directory目錄(實際上是在sys使用者下的dir$表中增加一個對應的OS_PATH),然後將對該directory對象的讀/寫操作的許可權grant給public。

  create or replace directory FILEPATH as 'E:\CSharp\CacheByOracleDependncy';

  grant read on directory FILEPATH to public;

  這裡我使用的是第二種方法。

  2、為所依賴的表(SCOTT使用者的DEPT表)建立一個觸發器:當DEPT表中的資料更改後,觸發器就會將當前系統時間寫入TextFile.txt檔案中。

CREATE OR REPLACE TRIGGER
"SCOTT"."TEST_CACHE_BY_ORACLE_DEPENDNCY" AFTER
INSERT
OR UPDATE
OR DELETE OF "DEPTNO", "DNAME", "LOC" ON "SCOTT"."DEPT" DECLARE
file_handle utl_file.file_type;
BEGIN
--開啟檔案
file_handle := utl_file.fopen('FILEPATH','TextFile.txt','w');
--將當前系統時間寫入檔案
IF utl_file.is_open(file_handle) THEN
 utl_file.put_line(file_handle,to_char(SYSDATE,'yyyy-mm-dd hh24:mi:ss'));
END IF;
--關閉檔案
utl_file.fclose(file_handle);
EXCEPTION
WHEN OTHERS THEN
BEGIN
 IF utl_file.is_open(file_handle) THEN
  utl_file.fclose(file_handle);
 END IF;
EXCEPTION
 WHEN OTHERS THEN
  NULL;
 END;
END;
   三、測試

  前面兩步完成後,依賴Oracle的緩衝策略就設定好了。只要DEPT表中的資料更改後,觸發器就會修改TextFile.txt檔案中的內容,TextFile.txt檔案一被修改,緩衝中的頁面就自動失效了,再次訪問頁面時,請求就會發給伺服器,來重建頁面。

  在Visual Studio 2005中偵錯工具,不斷重新整理開啟的Default.aspx頁面,頁面顯示的時間每隔120秒,才會發生變化一次。這是因為設定的緩衝到期時間為120秒。這時,只要我們手工修改SCOTT使用者的DEPT表中的資料後,再次重新整理頁面時,頁面上顯示的時間馬上就會發生變化。這說明我們設定的依賴Oracle的緩衝策略成功了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.