当前位置:首页 > Oracle > 正文内容

压缩表维护列的经过

管理员11年前 (2009-12-05)Oracle181

生产数据库一直运行正常,今天要在某张大表上增加一列

SQL>alter table SAL_t_XXXXXXX add P075 number default 0 ;

alter table SAL_t_XXXXXXX add P075 number default 0 ;

ORA-22586: cannot add columns to object tables

SQL>

后又执行如下语句: (注 remark2 一个未使用的列)

SQL>alter table SAL_t_XXXXXXX drop column remark2 ;

alter table SAL_t_XXXXXXX drop column remark2 ;

ORA-12996: cannot drop system-generated virtual column

SQL>

失败后,尝试下面语句

SQL> alter table SAL_t_XXXXXXX rename column Remark2 to r2

Table altered

SQL>

居然成功了!

症状基本可以这样描述了:

表 SAL_t_XXXXXXX 不能新增列,也不能删除表,但是可以修改列名.

难道是: 空间不足了,

执行下面语句

SQL>alter table SAL_t_XXXXXXX pctfree 20 ;

table altered

SQL>alter table SAL_t_XXXXXXX add p075 number default 0 ;

alter table SAL_t_XXXXXXX drop column remark2 ;

ORA-12996: cannot drop system-generated virtual column

SQL>

问题还是存在

google 一下

找到几篇篇类似情况的贴子,

大概原因是:表做过 compress 操作,不过实在是想不起来了,先解决问题

大概通过3个方法

1.修改表为非压缩状态

2.把表改名,重建一个结构相同的表.数据导过来

3.把问题表 exp 导出,再nocomperss 导入

方法1

SQL>alter table SAL_t_XXXXXXX move nocompress ;

table altered

SQL>

alter table SAL_t_XXXXXXX add P075 number default 0 ;

ORA-22586: cannot add columns to object tables

SQL>

失败.

方法2:(之前,手工把问题表的TR和IX等都导出来)

SQL> create table a select * from SAL_t_XXXXXXX ;

table created

SQL>rename SAL_t_XXXXXXX to b ;

table renamed

SQL>rename b to SAL_t_XXXXXXX

table renamed

SQL>drop table b ;

table droped

SQL>-- 执行问题表的TR和IX

编译无效对象

SQL>alter table SAL_t_XXXXXXX add P075 number default 0 ;

table altered

SQL>

第三种方法没有测试…

问题解决之。

打赏 支付宝打赏 微信打赏
    扫描二维码至手机访问

    扫描二维码推送至手机访问。

    版权声明:本文由卖水果的net发布,如需转载请注明出处。

    转载请注明出处:http://www.msgde.net/oracle/oracle_compress_table_modify_cols.html

    分享给朋友:

    发表评论

    访客

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。