環境信息
- 節點 1 (HSBILL):Oracle 9.2.0.4.0 64bit on Solaris,Global Name:
HSBILL.HURRAY.COM.CN
- 節點 2 (MARS):Oracle 10.2.0.1.0 64bit on Solaris,Global Name:
MARS.HURRAY.COM.CN
- 均設置
GLOBAL_NAMES=TRUE
1. 連通性驗證
-- 9i 端
TNSPING MARS -- OK (10 msec)
-- 10g 端
TNSPING HSBILL -- OK
2. 雙向 Database Link 創建
-- 9i 上創建指向 10g
CREATE PUBLIC DATABASE LINK "MARS.HURRAY.COM.CN"
CONNECT TO REPADMIN IDENTIFIED BY REPADMIN USING 'MARS';
-- 10g 上創建指向 9i
CREATE PUBLIC DATABASE LINK "HSBILL.HURRAY.COM.CN"
CONNECT TO REPADMIN IDENTIFIED BY REPADMIN USING 'HSBILL';
-- 測試雙向查詢
SELECT * FROM DUAL@MARS; -- 9i 端
SELECT * FROM DUAL@HSBILL; -- 10g 端
3. 測試對象準備
CONNECT EYGLE/EYGLE
CREATE TABLE EYGLE AS SELECT * FROM V$SESSION;
ALTER TABLE EYGLE ADD (CONSTRAINT PK_EYGLE PRIMARY KEY (SADDR));
4. 復制組構建 (在 9i 主定義站執行)
CONNECT REPADMIN/REPADMIN
-- 4.1 創建主復制組
EXEC DBMS_REPCAT.CREATE_MASTER_REPGROUP('REP_910');
-- 4.2 添加復制對象 (使用現有對象、不複製數據)
EXEC DBMS_REPCAT.CREATE_MASTER_REPOBJECT(
SNAME => 'EYGLE', ONAME => 'EYGLE', TYPE => 'TABLE',
USE_EXISTING_OBJECT => TRUE, GNAME => 'REP_910', COPY_ROWS => FALSE);
-- 4.3 生成復制支撐 (包、觸發器等)
EXEC DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT('EYGLE','EYGLE','TABLE');
-- 4.4 添加 10g 為主站 (同步傳播、使用現有對象)
EXEC DBMS_REPCAT.ADD_MASTER_DATABASE(
GNAME => 'REP_910', MASTER => 'MARS.HURRAY.COM.CN',
USE_EXISTING_OBJECTS => TRUE, COPY_ROWS => FALSE,
PROPAGATION_MODE => 'SYNCHRONOUS');
-- 4.5 啟動復制活動
EXEC DBMS_REPCAT.RESUME_MASTER_ACTIVITY('REP_910', TRUE);
5. 功能驗證
-- 初始雙端各 20 行
SELECT COUNT(*) FROM EYGLE.EYGLE; -- 20
SELECT COUNT(*) FROM EYGLE.EYGLE@MARS; -- 20
-- 9i 端刪除 10 行並提交
DELETE FROM EYGLE.EYGLE WHERE ROWNUM < 11;
COMMIT;
-- 同步驗證
SELECT COUNT(*) FROM EYGLE.EYGLE; -- 10
SELECT COUNT(*) FROM EYGLE.EYGLE@MARS; -- 10
-- 版本確認
SELECT * FROM V$VERSION@MARS; -- 10.2.0.1.0
SELECT * FROM V$VERSION; -- 9.2.0.4.0
關鍵點總結
GLOBAL_NAMES=TRUE 強制 DB Link 名稱 = 遠端 Global Name,雙向必須一致
- 復制管理用戶 (
REPADMIN) 兩端需同名同密
USE_EXISTING_OBJECTS=TRUE 避免跨版本對象創建差異導致失敗
PROPAGATION_MODE='SYNCHRONOUS' 保證強一致性,異步模式需配置 Deferred Queue
- 9i 作為主定義站 (MDS) 向前兼容 10g 從站是官方支援路徑