yangtingkun
===========================================================
Oracle9i压缩表无法添加字段
===========================================================

Oracle9i增加了表压缩的功能,但是9i中表压缩之后无法添加新的字段。


看一个简单的例子:

SQL> CREATE TABLE T_COMPRESS (ID NUMBER, NAME VARCHAR2(30)) COMPRESS;

表已创建。

SQL> ALTER TABLE T_COMPRESS ADD AGE NUMBER;
ALTER TABLE T_COMPRESS ADD AGE NUMBER
*
1 行出现错误:
ORA-22856:
无法在对象表中添加列


SQL> SELECT * FROM V$VERSION;

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

而同样的问题在10g中已经被解决:

SQL> CONN YANGTK/YANGTK@YTK102已连接。
SQL> CREATE TABLE T_COMPRESS (ID NUMBER, NAME VARCHAR2(30)) COMPRESS;

表已创建。

SQL> ALTER TABLE T_COMPRESS ADD AGE NUMBER;

表已更改。

SQL> SELECT * FROM V$VERSION;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

ORACLEmetalink文档Doc ID: Note:281472.1中对这个bug进行了描述,对于9205及以下版本的Oracle不但没有办法添加列,就是删除列也会报错

SQL> CONN YANGTK/YANGTK@YTK92已连接。
SQL> ALTER TABLE T_COMPRESS DROP COLUMN NAME;
ALTER TABLE T_COMPRESS DROP COLUMN NAME
*
1 行出现错误:
ORA-12996:
无法删除系统生成的虚拟列

解决方法是通过MOVE,将存储参数设置为NOCOMPRESS,然后就可以执行添加、删除列的操作了。

SQL> ALTER TABLE T_COMPRESS MOVE NOCOMPRESS;

表已更改。

SQL> ALTER TABLE T_COMPRESS ADD AGE NUMBER;

表已更改。

SQL> ALTER TABLE T_COMPRESS DROP COLUMN NAME;

表已更改。

可见,对于9i新增的压缩功能,在10g以前仍然存在比较多问题。

yangtingkun 发表于:2008.08.02 23:25 ::分类: ( ORACLE , Bug ) ::阅读:(984次) :: 评论 (0)

发表评论
标题

在此添加评论
表情符号: smile laughing tongue angry crying sad wassat wink

称呼

邮箱地址(可选)

个人主页(可选)

 authimage


切换风格
新闻聚合
博客日历
文章归档...
最新发表...
最新评论...
最多阅读文章...
最多评论文章...
博客统计...
Blog信息
网站链接...