about materialized view and long(turn)
时间:2010-10-22 来源:xlfsy
对于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