首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 異構資料庫物件/表結構對比腳本:DB Link + MINUS 集合運算

     編輯:Oracle 資料庫相關知識

應用場景

  • 開發庫 vs 生產庫 物件差異稽核。
  • 多站點部署升級後驗證一致性。
  • 高級複製 (Advanced Replication) 建立複製組前,必須確認主節點/主定義節點表定義完全一致,否則報 ORA-23309。

工具替代方案

Embarcadero Change Manager、OEM DB-Diff,但授權昂貴且非隨處可用。

自製 SQL 腳本:物件層級對比

-- 需先建立 DB Link:ora_zs、ora_sjjk
SET LINESIZE 80 VERIFY OFF FEEDBACK OFF PAUSE OFF
ACCEPT obj_owner PROMPT '物件擁有者: '
ACCEPT inst_1_dblink PROMPT '第一實例 DB Link (含@): '
ACCEPT inst_2_dblink PROMPT '第二實例 DB Link (含@): '

COLUMN datetime NEW_VALUE datetime NOPRINT
COLUMN inst_code1_name NEW_VALUE inst_code1_name NOPRINT
COLUMN inst_code2_name NEW_VALUE inst_code2_name NOPRINT
SELECT TO_CHAR(SYSDATE,'MM/DD/YY') datetime FROM DUAL;
SELECT GLOBAL_NAME inst_code1_name FROM GLOBAL_NAME&inst_1_dblink;
SELECT GLOBAL_NAME inst_code2_name FROM GLOBAL_NAME&inst_2_dblink;

TTITLE CENTER '物件比較報告' SKIP 1 -
CENTER '物件在 &inst_code1_name 但不在 &inst_code2_name' SKIP 2
COL OBJECT_TYPE FORMAT A15 HEAD '類型'
COL OBJECT_NAME FORMAT A35 HEAD '名稱'
COL STATUS FORMAT A10 HEAD '狀態'
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
FROM ALL_OBJECTS&inst_1_dblink
WHERE OWNER = UPPER('&OBJ_OWNER') AND OBJECT_TYPE != 'SYNONYM'
MINUS
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
FROM ALL_OBJECTS&inst_2_dblink
WHERE OWNER = UPPER('&OBJ_OWNER') AND OBJECT_TYPE != 'SYNONYM'
ORDER BY 2,3;

TTITLE CENTER '物件比較報告' SKIP 1 -
CENTER '物件在 &inst_code2_name 但不在 &inst_code1_name' SKIP 2
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
FROM ALL_OBJECTS&inst_2_dblink
WHERE OWNER = UPPER('&OBJ_OWNER') AND OBJECT_TYPE != 'SYNONYM'
MINUS
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
FROM ALL_OBJECTS&inst_1_dblink
WHERE OWNER = UPPER('&OBJ_OWNER') AND OBJECT_TYPE != 'SYNONYM'
ORDER BY 2,3;

擴展:表結構欄位級對比

將 ALL_OBJECTS 換為 ALL_TAB_COLUMNS,比較 COLUMN_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLE, DATA_DEFAULT 等屬性,同樣用 MINUS 雙向比對。

優勢

  • 零成本、純 SQL、可納入版控、可排程自動產出報表。
  • 利用集合運算 MINUS 語意清晰、效能佳。
  • 可輕鬆擴展至索引、約束、權限等物件屬性對比。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved