場景定義
比較兩表 A、B (結構相同、含 NULL 值) 資料是否完全一致。
方法一:手動導出比對法
操作流程
- 兩表依相同規則排序 (ORDER BY PK)
- PL/SQL Developer 導出 XLS
- XLS 轉 TXT (批次轉換工具)
- Beyond Compare 等工具逐行比對
優缺點
| 優點 | 缺點 |
| 差異一目了然 (視覺化逐行) | 耗時:導出、轉檔、比對多步驟 |
| 適合小資料量、一次性比對 | 大資料量導出極慢、檔案巨大 |
| 無需寫 SQL、業務人員可操作 | 非自動化、難以納入例行檢核 |
方法二:SQL 集合運算法 (推薦自動化)
建表範例
CREATE TABLE formula (
id VARCHAR2(50) PRIMARY KEY,
formula_name VARCHAR2(50),
formula_content VARCHAR2(2000),
formula_type VARCHAR2(20)
);
除 PK 外欄位均可為 NULL。
核心查詢:利用集合運算處理 NULL
-- A 有、B 無 (含 NULL 比對)
SELECT * FROM formula_a
MINUS
SELECT * FROM formula_b;
-- B 有、A 無
SELECT * FROM formula_b
MINUS
SELECT * FROM formula_a;
MINUS (集合差集) 內部正確處理 NULL = NULL 為真
- 單純
WHERE A.* = B.* 無法比對雙 NULL 欄位
- 若兩查詢皆無結果 → 兩表資料完全一致
跨資料庫比對
- 建立 Database Link:
CREATE DATABASE LINK remote_db CONNECT TO user IDENTIFIED BY pwd USING 'tns_alias';
- 查詢遠端表:
SELECT * FROM formula@remote_db
優缺點
| 優點 | 缺點 |
| 極快:大資料量優勢明顯 | 僅顯示單向差異,需執行兩次查詢 |
| 可自動化、排程、整合監控 | 無法直觀呈現逐行差異細節 |
| 資料庫內完成,無網路傳輸開銷 | 需具備 SQL 撰寫能力 |
進階替代方案
DBMS_COMPARISON (11g+):官方套件,支援收斂、同步、詳細差異報表
HASH 比對:SELECT ORA_HASH(ROW) FROM table 快速指紋比對
- GoldenGate / CDC 工具:即時同步驗證
選型建議
- 日常自動化巡檢、大表比對 → SQL MINUS / DBMS_COMPARISON
- 異常排查、小表、需人工審閱差異 → 手動導出 + Beyond Compare
- 跨庫比對 → 建立 DB Link + SQL 法
- 雙向差異合併報表 → 使用
FULL OUTER JOIN 配合 CASE 標記來源
- 上一篇文章: Oracle SMON 與 ARCH 進程深度解析:空間整理、實例恢復、歸檔效能優化三大策略
- 下一篇文章: Oracle 體系架構全景解析:從物理結構到後台進程
Copyright ©
程式碼之家 All Rights Reserved