Oracle 快照本質上是一張儲存查詢結果的表,它可以針對本地或遠端資料庫的一或多張表/視圖進行查詢並保存結果。由於快照是主表數據的子集,合理使用可顯著加快查詢速度;透過定時刷新機制,還能在異構資料庫間高效同步數據。
系統需從 RS6000 小型機(用戶 sffw)的動態欠費表 yh_qfcx 同步數據到催繳伺服器(用戶 dmtcx)。為提升查詢效能,在 dmtcx 下建立快照 S_yh_qfcx。
CREATE SNAPSHOT LOG ON yh_qfcx;
只有建立日誌,才能支援「快速刷新」,僅傳輸變更數據,大幅降低網路開銷。
CREATE DATABASE LINK link_sf
CONNECT TO sffw IDENTIFIED BY password USING 'rs6000';
連結名 link_sf 讓目標端能訪問源端表。
CREATE SNAPSHOT s_yh_qfcx AS
SELECT yhh, qf6+qf5+qf4+qf3+qf2+qf1+qf AS qfje
FROM yh_qfcx@link_sf
WHERE tjbz='K' AND bz6+bz5+bz4+bz3+bz2+bz1+bz > 0;
此處僅抽取催繳所需欄位並計算總欠費,縮減數據量。
提供兩種刷新模式,視業務需求二選一:
ALTER SNAPSHOT s_yh_qfcx REFRESH FAST
START WITH SYSDATE + 1/1440 NEXT SYSDATE + 1/144;
含義:1 分鐘後首次刷新,之後每 10 分鐘刷新一次。
ALTER SNAPSHOT s_yh_qfcx REFRESH COMPLETE
START WITH SYSDATE + 1/2880 NEXT SYSDATE + 1;
含義:30 秒後首次刷新,之後每天刷新一次。
快照刷新由 Oracle 背景進程自動執行,必須確保參數 snapshot_refresh_processes 設為 1。
SELECT value FROM v$system_parameter WHERE name='snapshot_refresh_processes';initorcl.ora:snapshot_refresh_processes=1建立快照時,Oracle 自動創建以下物件(以 s_yh_qfcx 為例):
SNAP$_S_YH_QFCXMVIEW$_S_YH_QFCX、S_YH_QFCXI_SNAP$_S_YH_QFCX(基於 M_ROW$$ 欄位)理解這些物件有助於排查效能問題與空間管理。
快照是異構環境下數據同步與查詢加速的利器。核心在於:建立日誌支援快速刷新、設計合理的刷新頻率、確保刷新進程啟動。實戰中配合 WHERE 條件裁剪數據,能最大化效能收益。