Oracle11新特性——線上操作功能增強(三)
打算寫一系列的文章介紹11g的新特性和變化。
11g中線上處理功能得到了很大增強,其中包括線上修改表結構,線上建立或重建索引,建立不可見索引,表增加非空欄位,線上DDL以及物件依賴性細化等。
這一篇介紹Oracle物件依賴性判斷增強。
Oracle11新特性——線上操作功能增強(一):http://yangtingkun.itpub.net/post/468/400430
Oracle11新特性——線上操作功能增強(二):http://yangtingkun.itpub.net/post/468/401293
在11g之前,Oracle判斷依賴性只達到了物件級,也就是說儲存過程訪問的物件一旦發生了變化,那麼Oracle就會將儲存過程置為INVALID狀態。
Oracle使用這種方法強制儲存過程在下次執行之前進行重編譯,避免表結構改變後,儲存過程沒有更新,從而得到錯誤的結果。
這種方法沒有問題,但是有的時候修改往往和關聯的儲存過程沒有關係,但是Oracle並不對這種情況進行判斷,這樣會造成很多不需要重新編譯的儲存過程也被置於INVALID狀態:
SQL> CREATE TABLE T (ID NUMBER);
表已建立。
SQL> CREATE OR REPLACE PROCEDURE P_TEST AS
2 BEGIN
3 INSERT INTO T (ID) VALUES (1);
4 END;
5 /
過程已建立。
SQL> SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'P_TEST';
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
P_TEST PROCEDURE VALID
SQL> ALTER TABLE T ADD (NAME VARCHAR2(30));
表已更改。
SQL> SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'P_TEST';
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
P_TEST PROCEDURE INVALID
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
上面這個簡單的例子就說明了這種情況,對於儲存過程P_TEST來說,只是訪問了T的ID列,T表新增NAME列,並不會影響儲存過程P_TEST。但是在10g及以前版本,Oracle的判斷依賴性達不到欄位級。
而從11g開始,Oracle細化了依賴性的判斷,下面看看在11g中同樣的例子:
SQL> CONN YANGTK/yangtk@ORA11G已連線。
SQL> CREATE TABLE T (ID NUMBER);
表已建立。
SQL> CREATE OR REPLACE PROCEDURE P_TEST AS
2 BEGIN
3 INSERT INTO T (ID) VALUES (1);
4 END;
5 /
過程已建立。
SQL> SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'P_TEST';
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
P_TEST PROCEDURE VALID
SQL> ALTER TABLE T ADD (NAME VARCHAR2(30));
表已更改。
SQL> SELECT OBJECT_NAME, OBJECT_TYPE, STATUS FROM USER_OBJECTS WHERE OBJECT_NAME = 'P_TEST';
OBJECT_NAME OBJECT_TYPE STATUS
------------------------------ ------------------- -------
P_TEST PROCEDURE VALID
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
欄位級依賴性的資訊儲存在dependency$的d_attrs列中。具體演算法就不描述了,根物化檢視日誌中CHANGE_VECTOR$$的演算法十分類似。有興趣的話可以參考:http://yangtingkun.itpub.net/post/468/20498
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69441/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 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新特性——撤銷事務(三)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
- Oracle11新特性——SQL快取結果集(三)OracleSQL快取
- Java 16 新特性:instanceof增強Java