在对于一个表作相关的结构变化后,所依赖她的对象都将失效,
这里包括视图,过程,函数或包处于无效状态,但其定义仍被保存于数据字典内,
相关的权限信息,引用此视图的同义词,对象,及其他视图也 都会被保留。
当重新访问这些对象的时候,oracle会尝试自动编译这些对象。注意,表,序列,和同义词总是处于有效状态的。
Oracle 能够自动地跟踪数据库中发生的特定变化,并在数据字典中记录相关的方案对象的最新状态。
状态记录是一个递归的过程。引用对象的状态变化不仅会导致其直接依赖对象的状态变化,
同时会影响其间接依赖对象的状态。
下面来看一个简单的例子:
SQL> alter table test drop column z;
Table altered.
SQL> select status,object_name from user_objects;
STATUS
-------
OBJECT_NAME
--------------------------------------------------------------------------------
VALID
TMP_SES
VALID
BIN$SCF8qbynKMfgQAB/AQAMxw==$0
VALID
TEST
STATUS
-------
OBJECT_NAME
--------------------------------------------------------------------------------
INVALID
V_TEST
VALID
I_X
14 rows selected.
SQL> alter session set events '10046 trace name context forever,level 8';
Session altered.
SQL> select * from v_test;
COUNT
----------
100000
********************************************************************************
ALTER VIEW "TEST"."V_TEST" COMPILE
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.01 0.01 0 0 0 0
Execute 1 0.00 0.01 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 2 0.01 0.03 0 0 0 0
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 56 (recursive depth: 1)
********************************************************************************
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/104152/viewspace-216957/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/104152/viewspace-216957/