有关Oracle 9i压缩表无法添加字段问题

http://tech.ddvip.com   2008年08月09日    社区交流

内容摘要:Oracle在9i增加了表压缩的功能,但是9i中表压缩之后无法添加新的字段。可见,对于9i新增的压缩功能,在10g以前仍然存在比较多问题。

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

  看一个简单的例子:

SQL>CREATETABLET_COMPRESS(IDNUMBER,NAMEVARCHAR2(30))COMPRESS;

  表已创建。

SQL>ALTERTABLET_COMPRESSADDAGENUMBER;
ALTERTABLET_COMPRESSADDAGENUMBER

  *第 1 行出现错误:

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

SQL>SELECT*FROMV$VERSION;
  BANNER
  ----------------------------------------------------------------
  Oracle9iEnterpriseEditionRelease9.2.0.4.0-ProductionPL/SQLRelease9.2.0.4.0-Production
  CORE9.2.0.3.0Production
  TNSfor32-bitWindows:Version9.2.0.4.0-Production
  NLSRTLVersion9.2.0.4.0-Production

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

SQL>CONNYANGTK/YANGTK@YTK102已连接。
SQL>CREATETABLET_COMPRESS(IDNUMBER,NAMEVARCHAR2(30))COMPRESS;

  表已创建。

SQL>ALTERTABLET_COMPRESSADDAGENUMBER;

  表已更改。 

SQL>SELECT*FROMV$VERSION;
  BANNER
  ----------------------------------------------------------------
  OracleDatabase10gEnterpriseEditionRelease10.2.0.1.0-Prod
  PL/SQLRelease10.2.0.1.0-Production
  CORE10.2.0.1.0Production
  TNSfor32-bitWindows:Version10.2.0.1.0-Production
  NLSRTLVersion10.2.0.1.0-Production

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

SQL>CONNYANGTK/YANGTK@YTK92已连接。
SQL>ALTERTABLET_COMPRESSDROPCOLUMNNAME;
ALTERTABLET_COMPRESSDROPCOLUMNNAME

  *第 1 行出现错误:

  ORA-12996: 无法删除系统生成的虚拟列

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

SQL>ALTERTABLET_COMPRESSMOVENOCOMPRESS;

  表已更改。 

SQL>ALTERTABLET_COMPRESSADDAGENUMBER;

  表已更改。  

SQL>ALTERTABLET_COMPRESSDROPCOLUMNNAME;

  表已更改。

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

作者:杨廷琨    责编:豆豆技术应用

正在加载评论...