1.2.9.2 ADD COLUMN機能の拡張
表の管理
列のデフォルト値は、NOT NULLと指定された列のデータ・ディクショナリに保持されます。
デフォルト値でNOT NULL制約付きの新規列を追加する場合に、すべての既存レコードにデフォルト値が保存されている必要はなくなりました。これにより、即時のスキーマ変更と既存のデータ・ボリュームからの独立が可能なだけでなく、領域も消費されません。
ふむ。
$ sqlplus /nolog SQL> conn scott/tiger SQL> create table scott.test1 (col1 number); SQL> alter table scott.test1 add (col2 char(3) default 'foo' not null); SQL> alter session set events '10046 trace name context forever, level 12'; SQL> insert into scott.test1 (col1) values (1); SQL> commit; SQL> select * from scott.test1; COL1 COL2 ---------- --------- 1 foo SQL> exit $ cd /opt/oracle/diag/rdbms/orcl/orcl1/trace $ ls -lt|head -5 $ view orcl1_ora_6701.trc ... select binaryDefVal, length(binaryDefVal) from ecol$ where tabobj# = :1 and colnum = :2 $ view $ORACLE_HOME/rdbms/admin/dcore.bsq ... REM This table is an extension to col$ and is used (for now) to store the REM default value with which a column was added create table ecol$ ( tabobj# number, colnum number, binaryDefVal blob) tablespace system / ... $ sqlplus /nolog SQL> conn scott/tiger SQL>select distinct o.object_id, o.object_name, c.column_name from all_objects o, all_tab_cols c, ecol$ e where o.object_type = 'TABLE' and o.owner = c.owner and o.object_name = c.table_name and o.object_id = e.tabobj# and c.column_id = e.colnum; OBJECT_ID OBJECT_NAME COLUMN_NAME --------- -------------------- -------------------- 101108 TEST1 COL2
ecol$ か。
テーブルを drop したのに ecol$ にエントリが残っている場合は、recyclebin にまだいる。