about materialized view and long(turn)

xlfsy發表於2010-10-22

對於LONG型別的限制很多,不過對於高階複製來說,很多的LONG型別相關的問題都是可以解決的。

對於多主複製,包含LONG型別相對比較麻煩,需要首先修改表結構,將LONG型別轉變為LOB型別。對於物化檢視,就相對簡單很多,不需要修改基表的資料型別。

首先,如果不需要同步LONG型別的欄位,那麼不需要進行任何的修改,只有在物化檢視的建立過程中不包括LONG欄位就可以了。

如果需要包含LONG欄位,那麼只需要在建立物化檢視的時候對LONG型別執行TO_LOB操作,這樣就可以順利建立物化檢視。

當然,建立的物化檢視包含的是LOB欄位。

具體例子如下:

SQL> CREATE TABLE TEST_LONG (ID NUMBER PRIMARY KEY, LONG_COL LONG);

表已建立。

SQL> CREATE MATERIALIZED VIEW LOG ON TEST_LONG;

實體化檢視日誌已建立。

SQL> CREATE MATERIALIZED VIEW MV_TEST_LONG REFRESH FAST AS SELECT * FROM TEST_LONG;
CREATE MATERIALIZED VIEW MV_TEST_LONG REFRESH FAST AS SELECT * FROM TEST_LONG
*
1 行出現錯誤:
ORA-00997:
非法使用 LONG 資料型別


SQL> CREATE MATERIALIZED VIEW MV_TEST_LONG REFRESH FAST AS SELECT ID FROM TEST_LONG;

實體化檢視已建立。

SQL> DROP MATERIALIZED VIEW MV_TEST_LONG;

實體化檢視已刪除。

SQL> CREATE MATERIALIZED VIEW MV_TEST_LONG REFRESH FAST AS SELECT ID, TO_LOB(LONG_COL) LONG_COL
2 FROM TEST_LONG;

實體化檢視已建立。

SQL> INSERT INTO TEST_LONG VALUES (1, 'ABCDEFG');

已建立 1 行。

SQL> SELECT * FROM TEST_LONG;

ID LONG_COL
---------- ------------------------------------------------------------
1 ABCDEFG

SQL> COMMIT;

提交完成。

SQL> EXEC DBMS_MVIEW.REFRESH('MV_TEST_LONG')

PL/SQL 過程已成功完成。

SQL> SELECT * FROM MV_TEST_LONG;

ID LONG_COL
---------- ------------------------------------------------------------
1 ABCDEFG

SQL> UPDATE TEST_LONG SET LONG_COL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' WHERE ID = 1;

已更新 1 行。

SQL> COMMIT;

提交完成。

SQL> EXEC DBMS_MVIEW.REFRESH('MV_TEST_LONG');

PL/SQL 過程已成功完成。

SQL> SELECT * FROM MV_TEST_LONG;

ID LONG_COL
---------- ------------------------------------------------------------
1 ABCDEFGHIJKLMNOPQRSTUVWXYZ

turn from http://yangtingkun.itpub.net/post/468/139790

[@more@]

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

相關文章