为什么要使用set unused 删除列?

为什么要使用set unused 删除列?[@more@]

为什么要使用set unused 删除列?

先总结一下set unused 这个语句的意思,在删除一个列在Oracle上有很多方式,一个是drop column另一个则是set unused。这两个是不一样的。

做一个试验:

SQL> create table t (a int ,b int , c int);

Table created

SQL> alter table t set unused column b;

Table altered

SQL> desc t;

名称 是否为空? 类型

----------------------------------------- -------- --------------

A NUMBER(38)

B NUMBER(38)

C NUMBER(38)

SQL> select object_id from user_objects where object_name='T';

OBJECT_ID

----------

50580

SQL> select col#,name from sys.col$ where obj#=50580;

COL# NAME

---------- ------------------------------

1 A

0 SYS_C00002_06120202:02:00$

2 C

这里需要注意的事情是设置为unused的列并没有被真正意义的删除,只是在数据字典上加以标识,当我们将数据块上的数据转储出来会发现,数据还在,并没有被删除。而drop就不一样了。接着做

SQL> alter table t drop column c;

Table altered

SQL> select col#,name from sys.col$ where obj#=50580;

COL# NAME

---------- ------------------------------

1 A

这时候可以看到列c已经被删除,不但是c而且b也被删除了。转储数据块上数据会发现数据也被删除了。

这里有一个疑问?

就是set unused的列能否被恢复。因为这里只是被在数据字典上设置为删除,而且数据还在,是否能够恢复,答案是不能够的,Oracle没有提供这个逆操作的命令,理论上是可行的,为什么不能被恢复,而且还是保留这么命令那?

这里主要是用于在删除具有大量数据的列的时候使用的。因为只有这样才能快速删除列,而不会对系统的性能产生影响。而后在系统闲暇的时候使用命令在删除数据。目的是在设置之后,这个列对于以后在操作是隐藏的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/222350/viewspace-913286/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/222350/viewspace-913286/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值