ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle压缩表(二)

oracle压缩表(二)

原创 Linux操作系统 作者:space6212 时间:2019-07-19 22:54:02 0 删除 编辑
在低版本的oracle中,一旦对表进行了压缩,就不能添加删除字段了。但在10g下,可以对压缩表进行结构的变更。
看下面的例子:

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production

TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production

SQL> create table tom(id number) compress;

Table created

SQL> insert /*+ append */ into tom select rownum from dba_objects;

6186 rows inserted

SQL> commit;

Commit complete

SQL> alter table tom nocompress;

Table altered

SQL> alter table tom move;

Table altered

SQL> alter table tom add(b number);

alter table tom add(b number)

ORA-22856: 无法在对象表中添加列

在9201中,无论怎么做无法对表进行添加删除列的操作。

在9204中,有了一点改进,虽然也不能用直接的方法对表结构进行修改,但可以通过曲折的步骤修改压缩表结构。

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production

SQL> create table tom(id number) compress;

Table created.

SQL> insert /*+ append */ into tom select rownum from dba_objects;

30837 rows created.

SQL> commit;

Commit complete.

SQL> alter table tom add(b number);
alter table tom add(b number)
*
ERROR at line 1:
ORA-22856: cannot add columns to object tables


SQL> alter table tom nocompress;

Table altered.

SQL> alter table tom add(b number);
alter table tom add(b number)
*
ERROR at line 1:
ORA-22856: cannot add columns to object tables


SQL> alter table tom move;

Table altered.

SQL> alter table tom add(b number);

Table altered.

SQL> alter table tom compress;

Table altered.

SQL> alter table tom move;

Table altered.

归结一下:
1) alter table xxx nocompress;
2) alter xxx move;
3) alter table xxx
4) alter table xxx compress;
5) alter table xxx move
6) 最后,如果有索引的话不要忘了重建索引

在10g下,oracle显然修正了这个bug
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for Solaris: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production


SQL> create table tom(id number) compress;

表已创建。

SQL> insert /*+ append */ into tom select rownum from dba_objects;

已创建51880行。

SQL> commit;

提交完成。

SQL> alter table tom add(b number);

表已更改。


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

上一篇: oracle压缩表(一)
下一篇: oracle 10G特性之awr
请登录后发表评论 登录
全部评论

注册时间:2005-01-25

  • 博文量
    245
  • 访问量
    166310