不同字符集資料庫之間的資料同步問題-補

wmlm發表於2008-07-09
原來總結過如何做簡單的檢視查詢,有時候不能滿足需要,還要增加物化檢視,比如要增加索引等等,正好,在做專案時遇到這樣一個需求,總結一下,以後遇到類似場景做個參考。我看ORACLE的文件時,如一粒沙沉入大海,感覺內容太多,比如STREAM、比如高階複製、、、很多狠多內容,而且都很有用,怎麼辦?學習-實踐-總結-共享[@more@]

--======問題的提出========--
/**
XXX專案組,要求我們想個辦法,
解決XXX資料庫(英文字符集)抽取XXX(中文字符集)資料庫的問題,

*/

-- Multitier Materialized Views

CREATE MATERIALIZED VIEW hr.employees REFRESH FAST FOR UPDATE AS
SELECT * FROM e
WHERE EXISTS
(SELECT * FROM d
WHERE e.department_id = d.department_id
AND EXISTS
(SELECT * FROM l
WHERE l.country_id = 'UK'
AND d.location_id = l.location_id));
/**
-- ============= 實驗流程==============--
1 從中文-車購稅模擬庫上,匯出一個表做測試,GD_CLDA ,保留100條記錄
2 將這個表匯入到筆記本的中文-testdb資料庫中,做為Master Table
3 在testdb資料庫中建level1 MV,只做PK型,不加函式
4 在orcl英文庫中建level2 MV

重複3、4步,加上函式。

在做3步時,遇到LARGE POOL分配錯誤的問題。

*/

--==== 在testdb資料庫上的操作 中文字符集 ===--
-- 匯入測試用主表
SQL> @D:zl_12366CheGouShuiDZSYDAgd_clda.sql

-- 在主表上建快照日誌
SQL> create materialized view log on gd_clda;

Materialized view log created

-- 在主表上建一個全部欄位無函式的MV
SQL> create materialized view v_gd_clda
2 refresh fast
3 as select * from gd_clda;

Materialized view created

-- 在主表上建一個帶函式的MV
SQL> create materialized view v_gd_clda2
2 refresh fast
3 as select da_bs,utl_raw.cast_to_raw(nsr_mc) as nsr_mc from gd_clda;

Materialized view created

-- 在MV上增加MV LOG
SQL> create materialized view log on v_gd_clda;

Materialized view log created

SQL> create materialized view log on v_gd_clda2;

Materialized view log created

-- 到英文庫上建MV,然後回來插入一條測試記錄
-- 增量重新整理帶函式的MV
SQL> exec dbms_mview.refresh('v_gd_clda2','f');

PL/SQL procedure successfully completed
-- 確定重新整理成功
SQL> select count(1) from v_gd_clda2;

COUNT(1)
----------
101

SQL>

--========在ORCL資料庫上的操作 英文字符集=========--
-- 建一個資料庫鏈路
SQL> create database link testdb
2 connect to scott identified by tiger using 'testdb';

Database link created
-- 驗證鏈路
SQL> select count(1) from ;

COUNT(1)
----------
28

-- 建立增量更新MV
SQL> create materialized view gd_clda1
2 refresh fast
3 as select * from ;

Materialized view created

SQL> create materialized view gd_clda2
2 refresh fast
3 as select da_bs,utl_raw.cast_to_varchar2(nsr_mc) as nsr_mc from ;

Materialized view created

-- 驗證MV的建立
SQL> select nsr_mc from gd_clda2;

-- 在中文庫有新記錄時,增量重新整理本地快照
SQL> exec dbms_mview.refresh('gd_clda2','f');

PL/SQL procedure successfully completed

-- 驗證記錄數的增長
SQL> select count(1) from gd_clda2;

COUNT(1)
-------------------
101

-- 查詢剛才插入的記錄
SQL> select nsr_mc from gd_clda2 where nsr_mc='王旺';

NSR_MC
--------------------------------------------------------------------------------
王旺

--===============END ==================--

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271063/viewspace-1007045/,如需轉載,請註明出處,否則將追究法律責任。

相關文章