文章詳情頁
關于Oracle數據庫中快照的使用方法
瀏覽:93日期:2023-11-13 11:34:15
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$$ 字段。
排行榜