Oracle11新特性——線上操作功能增強(六)
打算寫一系列的文章介紹11g的新特性和變化。
11g中線上處理功能得到了很大增強,其中包括線上修改表結構,線上建立或重建索引,建立不可見索引,表增加非空欄位,線上DDL以及物件依賴性細化等。
這一篇介紹Oracle11g線上重定義功能對物化檢視日誌的支援。
Oracle11新特性——線上操作功能增強(一):http://yangtingkun.itpub.net/post/468/400430
Oracle11新特性——線上操作功能增強(二):http://yangtingkun.itpub.net/post/468/401293
Oracle11新特性——線上操作功能增強(三):http://yangtingkun.itpub.net/post/468/401641
Oracle11新特性——線上操作功能增強(四):http://yangtingkun.itpub.net/post/468/402220
Oracle11新特性——線上操作功能增強(五):http://yangtingkun.itpub.net/post/468/402802
Oracle的線上重定義功能就是利用了物化檢視的功能,透過物化檢視日誌的記錄功能,來同步目標表和基表的資料。
因此,在11g以前,建立了物化檢視日誌的表是無法進行線上重定義操作的:
SQL> CREATE TABLE T AS SELECT ROWNUM ID, A.* FROM DBA_OBJECTS A;
表已建立。
SQL> CREATE INDEX IND_T_NAME ON T (OBJECT_NAME);
索引已建立。
SQL> ALTER TABLE T ADD CONSTRAINTS PK_T PRIMARY KEY (ID);
表已更改。
SQL> BEGIN
2 DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'T');
3 END;
4 /
PL/SQL 過程已成功完成。
SQL> CREATE MATERIALIZED VIEW LOG ON T;
實體化檢視日誌已建立。
SQL> BEGIN
2 DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'T');
3 END;
4 /
BEGIN
*第 1 行出現錯誤:
ORA-12091: 不能聯機重新定義具有實體化檢視的表 "YANGTK"."T"
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 137
ORA-06512: 在 "SYS.DBMS_REDEFINITION", line 1478
ORA-06512: 在 line 2
SQL> SELECT * FROM V$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
在11g中,Oracle會利用現有的物化檢視日誌來完成線上重定義的功能。同時,物化檢視日誌也可以作為表的從屬資訊同步到目標上。不過在同步完成後,需要物化檢視執行完全重新整理。
SQL> CREATE TABLE T AS SELECT ROWNUM ID, A.* FROM USER_OBJECTS A;
表已建立。
SQL> CREATE INDEX IND_T_NAME ON T (OBJECT_NAME);
索引已建立。
SQL> ALTER TABLE T ADD CONSTRAINT PK_T PRIMARY KEY (ID);
表已更改。
SQL> CREATE MATERIALIZED VIEW LOG ON T;
實體化檢視日誌已建立。
SQL> BEGIN
2 DBMS_REDEFINITION.CAN_REDEF_TABLE(USER, 'T');
3 END;
4 /
PL/SQL 過程已成功完成。
SQL> SELECT * FROM V$VERSION;
BANNER
-------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for Linux: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production
最後簡單給出11g中包含物化檢視日誌的線上重定義操作步驟:
SQL> CREATE MATERIALIZED VIEW MV_T REFRESH FAST AS SELECT * FROM T;
實體化檢視已建立。
SQL> DELETE T WHERE ID = 1;
已刪除 1 行。
SQL> COMMIT;
提交完成。
SQL> SELECT COUNT(*) FROM T;
COUNT(*)
----------
23
SQL> SELECT COUNT(*) FROM MV_T;
COUNT(*)
----------
24
SQL> CREATE TABLE T_INTER PARTITION BY HASH (ID)
2 PARTITIONS 4
3 AS SELECT ROWNUM ID, A.* FROM USER_OBJECTS A WHERE 1 = 2;
表已建立。
SQL> BEGIN
2 DBMS_REDEFINITION.START_REDEF_TABLE(USER, 'T', 'T_INTER');
3 END;
4 /
PL/SQL 過程已成功完成。
SQL> VAR V_NUM NUMBER
SQL> BEGIN
2 DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS(USER, 'T', 'T_INTER', COPY_MVLOG => TRUE, NUM_ERRORS =
> :V_NUM);
3 END;
4 /
PL/SQL 過程已成功完成。
SQL> PRINT :V_NUM
V_NUM
----------
0
SQL> SELECT COUNT(*) FROM T;
COUNT(*)
----------
23
SQL> SELECT COUNT(*) FROM T_INTER;
COUNT(*)
----------
23
SQL> DELETE T WHERE ID = 2;
已刪除 1 行。
SQL> COMMIT;
提交完成。
SQL> BEGIN
2 DBMS_REDEFINITION.SYNC_INTERIM_TABLE(USER, 'T', 'T_INTER');
3 END;
4 /
PL/SQL 過程已成功完成。
SQL> SELECT COUNT(*) FROM T_INTER;
COUNT(*)
----------
22
SQL> BEGIN
2 DBMS_REDEFINITION.FINISH_REDEF_TABLE(USER, 'T', 'T_INTER');
3 END;
4 /
PL/SQL 過程已成功完成。
SQL> SELECT TABLE_NAME, PARTITION_NAME FROM USER_TAB_PARTITIONS WHERE TABLE_NAME = 'T';
TABLE_NAME PARTITION_NAME
------------------------------ ------------------------------
T SYS_P45
T SYS_P46
T SYS_P47
T SYS_P48
SQL> EXEC DBMS_MVIEW.REFRESH('MV_T')
BEGIN DBMS_MVIEW.REFRESH('MV_T'); END;
*第 1 行出現錯誤:
ORA-12034: "YANGTK"."T" 上的實體化檢視日誌比上次重新整理後的內容新
ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2537
ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2743
ORA-06512: 在 "SYS.DBMS_SNAPSHOT", line 2712
ORA-06512: 在 line 1
SQL> EXEC DBMS_MVIEW.REFRESH('MV_T', 'C')
PL/SQL 過程已成功完成。
SQL> DELETE T WHERE ID = 3;
已刪除 1 行。
SQL> COMMIT;
提交完成。
SQL> EXEC DBMS_MVIEW.REFRESH('MV_T')
PL/SQL 過程已成功完成。
SQL> SELECT * FROM MV_T WHERE ID = 3;
未選定行
11g線上重定義對物化檢視日誌進行了支援,同時COPY_TABLE_DEPENDENTS過程也新增了對物化檢視日誌複製的功能。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69448/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle11新特性——線上操作功能增強(七)Oracle
- Oracle11新特性——線上操作功能增強(五)Oracle
- Oracle11新特性——線上操作功能增強(四)Oracle
- Oracle11新特性——線上操作功能增強(三)Oracle
- Oracle11新特性——線上操作功能增強(二)Oracle
- Oracle11新特性——線上操作功能增強(一)Oracle
- Oracle11新特性——備份恢復功能增強(六)Oracle
- Oracle11新特性——分割槽功能增強Oracle
- Oracle11新特性——分割槽功能增強(五)Oracle
- Oracle11新特性——分割槽功能增強(四)Oracle
- Oracle11新特性——分割槽功能增強(三)Oracle
- Oracle11新特性——分割槽功能增強(二)Oracle
- Oracle11新特性——分割槽功能增強(一)Oracle
- Oracle11新特性——備份恢復功能增強Oracle
- Oracle11新特性——備份恢復功能增強(五)Oracle
- Oracle11新特性——備份恢復功能增強(四)Oracle
- Oracle11新特性——備份恢復功能增強(三)Oracle
- Oracle11新特性——備份恢復功能增強(二)Oracle
- Oracle11新特性——備份恢復功能增強(一)Oracle
- Oracle11新特性——備份恢復功能增強(十)Oracle
- Oracle11新特性——備份恢復功能增強(九)Oracle
- Oracle11新特性——備份恢復功能增強(八)Oracle
- Oracle11新特性——備份恢復功能增強(七)Oracle
- Oracle11新特性——備份恢復功能增強(十一)Oracle
- Oracle11新特性——PLSQL新特性(六)OracleSQL
- Oracle12c功能增強 新特性之管理功能的增強Oracle
- Oracle11新特性——PLSQL新特性(七)OracleSQL
- Oracle11新特性——PLSQL新特性(五)OracleSQL
- Oracle11新特性——PLSQL新特性(四)OracleSQL
- Oracle11新特性——PLSQL新特性(三)OracleSQL
- Oracle11新特性——PLSQL新特性(二)OracleSQL
- Oracle11新特性——PLSQL新特性(一)OracleSQL
- Oracle 12c新特性 - Active Data Guard功能增強Oracle
- Oracle11g新特性——LOB型別功能增強Oracle型別
- Oracle 12c新特性 - Data Pump (expdp/impdp) 功能增強Oracle
- Java 16 新特性:instanceof增強Java
- Oracle12c中資料泵新特性之功能增強(expdp, impdp)Oracle
- Oracle11新特性——虛擬列Oracle