架構:
• 來源:RS6000 小型機,Schema `SFFW`,表 `YH_QFCX` (動態欠費記錄)。
• 目標:XF170 伺服器,Schema `DMTCX`,快照 `S_YH_QFCX`。
• 需求:目標端高效查詢欠費用戶播放語音提醒。
CONNECT sffw/password@RS6000
CREATE SNAPSHOT LOG ON YH_QFCX;
-- 產生:觸發器 TLOG$_YH_QFCX、日誌表 MLOG$_YH_QFCX
CONNECT dmtcx/password@XF170
CREATE DATABASE LINK LINK_SF
CONNECT TO sffw IDENTIFIED BY password
USING 'RS6000'; -- TNS 服務名
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; -- 有欠費標記
Oracle 自動建立:基表 `SNAP$_S_YH_QFCX`、視圖 `MVIEW$_S_YH_QFCX`/`S_YH_QFCX`、索引 `I_SNAP$_S_YH_QFCX` (於 `M_ROW$$`)。
-- 快速刷新:每 10 分鐘 (傳輸增量變更)
ALTER SNAPSHOT S_YH_QFCX REFRESH FAST
START WITH SYSDATE + 1/1440 -- 1 分鐘後首次
NEXT SYSDATE + 1/144; -- 之後每 10 分鐘 (1/144 天)
-- 完全刷新:每日一次 (修正潛在不一致)
ALTER SNAPSHOT S_YH_QFCX REFRESH COMPLETE
START WITH SYSDATE + 1/2880 -- 30 秒後首次
NEXT SYSDATE + 1; -- 之後每天
刷新由背景進程 `SNP` (Job Queue) 執行,需在 `INIT.ORA` 設定:
SNAPSHOT_REFRESH_PROCESSES = 1 -- 或更高 (並行刷進程數)
JOB_QUEUE_PROCESSES = 5 -- 總 Job 執行進程數
修改後需重啟資料庫生效。驗證:`SELECT VALUE FROM V$PARAMETER WHERE NAME = 'job_queue_processes';`
| 模式 | 適用場景 | 前提條件 | 網路流量 | 一致性風險 |
|---|---|---|---|---|
| FAST | 高頻同步 (分鐘/小時級)、來源變更量小 | 來源表有 MV Log、有 PK/ROWID | 極小 (增量) | 低 (Log 完整時) |
| COMPLETE | 低頻校正 (日/週)、來源無 PK、DDL 變更後 | 無特殊前提 | 大 (全量結果集) | 無 (重新計算) |
| FORCE | 折衷:嘗試 FAST,失敗自動轉 COMPLETE | 同 FAST | 視實際模式 | 低 |
Oracle 9i 起正式更名為 **Materialized View**,功能大幅增強:
快照/物化視圖是 Oracle 實現「讀寫分離」、「異構同步」、「預計算加速」的核心利器。正確設計 MV 定義、選擇刷新策略、監控 MV Log 健康度,能以極低成本解決跨庫報表、異地備份、緩存熱點資料等高頻架構挑戰。