有关Oracle 9i压缩表无法添加字段问题
2008-08-09 12:42:40 来源:WEB开发网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以前仍然存在比较多问题。
- ››oracle 恢复误删除的表和误更新的表
- ››Oracle分页查询排序数据重复问题
- ››Oracle创建dblink报错:ORA-01017、ORA-02063解决
- ››Oracle 提高SQL执行效率的方法
- ››Oracle 动态查询,EXECUTE IMMEDIATE select into...
- ››Oracle 11g必须开启的服务及服务详细介绍
- ››oracle性能34条优化技巧
- ››oracle数据库生成随机数的函数
- ››Oracle 数据库表空间容量调整脚本
- ››oracle单库彻底删除干净的方法
- ››Oracle创建表空间、创建用户以及授权、查看权限
- ››oracle 中 UPDATE nowait 的使用方法
更多精彩
赞助商链接