col$数据字典中col#,segcol#,intco…

来源:互联网 发布:剑三捏脸数据如何下载 编辑:程序博客网 时间:2024/06/05 04:17

SQL> create cluster test1.C_T1 ( c_anumber(10));

Cluster created.

SQL> create index test1.c_t1_idx on clustertest1.c_t1;

Index created.SQL> create table test1.t1 (avarchar(2),b number(10),c varchar2(10)) cluster te
st1.c_t1 (b);

Table created.

SQL> select object_id from dba_objects whereobject_name='T1';

 OBJECT_ID
----------
     6591

SQL> select col#,name,segcol#,intcol# from col$where obj#=6591;

     COL#NAME                           SEGCOL#   INTCOL#
---------- ---------------------------- ---------- ----------
        1A                                            1
        2B                                            2
        3C                                            3

这里可以看到,intcol#为创建表时的列顺序,col#初始情况下跟intcol#相同。而segcol#表示列在数据段上存储时的顺序。由于这是一个聚簇表,因此在存储时最前的列就是聚簇列。(这里为列B)

SQL> alter table test1.t1 set unused (a);

Table altered.

SQL> select col#,name,segcol#,intcol# from col$where obj#=6591;

     COL#NAME                           SEGCOL#   INTCOL#
---------- ---------------------------- ---------- ----------
        0SYS_C00001_08011917:03:19$                   1
        1B                                            2
        2C                                            3

这里可以看到,在将列设为UNUSED之后,COL#变为0,其余的列的COL#重新排序。而此时该列在数据段上并没有被删除掉,因此其SEGCOL#列仍然保持原来的值。

SQL> alter table test1.t1 add ( dvarchar2(10));

Table altered.

SQL> select col#,name,segcol#,intcol# from col$where obj#=6592;

     COL#NAME                           SEGCOL#   INTCOL#
---------- ---------------------------- ---------- ----------
        0SYS_C00001_08011917:03:19$                   1
        1B                                            2
        2C                                            3
        3D                                            4

SQL> alter table test1.t1 drop(c);

Table altered.

SQL> select col#,name,segcol#,intcol# from col$where obj#=6592;

     COL#NAME                           SEGCOL#   INTCOL#
---------- ---------------------------- ---------- ----------
        1B                                            1
        2D                                            2

删除列后,这三个字段均重新进行了排列。

结论:COL#可以表示该列是否在用(0为UNUSED),SEGCOL#表示各列在数据块上存储时的顺序,INTCOL#表示创建表时各列的定义顺序。

0 0
原创粉丝点击