我的java天地

          Oracle數據庫中快照的使用

           oracle數據庫的快照是一個表,它包含有對一個本地或遠程數據庫上一個或多個表或視圖的查詢的結果。正因為快照是一個主表的查詢子集,使用快照可以加快數據的查詢速度;在保持不同數據庫中的兩個表的同步中,利用快照刷新,數據的更新性能也會有很大的改善。

            下面以我在開發襄樊市電信局170話費催繳系統中使用快照加快查詢速度的實現過程為例來說明快照的使用方法:

            170話費催繳系統是一個向用戶電話播放催繳話費提示音的系統。用戶的欠費金額存放在rs6000小型機sffw用戶下的表yh_qfcx中 (yh_qfcx表是一個隨用戶繳費情況動態變化的欠費記錄表),而催繳系統的數據按要求存放在另外一臺xf170服務器dmtcx用戶下,為在 dmtcx用戶下使用sffw用戶下表yh_qfcx中的部分數據,我在dmtcx用戶下建立了yh_qfcx的快照S_yh_qfcx,以加快查詢速度。

            具體步驟如下:

            一、在sffw用戶下建立表yh_qfcx的快照日志;

            只有先建立表yh_qfcx的快照日志,才能在快照中執行快速刷新。

            Create snapshot log on yh_qfcx;

            二、在dmtcx用戶下建立到sffw用戶的數據庫鏈link_sf;

            建立了到sffw用戶的數據庫鏈后才能從sffw用戶下的表yh_qfcx中獲取數據。

            Create database link link_sf

            Connect to sffw identified by xxxxxxx using 'rs6000';

            三、在dmtcx用戶下建立快照s_yh_qfcx;

            Create snapshot s_yh_qfcx as

            Select yhh,qf6+qf5+qf4+qf3+qf2+qf1+qf qfje

            From yh_qfcx@link_sf

            Where tjbz='K' and bz6+bz5+bz4+bz3+bz2+bz1+bz>0;

            四、根據需要修改快照刷新的間隔時間;

            dmtcx用戶下的快照s_yh_qfcx為了與sffw用戶下的主表yh_qfcx保持同步,需要不斷刷新快照。只有設定了快照的刷新間隔時間,oracle才會自動刷新該快照。

            快照的刷新有兩種方式:快速刷新和完全刷新。快速刷新需要快照的主表先有快照日志存在;完全刷新時oracle執行快照查詢,將結果放入快照。快速刷新比完全刷新快,因為快速刷新將主數據庫的數據經網絡發送到快照的數據少,僅需傳送主表中修改過的數據,而完全刷新要傳送快照查詢的全部結果。

            Alter snapshot s_yh_qfcx refresh fast

            Start with sysdate+1/1440 next sysdate+1/144;

            {此SQL語句的意思為:設定oracle自動在1分鐘

            (1/24*60)后進行第一次快速刷新,以后每隔10分鐘

            (10/24*60)快速刷新一次。}

            Alter snapshot s_yh_qfcx refresh complete

            Start with sysdate+1/2880 next sysdate+1;

            {此SQL語句的意思為:設定oracle自動在30鈔

            (30/24*60*60)后進行第一次完全刷新,

            以后每隔1天完全刷新一次。}

            說明:

            1、因為快照刷新是服務器自動完成的,所以要保證oracle數據庫啟動了快照刷新進程。查看oracle數據庫是否啟動了快照刷新進程,可以以數據庫sys身份查看視圖V_$SYSTEM_PARAMETER中的參數snapshot_refresh_processes的值是否為1,如果不為1,則快照刷新進程未啟動。

            2、啟動快照刷新進程的方法為:修改oracle數據庫的初始化文件initorcl.ora,將其中的snapshot_refresh_processes參數的值改由0改為1,然后重新啟動oracle數據即可。

            3、需要說明的是:建立快照日志時oracle數據庫為我們建立了一個基于yh_qfcx的觸發器tlog$_yh_qfcx和快照日志表mlog$_yh_qfcx;建立快照時oracle數據庫為我們建立了一個表、兩個視圖、一個索引,它們分別為:

            一個表:snap$_s_yh_qfcx;

            兩個視圖:mview$_s_yh_qfcx和s_yh_qfcx;

            一個索引:I_snap$_s_yh_qfcx(

            基于表snap$_s_yh_qfcx中的m_row$$字段。

          posted on 2009-04-09 21:26 tobyxiong 閱讀(193) 評論(0)  編輯  收藏 所屬分類: DATABASES

          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          導航

          統計

          常用鏈接

          留言簿(3)

          隨筆分類(144)

          隨筆檔案(157)

          相冊

          最新隨筆

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 石屏县| 广灵县| 江津市| 木兰县| 武穴市| 永清县| 永福县| 庆阳市| 临海市| 卫辉市| 龙山县| 富顺县| 西林县| 凌云县| 武平县| 如东县| 唐山市| 阳朔县| 扬州市| 成安县| 万源市| 河南省| 巴里| 南京市| 如皋市| 崇文区| 贵定县| 高碑店市| 东乡族自治县| 抚宁县| 顺昌县| 安宁市| 玉屏| 通榆县| 客服| 陈巴尔虎旗| 富顺县| 雷州市| 和平县| 中方县| 安化县|