文章詳情頁
關(guān)于Oracle數(shù)據(jù)庫中快照的使用方法
瀏覽:132日期:2023-11-13 11:34:15
Oracle 數(shù)據(jù)庫的快照是一個表,它包含有對一個本地或遠程數(shù)據(jù)庫上一個或多個表或視圖的查詢的結(jié)果。正因為快照是一個主表的查詢子集,使用快照可以加快數(shù)據(jù)的查詢速度;在保持不同數(shù)據(jù)庫中的兩個表的同步中,利用快照刷新,數(shù)據(jù)的更新性能也會有很大的改善。 下面以我在開發(fā)襄樊市電信局 170 話費催繳系統(tǒng)中使用快照加快查詢速度的實現(xiàn)過程為例來說明快照的使用方法: 170 話費催繳系統(tǒng)是一個向用戶電話播放催繳話費提示音的系統(tǒng)。用戶的欠費金額存放在 rs6000 小型機 sffw 用戶下的表 yh_qfcx 中( yh_qfcx 表是一個隨用戶繳費情況動態(tài)變化的欠費記錄表),而催繳系統(tǒng)的數(shù)據(jù)按要求存放在另外一臺 xf170 服務(wù)器 dmtcx 用戶下,為在 dmtcx 用戶下使用 sffw 用戶下表 yh_qfcx 中的部分數(shù)據(jù),我在 dmtcx 用戶下建立了 yh_qfcx 的快照 S_yh_qfcx ,以加快查詢速度。 具體步驟如下: 一、在 sffw 用戶下建立表 yh_qfcx 的快照日志; 只有先建立表 yh_qfcx 的快照日志,才能在快照中執(zhí)行快速刷新。 Create snapshot log on yh_qfcx; 二、在 dmtcx 用戶下建立到 sffw 用戶的數(shù)據(jù)庫鏈 link_sf ; 建立了到 sffw 用戶的數(shù)據(jù)庫鏈后才能從 sffw 用戶下的表 yh_qfcx 中獲取數(shù)據(jù)。 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;四、根據(jù)需要修改快照刷新的間隔時間; dmtcx 用戶下的快照 s_yh_qfcx 為了與 sffw 用戶下的主表 yh_qfcx 保持同步,需要不斷刷新快照。只有設(shè)定了快照的刷新間隔時間, oracle 才會自動刷新該快照。 快照的刷新有兩種方式:快速刷新和完全刷新。快速刷新需要快照的主表先有快照日志存在;完全刷新時 oracle 執(zhí)行快照查詢,將結(jié)果放入快照。快速刷新比完全刷新快,因為快速刷新將主數(shù)據(jù)庫的數(shù)據(jù)經(jīng)網(wǎng)絡(luò)發(fā)送到快照的數(shù)據(jù)少,僅需傳送主表中修改過的數(shù)據(jù),而完全刷新要傳送快照查詢的全部結(jié)果。 Alter snapshot s_yh_qfcx refresh fast Start with sysdate+1/1440 next sysdate+1/144; { 此 SQL 語句的意思為:設(shè)定 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 語句的意思為:設(shè)定 oracle 自動在 30 鈔 (30/24*60*60) 后進行第一次完全刷新, 以后每隔 1 天完全刷新一次。 }說明: 1 、因為快照刷新是服務(wù)器自動完成的,所以要保證 oracle 數(shù)據(jù)庫啟動了快照刷新進程。查看 oracle 數(shù)據(jù)庫是否啟動了快照刷新進程,可以以數(shù)據(jù)庫 sys 身份查看視圖 V_$SYSTEM_PARAMETER 中的參數(shù) snapshot_refresh_processes 的值是否為 1 ,假如不為 1 ,則快照刷新進程未啟動。 2 、啟動快照刷新進程的方法為:修改 oracle 數(shù)據(jù)庫的初始化文件 initorcl.ora ,將其中的 snapshot_refresh_processes 參數(shù)的值改由 0 改為 1 ,然后重新啟動 oracle 數(shù)據(jù)即可。 3 、需要說明的是:建立快照日志時 oracle 數(shù)據(jù)庫為我們建立了一個基于 yh_qfcx 的觸發(fā)器 tlog$_yh_qfcx 和快照日志表 mlog$_yh_qfcx; 建立快照時 oracle 數(shù)據(jù)庫為我們建立了一個表、兩個視圖、一個索引,它們分別為: 一個表: snap$_s_yh_qfcx; 兩個視圖: mview$_s_yh_qfcx 和 s_yh_qfcx; 一個索引: I_snap$_s_yh_qfcx 基于表 snap$_s_yh_qfcx 中的 m_row$$ 字段。
標簽:
Oracle
數(shù)據(jù)庫
排行榜
