ITPub博客

首页 > IT基础架构 > 网络安全 > 为什么要使用set unused 删除列?

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

原创 网络安全 作者:litterbaby 时间:2007-05-04 11:27:22 0 删除 编辑
为什么要使用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博客 ” ,链接:https://blog.itpub.net/222350/viewspace-913286/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: DUMP的一些用法
请登录后发表评论 登录
全部评论
  • 博文量
    131
  • 访问量
    465730