欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

【转】dcba的文章:Oracle的SET UNUSED COLUMN操作到底做了什么?

程序员文章站 2024-01-25 12:08:10
...

我们先来搞一个测试, 将其中的一个列设为UNUSED: SQL DESC T_FID Name Null? Type - COL1 NUMBER COL2 NUMBER COL3 NUMBER SQL ALTER TABLE T_FID SET UNUSED (COL3); Table altered. SQL alter system checkpoint; System altered. 然后我们去查COL$表中的

我们先来搞一个测试, 将其中的一个列设为UNUSED:

SQL> DESC T_FID
Name Null? Type
———————– ——– ——-
COL1 NUMBER
COL2 NUMBER
COL3 NUMBER
SQL> ALTER TABLE T_FID SET UNUSED (COL3);
Table altered.
SQL> alter system checkpoint;
System altered.

然后我们去查COL$表中的三列(COL#,SEGCOL#,NAME), 看看值是什么?
在这儿为了方便, 我就用AUL/MyDUL 的DESC命令去看了

AUL> desc alex.t_fid
Storage(OBJ#=7641 OBJD=7641 TS=2 FILE=3 BLOCK=1529 CLUSTER=0)
No. SEQ Column Name Type
— — —————————– —————-
1 1 COL1 NUMBER
2 2 COL2 NUMBER
0 3 SYS_C00004_05092817:31:11$ NUMBER

AUL> UNLOAD TABLE alex.t_fid;
2005-09-28 17:32:40
Unload OBJD=7641 FILE=3 BLOCK=1529 CLUSTER=0 …
9,8,7
2005-09-28 17:32:40

从这儿可以看到, SET UNUSED时将一个列的名字换一下, 此外还将这个列的显示顺序的值设为0, 原来为3.
虽然Oracle不提供反向操作,但实际上原来的数据还存在, 不提供的原因可能是因为不能保证not null和其他的约束吧.